tap 방식 으로 qemu 를 사용 하여 가상 컴퓨터 NAT 네트워크 구축

기본 개념:
가상 컴퓨터
호스트:가상 컴퓨터 서버 만 들 기
수요:nat 방식 으로 qemu 를 이용 하여 가상 컴퓨터 가 외부 네트워크 에 접근 할 수 있 도록 가상 컴퓨터 를 만 듭 니 다.
현재 호스트 의 ip 는 192.168.139.85 입 니 다.
vm 의 ip 단 계 를 192.168.12.0 단 으로 설정 하고 싶 습 니 다.dhcp 는 자동 으로 ip 를 가 져 오고 외부 네트워크 에 접근 합 니 다.
기본 원리:
tap 방식 으로 vm 를 구축 하고 망 교 virbr 0 을 구축 합 니 다.이 망 교 를 게 이 트 웨 이 192.168.122.1 로 하고 tap 를 이 망 교 virbr 0 에 연결 합 니 다.tap 설 비 는 vm 안의 eth 0 으로 통 합 됩 니 다.그래서 설립 된 모든 vm 는 망 교 에서 서로 방문 할 수 있 습 니 다.호스트 에서 dnsmasq 로 dhcp 서 비 스 를 구축 하고 virbr 0 에 연결 할 수 있 습 니 다.이렇게 하면 브리지 에 연 결 된 모든 vm 는 dhcp 서 비 스 를 사용 할 수 있 습 니 다.vm 에서 dhclient 를 사용 하면 호스트 dhcp 서비스 가 제공 하 는 ip 주 소 를 얻 을 수 있 습 니 다.호스트 에 nat 의 iptables 를 설정 한 다음 시스템 의 퍼 가기 기능 을 열 수 있 습 니 다.
설치 필요:qemu,tap,brctl,iptables,커 널 파일 bzImage,운영 체제 미 러 파일 hda.img
환경:Ubuntu 14.04.4 LTS
1.120 M 의 간단 한 Liux 미 러 hda.img 을 만 들 고 ip,ifconfig,iptables,dhclient 등 네트워크 명령 을 지원 해 야 합 니 다.
수립 방법

debootstrap        --variant=minbase         --include=util-linux,dhcp-client,ssh,vim,make,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace         --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6         --arch i386         etch etch         'http://archive.debian.org/debian'

이 debootstrap 명령 은 국내 에서 통 하지 않 을 수 있 습 니 다.aws 에서 조작 하 세 요.사용 가능 한 img 파일 이 있 으 면 두 번 째 단 계 를 보 세 요.
구체 적 인 세부 사항 참고:
기본 가상 컴퓨터http://haoningabc.iteye.com/blog/2306941
bzImage 의 커 널 파일 과 hda.img 의 운영 체제 미 러 를 가 져 옵 니 다.
2.qemu 를 사용 하여 가상 컴퓨터 를 만 들 고 호스트 의 네트워크 를 설정 합 니 다.

qemu-system-i386 -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1"  -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-kernel 지정 커 널 파일 bzImage
-app end 는 kernel 에서 사용 하 는 커 널 매개 변수 에 맞 춰 시작 파일/sbin/init 를 지정 합 니 다.
-drive 는 하 드 디스크 파일 hda.img 을 지정 하고-hda.img 도 사용 할 수 있 습 니 다.
-nographic 는 그래 픽 인터페이스 를 사용 하지 않 습 니 다.이것 이 없 으 면 지정 해 야 합 니 다.-vnc 0.0.0.0:1 인 자 는 vncviewer 를 통 해 접근 합 니 다.
예컨대

 qemu-system-i386 -kernel /root/jslinux/obj/linux-x86-basic/arch/i386/boot/bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "root=/dev/sda rw rdinit=/sbin/init notsc=1"  -vnc 0.0.0.0:1 -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-boot 는 시작 파 라 메 터 를 설정 하고 d 는 시디롬 이 며 c 는 첫 번 째 하 드 디스크 입 니 다.
