-->

QEMU, 펌웨어를 이용한 가상 공유기 환경 구축 (MIPS)

QEMU 에뮬레이터와 QEMU에 가상으로 실행시키고 싶은 공유기 펌웨어를 사용해 가상 공유기 환경을 구축하고 실행시켜보려고 한다. 구축 환경은 우분투 x64이고 펌웨어는 제조사 웹사이트에 공개된 펌웨어를 다운로드, 파일시스템은 MIPS로 사용했다.

 

- 환경 : Ubuntu x64

- 펌웨어 : 제조사 웹사이트에 공개된 구버전 펌웨어

- 파일시스템 : MIPS

 

 

QEMU 설치

QEMU는 apt-get으로 쉽게 설치할 수 있다. 처음엔 qemu를 설치해야 하는 것인지 아니면 mips이기 때문에 qemu-system-mips64를 설치해야 할지 고민했는데 qemu를 설치하면 mips64도 같이 설치되는 듯 했다.

 

QEMU 설치

 

 

QEMU squeeze/wheezy mips 이미지 다운로드

QEMU를 설치했으면 이제 QEMU squeeze/wheezy mips 이미지를 다운로드 받아야 한다. 아래 사이트에서 다운받을 수 있다.

 


QEMU squeeze/wheezy 이미지 다운로드 사이트

 

Index of /~aurel32/qemu

 

people.debian.org

 

 

mips 말고도 여러가지가 많아보이는데 이 중 arm도 나중에 사용해보고 포스팅할 예정이다. 지금은 mips 이미지를 다운로드 받아야 하므로 mips 디렉토리로 들어가준다.

 

QEMU, squeeze/wheezy mips 이미지 다운로드 페이지

 

 

그리고 여기서 debian_~.qcow2 중에 하나를 다운받고 vmlinux~-malta 중에 하나를 다운받아 총 2개의 파일을 다운받아야 하는데 어떤 파일을 받아야 할지 난감해진다. 제일 정확한 방법은 하단의 'To use this image, you need to install QEMU 1.1.0 (or later). Start QEMU' 이 부분을 참고하는 것이다. 

 

QEMU, squeeze/wheezy mips 이미지 다운로드 페이지

 

 

친절하게 설명되어 있듯이, x32는 빨간색 파일을 다운로드받고 x64는 파란색 파일을 다운로드받으면 된다. 사실 squeeze와 wheezy의 명확한 차이는 모르겠어서 나는 wheezy로 다운받아 주었다. 또한 qemu-system-mips로 시작하는 아래의 명령어는 케뮤를 구동시키기 위해 필요한 명령어이기 때문에 잘 복사해둔다.

 


x32 -> vmlinux-3.2.0-4-4kc-malta / debian_wheezy_mips_standard.qcow2
x64 -> vmlinux-3.2.0-4-5kc-malta / debian_wheezy_mips_standard.qcow2

 

QEMU, squeeze/wheezy mips 이미지 x32/x64 확인

 

 

위에서 받아야 할 파일을 정했으면 wget으로 다운받아준다. 

 

QEMU, squeeze/wheezy mips 이미지 다운로드

 

 

QEMU 구동 확인 및 로그인

필요한 파일도 다운받았으니 이제 QEMU 구동이 잘 되는지 확인해보자. 위에서 확인한 명령어를 그대로 입력해주면 다음과 같이 QEMU가 실행되는 것을 볼 수 있다.

 


qemu-system-mips64 -M malta -kernel vmlinux-3.2.0-4-5kc-malta -hda debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0"

 

QEMU 구동 확인

 

 

초기 로그인은 root/root로 하면 된다.

 

QEMU 초기 로그인

 

 

호스트<->게스트(QEMU) 연결

하지만 단순히 구동만 시켜서는 공유기를 올릴 수 없기 때문에 호스트와 게스트(QEMU)를 연결시켜주는 작업이 필요하다. IP를 설정해주는 방법도 있고 ssh를 열어두는 방법도 있는데 나는 ssh를 열어두는 방식을 사용했다. ssh 통신을 위해 위에서 구동시킬 때 사용한 명령어 뒤에 '-redir tcp:2022::22'를 붙여준다(당연하게도 여기서 2022는 내가 임의로 준 포트번호이다). 추가로 웹접속을 위해 '-redir tcp:2080::80'으로 80포트도 redir 시켜준다.

 

 


