Networking
橋接介面無法訪問 Internet
我正在嘗試執行 QEMU VM,但它沒有網際網路訪問權限,只能訪問主機和 Docker 網路。
我做了什麼:
- 創建了一座橋樑:
brctl addbr virbr0
;- 打開它:
ip link set up dev virbr0
;- 分配一個IP
ip addr add 192.168.66.1/24
:;- 更新了 QEMU 配置
echo "allow virbr0" >> /etc/qemu/bridge.conf
:- 執行虛擬安裝:
virt-install \ --name centos67 \ --memory 1024 \ --vcpus=1,maxvcpus=2 \ --cpu host \ --cdrom $HOME/Downloads/CentOS-6.7-x86_64-minimal.iso \ --disk size=4,format=raw \ --network bridge=virbr0
然後我啟動了一個救援映像並配置了一個網路:
IP:192.168.66.2/24
網關:192.168.66.1
僅此而已,此時我只能訪問主機和 Docker 網路,但無法訪問 Internet(因此 ping 8.8.8.8 失敗)。
以下是一些主機實用程序的輸出,可能有助於幫助我解決此問題:
$ brctl showstp virbr0 virbr0 bridge id 8000.fef8a25ccef1 designated root 8000.fef8a25ccef1 root port 0 path cost 0 max age 19.99 bridge max age 19.99 hello time 1.99 bridge hello time 1.99 forward delay 14.99 bridge forward delay 14.99 ageing time 299.99 hello timer 0.00 tcn timer 0.00 topology change timer 0.00 gc timer 167.03 flags tap0 (1) port id 8001 state forwarding designated root 8000.fef8a25ccef1 path cost 100 designated bridge 8000.fef8a25ccef1 message age timer 0.00 designated port 8001 forward delay timer 12.95 designated cost 0 hold timer 0.00 flags $ ip route default via 192.168.232.2 dev envmw proto static metric 100 192.168.5.0/24 dev docker0 proto kernel scope link src 192.168.5.1 192.168.66.0/24 dev virbr0 proto kernel scope link src 192.168.66.1 192.168.232.0/24 dev envmw proto kernel scope link src 192.168.232.100 metric 100 212.25.224.10 via 192.168.232.2 dev envmw proto static metric 100 $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere 255.255.255.255 Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:pxc-splr-ft ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:pxc-spvr-ft ACCEPT tcp -- anywhere a01.dev.lo tcp dpt:newoak
看起來我錯過了一些配置步驟,但我不知道是哪一個。我試圖Google一個解決方案,但沒有找到任何解決方案。
為了使它工作,我必須啟用 NAT。
$ iptables -t nat -A POSTROUTING -o envmw -j MASQUERADE $ iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT $ iptables -A FORWARD -i virbr0 -o envmw -j ACCEPT
您尚未向
envmw
網橋添加物理介面 ( )。您還需要將該介面設置為沒有 IP 地址的混雜模式:brctl addif virbr0 envmw ip addr add 0/0 dev envmw ip addr del 192.168.66.1/24 dev envmw ip link set envmw promisc on
從遠端會話執行這些命令是個壞主意,因為它會更改介面配置。這反過來將斷開任何遠端流量 - 包括遠端會話。