-net 지정 네트워크 설정(
중요 하 다
총 세 가지 가 있어 요.
-net nic 에 필요 한 기본 설정,macaddr 에 mac 주 소 를 설정 합 니 다.model 은 네트워크 카드 의 유형 입 니 다.model=?어떤 종류 가 있 는 지 보기
-net tap 에서 브리지 모드 를 사용 할 경우 시작 script=을 지정 하고 downscript 를 닫 아야 합 니 다.
fd 는 이미 있 는 tap 장 치 를 가리 키 며,name 은 Monitor 모드 에서 info network 를 사용 하여 본 이름 입 니 다.ifname 은 tap 장치 가 호스트 에 있 는 이름 입 니 다.
-net user 사용자 모드,qemu 는 Slirp 를 사용 하여 tcp/ip 프로 토 콜 스 택 을 실현 합 니 다.
보통 닉 은 있어 야 합 니 다.tap 와 user 는 하 나 를 선택해 서 사용 해 야 합 니 다.
여기 잘 쓰 세 요.
-net tap,ifname=tap 1 tap 장 치 를 만 듭 니 다.
가상 컴퓨터 를 만 든 후,
호스트 ip link show
tap 1 장치 가 하나 더 발견 되 었 습 니 다.
망 교 를 세우 고,
tap 1 을 다리 에 연결 하고,

#    
brctl addbr virbr0
ip link set tap1 up
# tap     
brctl addif virbr0 tap1

\#nat 의 iptables 설정

iptables -t nat -A POSTROUTING -s "192.168.122.0/255.255.255.0" ! -d "192.168.122.0/255.255.255.0" -j MASQUERADE

\#Liux 커 널 의 퍼 가기 설정

echo 1 >/proc/sys/net/ipv4/ip_forward
#ifconfig eth0 promisc

3.호스트 에서 dnsmasq 서 비 스 를 시작 하고 dhcp 의 server 기능 을 제공 합 니 다.매개 변 수 는 방금 건 설 된 virbr 0 다 리 를 가리 키 는 것 을 주의 하 십시오.

dnsmasq --strict-order --except-interface=lo --interface=virbr0 --listen-address=192.168.122.1 --bind-interfaces  --dhcp-range=192.168.122.2,192.168.122.254 --conf-file=""  --pid-file=/var/run/qemu-dhcp-virbr0.pid  --dhcp-leasefile=/var/run/qemu-dhcp-virbr0.leases --dhcp-no-override 

관건 은
--interface=virbr0
--dhcp-range 네트워크 범위 설정
4.가상 컴퓨터 에서 dhcp 설정 네트워크
여 기 는 vm 에서 작 동 합 니 다.위 에 있 는 것 은 모두 호스트 에서 작 동 합 니 다.

ip link set eth0 up
#  ip
dhclient
#  ping   
ping 192.168.122.1
ping www.baidu.com
#  
ifconfig eth0
#    ip 192.168.122.37
cat /etc/resolv.conf
#  dns      
#ip route    
#          ip
#route add default gw 192.168.122.1 netmask 255.255.255.0

하면,만약,만약...
브리지 방식 은 qemu 를 사용 하여 가상 컴퓨터 를 만 듭 니 다.http://haoningabc.iteye.com/blog/2306736
포트 맵:
vm 에서 http 서 비 스 를 시작 하고 80 포트 를 엽 니 다.

mini-httpd 
netstat -nltp|grep 80

호스트 에서

iptables -t nat -A PREROUTING -p tcp -d 192.168.139.85 --dport 81 -j DNAT --to 192.168.122.37:80

호스트 ip
192.168.122.37 은 vm 의 ip 입 니 다.
vm 의 80 포트 를 호스트 81 에 비 추고,
호스트 에서 netstat-nltp|grep 81 은 볼 수 없습니다.

iptables -t nat -L

변화 보기
이 규칙 을 지 우려 면-A 를-D 로 바 꿔 주세요.
방문 하 다.http://192.168.139.85:81 vm 내부 로 들 어 갔 어 요.

좋은 웹페이지 즐겨찾기