호환성을 확인하기 위해 빅엔디안 시스템에서 일부 소프트웨어를 테스트하려고 합니다. 내 계획은 Ubuntu 12.04에서 qemu를 사용하여 MIPS 시스템을 에뮬레이트하는 것입니다. 지금까지 미션 시스템을 성공적으로 생성할 수 있었지만 호스트 시스템과 네트워크로 연결할 수는 없었습니다. 게스트 시스템(예: wget 또는 apt-get)에서 외부 세계에 액세스할 수 있지만 Samba 설정 시도가 실패합니다.
~에 따르면이것, QEmu 1.1 이상에서는 브리지 어시스턴트가 추가 스크립트 없이도 tun/tap을 설정할 수 있습니다. 다양한 버전의 스크립트를 보았기 때문에 이를 사용하려고 합니다. 현재 상황은 qemu-system-mips -version
다음과 같이 보고됩니다.
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
나는 1.4.1 소스에서 컴파일하고 를 사용했습니다 apt-get
. 둘 다 동일한 내용을 보고했습니다. -version
내가 들은 내용에도 불구하고 버전 1.1 이상이 있다고 가정합니다 . 어쨌든 다음 지침은 기본 네트워크 도우미의 setuid 속성을 켜는 것입니다.
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
다음으로 권한을 얻기 위해 파일을 만들었습니다 bridge.conf
. 파일 내용은 다음과 같습니다./etc/qemu/
/usr/local/etc/qemu
-rw-r--r--
allow br0
다음과 같이 QEmu를 시작하면:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba
또는
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
또는
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
다음 오류가 발생합니다.
failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized
공평하게 말하면, 나는 br0 브릿지를 만들지 않았습니다. 이해하지 못하는 스크립트를 사용하여 하나를 만들려고 했지만 내 작업 MIPS QEmu 시스템이 더 이상 아무 것도 연결되지 않았습니다. br0이 표시되지만 IP 주소를 얻지 못합니다. 분명히 내가 여기서 뭔가 잘못하고 있는 것 같습니다.
ifconfig br0 down
brctl delbr br0
ifconfig eth2 0.0.0.0 promisc up
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
dhclient br0
ifconfig br0 up
이 작업을 수행하는 더 쉬운 방법이 있나요? 개인적으로 저는 설명된 대로 \10.0.2.4\qemu의 SMB 서버를 사용합니다.여기, 그러나 그것은 나에게도 효과가 없었습니다(공유를 마운트하려고 할 때 아마도 네트워크 문제로 인해 115 오류가 발생했습니다).
고쳐 쓰다
브리지를 생성한 후 호스트의 ifconfig에서 다음 출력이 표시됩니다.
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:10.2.32.101 Bcast:10.2.32.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8235 (8.2 KB) TX bytes:9227 (9.2 KB)
eth2 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:139517339 (139.5 MB) TX bytes:3365206 (3.3 MB)
brctl show
출력을 확인하면 다음이 표시됩니다.
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
이제 QEmu에서 작업 시스템을 시작합니다. ifconfig를 실행하면 다음이 표시됩니다.
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536 errors:1 dropped:51 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55083 (53.7 KiB) TX bytes:2862 (2.7 KiB)
Interrupt:10 Base address:0x1020
다리는 다음과 같습니다.
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
tap0
불행하게도 이 설정을 사용하면 작업 시스템은 한때 가졌던 제한된 "사용자 모드" 네트워킹을 잃게 됩니다(예: wget 및 apt-get이 더 이상 작동하지 않음). 내가 보는 유일한 IP 주소는 브리지의 IP 주소이므로 작업이 네트워크에 어떻게 나타날지 잘 모르겠습니다. 호스트는 여전히 br0과 동일한 IP 주소로 나타납니다.
고쳐 쓰다
이것은 iptables -L의 출력입니다.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
답변1
브리지를 실행할 때 브리지(eth2)의 멤버에는 더 이상 IP 주소가 할당되지 않아야 합니다. br0은 이제 IP를 얻어야 합니다.
예
이는 KVM을 사용하는 시스템의 출력입니다. 내부적으로는 qemu-kvm을 사용하므로 원하는 것과 유사하게 설정해야 합니다.
$ ifconfig -a
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1992305504701 (1.8 TiB) TX bytes:3609403664141 (3.2 TiB)
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2735097151685 (2.4 TiB) TX bytes:4313257594064 (3.9 TiB)
Interrupt:177
eth0에 IP 주소가 없는 이유를 확인하세요. 내 br0 장치는 다음과 같습니다.
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no vnet2
vnet1
vnet0
eth0
br0 장치에 3개의 가상 머신이 있어 실제 물리적 시스템처럼 네트워크에 완전히 참여할 수 있습니다. 이는 Samba 실행과 같은 서비스를 제공할 수 있음을 의미합니다. NAT 네트워크 뒤에서 Samba를 제공할 수 있다고 생각하지 않습니다.