나는 가지고있다:
- KVM을 사용하여 Ubuntu를 실행하는 호스트 시스템(기능)
- 클라이언트 두 개(Ubuntu용 클라이언트 하나, Windows 7용 클라이언트 하나)는 특별한 것이 없습니다.
또한 br0을 통해 클라이언트에 대한 브리지를 설정했습니다(아래 참조).
- br0:192.168.2.1(DHCP 실행)
- eth0 -> br0
- 0 -> br0을 클릭하세요.
- 1 -> br0을 클릭하세요.
br0은 클라이언트에게 IP를 제공할 수 있으며 클라이언트는 다음을 얻습니다.
- 윈도우 7: 192.168.2.29
- 우분투: 192.168.2.30
내 질문은 다음과 같습니다.
- Windows ICMP -> br0: 유효함
- 우분투 ICMP -> br0: 유효함
- 우분투 ICMP -> Windows: 실패
http://www.youtube.com/watch?v=5C1VvJezouI
NAT를 사용해 보았는데(iptables를 사용하여 익숙해졌습니다) 정말 매력적으로 작동했습니다! 문제 없이 두 클라이언트 모두 www.google.se를 핑하고 데이터 등을 얻을 수 있지만 서로는 그렇지 않습니까? !
처음부터 끝까지 내가 실행한 명령은 다음과 같습니다.
tc qdisc del dev wlan0 root 2>/dev/null
tc qdisc del dev wlan0 ingress 2>/dev/null
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -t nat -F POSTROUTING
iptables -t nat -F
iptables -t mangle -F
ip route flush table main
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
modprobe ifb numifbs=1
modprobe ip_conntrack
modprobe xt_mark
modprobe iptable_nat
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/bridge/bridge-nf-call-arptables
echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
echo "0" > /proc/sys/net/bridge/bridge-nf-call-ip6tables
ifconfig br0 192.168.2.1 netmask 255.255.255.0
route add -net 192.168.2.0 netmask 255.255.255.0 dev br0
ip route add default via 192.168.2.1 dev wlan0
kpartx -av win7.img
kpartx -av ubuntu.img
tunctl -u `whoami` -t tap0
ip link set tap0 up
brctl addif br0 tap0
tunctl -u `whoami` -t tap1
ip link set tap1 up
brctl addif br0 tap1
kvm -no-reboot -m 1300 -hda /dev/mapper/loop0p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B6" -net tap,ifname=tap0,script=/etc/qemu-dummy
kvm -no-reboot -m 1300 -hda /dev/mapper/loop1p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B7" -net tap,ifname=tap1,script=/etc/qemu-dummy
이 시점에서 클라이언트 간 핑을 시도했지만 성공하지 못했습니다. 그래서 시스템을 종료하고 다음을 실행했습니다.
brctl delif br0 tap0
brctl delif br0 tap1
ifconfig tap0 down
ifconfig tap1 down
tunctl -d tap0
tunctl -d tap1
kpartx -dv win7.img
kpartx -dv ubuntu.img
답변1
brctl delif br0 tap0
brctl delif br0 tap1
kvm -no-reboot -m 1300 -hda /dev/mapper/loop0p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B6" -net bridge,br=br0
kvm -no-reboot -m 1300 -hda /dev/mapper/loop1p1 -boot order=c -net nic,macaddr="DE:AD:BE:EF:EC:B7" -net bridge,br=br0
현재 시나리오에서는 수도꼭지가 사용되고 있습니다.
모든 VM이 가상화 호스트는 물론 다른 VM에도 액세스할 수 있어야 하는 경우 br0을 스위치로 작동하도록 선택할 수 있습니다.
또 다른 방법은브리지 모드의 macvtap아니면 심지어 사용오픈 스위치.