[정리]
QEMU에서 네트워크 통신을 위해서 브릿지 모드를 설정하려 한다.
[출처1]에서 가져온 밑의 그림은 브릿지를 직관적으로 이해하기 쉽게 나와있다.
1 2 3 4 5 6 7 8 9 10 11 12 | HOST +---------------+ | | KVM GUEST1 | | +--------------+ | +------+ | | | LAN ---+--- eth0 | +--+---+---- nic0 | KVM GUEST2 | | tap0----+ | |192.168.1.13 | +--------------+ | | tap1----+ | +--------------+ | | | +------+ | | | | | br0 +--+----------------------+---- nic0 | |192.168.1.12 | |192.168.1.14 | +---------------+ +--------------+ | cs |
[출처1]에서 가져온 아스키 [그림_1]
1 2 3 4 5 6 7 8 9 10 11 12 13 | HOST +---------------+ | 192.168.1.12 | KVM GUEST1 LAN ---+---- eth0 | +--------------+ | ^ | | | | | | | | | +------+ +--+---+---- nic0 | KVM GUEST2 | | tap0----+ | |192.168.100.1 | +--------------+ | | tap1----+ | +--------------+ | | | +------+ | | | | | br0 +--+----------------------+---- nic0 | |192.168.100.254| |192.168.100.2 | +---------------+ +--------------+ | cs |
[출처1]에서 가져온 아스키 [그림_2]
그림_1에서 보면 하나의 브릿지에서 eth0과 가상 머신들의 인터페이스가 모두 합쳐져있다. NAT처럼 사용할 수 있다.
하지만 [그림_2]의 경우 eth0이 br0(브릿지)와 연결되어 있는 모양이다. 이를 통해서 가상 머신을 외부로 부터 숨길수 있다.
브릿지 설정
host 네트워크 상태 확인
1 2 3 4 5 6 7 8 9 10 11 | enp0s5 Link encap:Ethernet HWaddr 00:1c:42:02:97:eb inet addr:10.211.55.21 Bcast:10.211.55.255 Mask:255.255.255.0 inet6 addr: fdb2:2c26:f4e4:0:880e:3a86:25b0:7afe/64 Scope:Global inet6 addr: fdb2:2c26:f4e4:0:2083:eec5:b8e5:6a5/64 Scope:Global inet6 addr: fe80::b2b3:c55e:645e:e434/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5546671 errors:0 dropped:0 overruns:0 frame:0 TX packets:2573908 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2793475526 (2.7 GB) TX bytes:232449268 (232.4 MB) | cs |
enp0s5 인터페이스를 사용하고 있다.
그리고 라우팅 정보를 확인한다.
1 2 3 4 5 | $route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.211.55.1 0.0.0.0 UG 100 0 0 enp0s5 10.211.55.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s5 | cs |
10.211.55.0/24 로 들어오고 나가는 패킷이 라우팅 되어 있는것을 확인할 수 있다.
이제 브릿지 네트워크를 구성해본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #sudo apt-get install bridge-utils //bridge control을 설치함 Usage: brctl [commands] commands: addbr <bridge> add bridge delbr <bridge> delete bridge addif <bridge> <device> add interface to bridge delif <bridge> <device> delete interface from bridge hairpin <bridge> <port> {on|off} turn hairpin on/off setageing <bridge> <time> set ageing time setbridgeprio <bridge> <prio> set bridge priority setfd <bridge> <time> set bridge forward delay sethello <bridge> <time> set hello time setmaxage <bridge> <time> set max message age setpathcost <bridge> <port> <cost> set path cost setportprio <bridge> <port> <prio> set port priority show [ <bridge> ] show a list of bridges showmacs <bridge> show a list of mac addrs showstp <bridge> show bridge stp info stp <bridge> {on|off} turn stp on/off #brctl addbr br0 //br0 add #ifconfig br0 up //br0 interface up # cat /etc/network/interfaces auto lo iface lo inet loopback auto br0 # 자동으로 br0 인터페이스 up iface br0 inet dhcp # Defines a static IP address for br0 bridge_ports enp0s5 # 호스트서버의 물리적인 enp0s5 포트와 br0 포트를 연결 bridge_stp off # Spanning Tree Protocol (STP) is used to allow multiple bridges bridge_fd 0 # This is the forwarding delay for interfaces joining the bridge bridge_maxwait 0 # 브릿지 네트워크 최대 대기 갯수 #ifconfig enp0s5 0.0.0.0 # 기존의 인터페이스는 any로 변경 | cs |
이렇게 하면 이제 호스트에서의 내용은 끝이났다.
위와 같이 설정하고 다시 호스트의 네트워크 상태를 확인해본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | br0 Link encap:Ethernet HWaddr 00:1c:42:02:97:eb inet addr:10.211.55.21 Bcast:10.211.55.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1428 errors:0 dropped:0 overruns:0 frame:0 TX packets:51 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:349375 (349.3 KB) TX bytes:5444 (5.4 KB) enp0s5 Link encap:Ethernet HWaddr 00:1c:42:02:97:eb UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5559104 errors:0 dropped:0 overruns:0 frame:0 TX packets:2574148 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2796761841 (2.7 GB) TX bytes:232473487 (232.4 MB) $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.211.55.1 0.0.0.0 UG 0 0 0 br0 10.211.55.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 | cs |
보기와 같이 br0 브릿지 네트워크 인터페이스가 옳바르게 ip를 할당받고 동작하고 있다.
라우팅 테이블도 br0로 옳바르게 변경된 것을 확인할 수 있다.
이제 QEMU와 관련된 작업을 진행한다
QEMU가 사용할 인터페이스 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | > QEMU의 nic과 연결해줄 tap interface를 만들어 줘야 한다. > 여기서 직관적으로 인자에 대해서는 알수 있다. > user파라 미터의 경우 현재의 유저가 해당 interface에 접근할 수 있음을 나타낸다. #sudo ip tuntap add dev tap0 mode tap user $(whoami) > 브릿지 네트워크에 tap0 인터페이스를 추가시키는 것을 말한다. #sudo brctl addif br0 tap0 #sudo ifconfig tap0 up 그리고 이제 QEMU를 동작 시킨다. > go.sh 파일을 이용해서 QEMU를 동작시킨다. > The - net nic command defines a network adapter in the guest operating system. > Both network devices are para-virtualized devices which is indicated by the model=virtio value. > The -net tap command defines how QEMU configures the host. > Each network device is added to and removed from a different bridge by using scripts. #./go.sh --------- #!/bin/sh qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2\ -net nic -net tap,ifname=tap0 \ -append "root=/dev/sda1 console=tty0" -nographic ---------- > QEMU안에서 ifconfig 했을 때의 내용 root@debian-mips:~# ifconfig eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:10.211.55.34 Bcast:10.211.55.255 Mask:255.255.255.0 inet6 addr: fdb2:2c26:f4e4:0:5054:ff:fe12:3456/64 Scope:Global inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:19 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1940 (1.8 KiB) TX bytes:1990 (1.9 KiB) Interrupt:10 Base address:0x1020 > 그리고 host에서 tap0의 인터페이스를 QEMU 내부의 interface 주소로 설정 #sudo ifconfig tap0 10.211.55.34 | cs |
[출처1] http://mapoo.net/os/oslinux/%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%99%80-kvmqemu-%EA%B0%80%EC%83%81%EB%A8%B8%EC%8B%A0-%EC%82%AC%EC%9D%B4%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%B5%EC%8B%A0/
참고차료 : https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaat/liaatbptap.htm
http://blog.elastocloud.org/2015/07/qemukvm-bridged-network-with-tap.html
'기타[etc]' 카테고리의 다른 글
python thread 병렬처리 (0) | 2018.04.12 |
---|---|
[퍼옴] gdb 분석 보조 - python (0) | 2018.03.24 |
파이썬 타이핑 (0) | 2017.08.20 |
[Volatility] Profile 만들기 (0) | 2017.07.22 |
[PYTHON] bruteforce (0) | 2017.07.09 |