qemu-system-mips64 -M malta -kernel vmlinux-3.2.0-4-5kc-malta -hda debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -redir tcp:2022::22 -redir tcp:2080::80

 

QEMU 22, 80 포트 설정

 

 

해당 redir 옵션은 케뮤 안에서 ssh를 열기 위한 것으로 호스트의 2022 포트를 케뮤의 22포트로 연결시킨다는 뜻이다. 이것은 곧 케뮤에서 22포트를 해당 명령으로 열어두었기 때문에 호스트에서 2022포트로 접속하면 케뮤의 22포트로 접속된다는 뜻이다. 따라서 'ssh -p 2022 localhost'를 호스트에서 사용하면 아래와 같이 케뮤로 접속할 수 있다.

 

QEMU, ssh 접속

 

 

파일시스템 전송

케뮤도 구동시켰고 연결도 시켰으니 이제 펌웨어에서 추출한 파일시스템을 케뮤에 올려야 한다. 펌웨어에서 fmk든 binwalk든 등 툴을 사용해 추출한 파일시스템을 케뮤에 전송하기 위해 압축해준다. 파일시스템 전송은 scp명령어를 사용해서 진행했고 케뮤에서 ls로 확인해보면 압축파일이 잘 전송됐음을 알 수 있다.

 


scp -P [포트] [파일시스템압축파일] root@[IP]:[저장할장소]

 

QEMU에 scp로 파일시스템 전송

 

 

그리고 앞으로의 과정은 케뮤가 너무 느려서...... 호스트 터미널에서 ssh 연결을 통해 케뮤에 접속해서 진행하도록 한다. 압축한 파일을 전송했으니 케뮤에 접속해서 (혹은 케뮤에서) 파일시스템 압축을 풀어준다.

 

QEMU에서 파일시스템 압축 풀기

 

 

chroot 설정 및 default, cgibin 복사

이제 default 안에 있는 파일들을 tmp 폴더로 복사해준다.

 

default 파일 tmp로 옮기기

 

 

tmp 폴더로 복사를 왜하는지 모르겠어서 안하고 해봤는데 안하니까 나중에 웹서비스 실행을 위해 httpd를 실행시킬 때 아래와 같이 default의 var 디렉토리와 관련한 aborting이 있다고 뜨며 웹 접속이 안되는 것을 확인했다. 실행권한 때문인가...

 

 

 

그리고 해당 디렉토리를 root로 인식시키기 위한 chroot 명령을 수행해준 후 웹페지이지 접속을 위한 cgibin의 파일들을 아래와 같이 복사해준다. 


chroot . ./bin/sh

mkdir /home/httpd/192.168.0.1/sess-bin

cp -r cgibin/* /home/httpd/192.168.0.1/sess-bin

cp -r cgibin/* /bin/login-cgi

 

chroot 설정 및 cgibin 파일 옮기기

 

 

cgibin 디렉토리의 파일들을 복사해주지 않으면 cgi 파일을 못찾기 때문에 아래와 같이 웹접속이 안된다.

 

 

 

관리자 페이지 접속

위 캡쳐이미지에도 나와있듯이 './sbin/httpd'로 웹서비스를 구동시켜준다. 그리고 모든 설정이 끝났으므로 이제 localhost:2080 으로 접속하면 아래와 같은 관리자 로그인 페이지를 확인할 수 있다(사실 누구나 다 아는데 굳이 가리는게 의미가 있는 것인지는 모르겠다)

 

 

 

이로써 가상 에뮬레이터인 QEMU에 펌웨어 파일시스템을 올려 가상으로 공유기를 구동시켜보았다. 다음 포스팅에서는 ARM 아키텍쳐를 사용하는 펌웨어를 구해서 올려보려고 한다.

댓글

Designed by JB FACTORY