qemu에서 실행되는 퀘스트 운영 체제의 네트워킹 및 Samba

qemu에서 실행되는 퀘스트 운영 체제의 네트워킹 및 Samba

호환성을 확인하기 위해 빅엔디안 시스템에서 일부 소프트웨어를 테스트하려고 합니다. 내 계획은 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를 제공할 수 있다고 생각하지 않습니다.

관련 정보