호환성을 확인하기 위해 빅 엔디안 시스템에서 일부 소프트웨어를 테스트하려고 합니다. 내 계획은 Ubuntu 12.04에서 qemu를 사용하여 MIPS 시스템을 에뮬레이트하는 것입니다. 지금까지 퀘스트 시스템을 성공적으로 만들 수 있었지만 호스트 시스템과 네트워크로 연결할 수는 없었습니다. 게스트 시스템(예: wget 또는 apt-get)에서 외부 세계에 액세스할 수 있지만 Samba 설정 시도가 실패했습니다.
에 따르면이것, QEmu 1.1 이상에서는 네트워크 브리지 도우미가 추가 스크립팅 없이도 조정/탭을 설정할 수 있습니다. 다른 버전의 스크립트를 보았기 때문에 이를 사용하려고 합니다. 현재 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
. 둘 다 같은 것을보고합니다. 나는 나에게 말하는 내용에도 불구하고 버전 1.1 이상을 가지고 있다는 가정하에 작업하고 있습니다 -version
. 어쨌든 다음 지침은 기본 네트워크 도우미에 대한 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 주소는 브릿지용이므로 퀘스트가 네트워크에 어떻게 나타날지 잘 모르겠습니다. 호스트는 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개의 VM이 있으므로 실제 물리적 시스템처럼 네트워크에 완전히 참여할 수 있습니다. 이는 그들이 Samba 실행 등과 같은 서비스를 제공할 수 있다는 것을 의미합니다. 나는 NAT 네트워킹 뒤에서 Samba를 제공할 수 있다고 믿지 않습니다.