
使用 Mac OS 10.14.5 Mojave 和 QEMU 版本 4.0.0
我正在嘗試透過 Mac 主機上的網橋讓 Ubuntu Server 19.04 來賓運行網路通訊。目前,我甚至正在努力處理從訪客到主機的 ping,反之亦然。
我在主機上建立了一個橋:
sudo ifconfig bridge1 create
sudo ifconfig bridge1 192.168.100.1/24 up
並設置系統標誌net.inet.ip.forwarding=1
,net.link.ether.inet.proxyall=1
儘管我不確定它們在專案中是否有必要。
VM 啟動方式為:
sudo qemu-system-x86_64 -hda ubuntu-test -cdrom ubuntu-19.04-live-server-amd64.iso -accel hvf -netdev tap,br=/dev/bridge1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown,id=net0 -device e1000,netdev=net0 -m 512
其中 qemu-ifup 腳本有:
ifconfig bridge1 addm tap0
我透過 netplan 設定虛擬機器的 IP:
network:
version: 2
ethernets:
ens3:
addresses:
- 192.168.100.2/24
gateway4: 192.168.100.1
及網路計劃適用。
我使用相關網路設備的 MAC 位址手動填入主機和訪客的 ARP 表:
_gateway (192.168.100.1) at $BRIDGE_MAC [ether] PERM on ens3
? (192.168.100.2) at $GUEST_DEV_MAC on bridge1 ifscope permanent [bridge]
分別在訪客和主機上,其中 $GUEST_DEV_MAC 和 $BRIDGE_MAC 是相關兩個設備的 MAC 位址。
在來賓上 ufw 被禁用 iptables -S 返回:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
當我在主機上運行 tcpdump 並嘗試從來賓 ping 它時,我可以看到 ICMP 回顯請求和回复,但它們不會發送給來賓:
$GUEST_DEV_MAC > $BRIDGE_MAC, IPv4, length 98: 192.168.100.2 > 192.168.100.1: ICMP echo request, id 1181, seq 2, length 64
$BRIDGE_MAC > $GUEST_DEV_MAC, IPv4, length 98: 192.168.100.1 > 192.168.100.2: ICMP echo reply, id 1181, seq 2, length 64
其中 $GUEST_DEV_MAC 和 $BRIDGE_MAC 是相關兩個設備的 MAC 位址。
當我嘗試從主機 ping 訪客時,我只得到:
$BRIDGE_MAC > $GUEST_DEV_MAC, IPv4, length 98: 192.168.100.1 > 192.168.100.2: ICMP echo request, id 48948, seq 1, length 64
我不知道什麼可能會阻止這些之間的流量,但我的經驗非常有限。如果調試需要更多信息,請告訴我,如果有人有足夠的經驗來闡明如何修復連接,請隨時回答。謝謝。