桥接接口无法访问互联网

桥接接口无法访问互联网

我正在尝试运行 QEMU 虚拟机,但它无法访问互联网,只能访问主机和 Docker 网络。

我做了什么:

  1. 创建了一座桥梁brctl addbr virbr0
  2. 打开它:ip link set up dev virbr0;
  3. 分配 IP: ip addr add 192.168.66.1/24;
  4. 更新了 QEMU 配置:echo "allow virbr0" >> /etc/qemu/bridge.conf
  5. 运行 virt 安装:

    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 网络,但无法访问互联网(因此 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

看起来我错过了一些配置步骤,但我不知道是哪一个。我尝试用谷歌搜索解决方案,但没有找到任何解决方案。

答案1

为了使其正常工作,我必须启用 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

答案2

您尚未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

从远程会话运行这些命令是一个坏主意,因为它会更改接口配置。这反过来将断开所有远程流量——包括远程会话。

答案3

我使用这个命令来解决这个问题:

sudo nft flush ruleset

相关内容