为什么虚拟网桥没有将数据包转发到网关?

时间:2017-04-18 03:51:00

标签: networking virtualization kvm traceroute

我在ubuntu 16.04上使用KVM。我无法从VM内部ping到Internet(没有来自VM内部的Internet连接)。到目前为止我的调试步骤:

  1. 在VM内部我运行了traceroute 216.58.218.110

    traceroute to 216.58.218.110 (216.58.218.110), 30 hops max, 46 byte packets
     1  192.168.122.1 (192.168.122.1)  0.141 ms  0.272 ms  0.180 ms
     2  192.168.122.1 (192.168.122.1)  0.387 ms  0.033 ms  0.200 ms
    
  2. 在我的主机操作系统中,我运行了ifconfig

    virbr0    Link encap:Ethernet  HWaddr fe:54:00:0f:d3:58  
              inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:46792 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3325 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2379378 (2.3 MB)  TX bytes:166020 (166.0 KB)
    
  3. 这意味着数据包正从容器转发到virbr0。

    1. 接下来,我运行brctl show以查看virbr0连接到哪个接口。

      bridge name bridge id       STP enabled interfaces
      br0     8000.000000000000   no      
      br1     8000.000000000000   no      
      docker0     8000.024226c559f9   no      
      virbr0      8000.fe54000fd358   yes     vnet0
      virbr1      8000.52540059b8dd   yes     virbr1-nic
                                  vnet1
      
    2. 我检查ifconfig是否存在

      vnet0     Link encap:Ethernet  HWaddr fe:54:00:0f:d3:58  
                inet6 addr: fe80::fc54:ff:fe0f:d358/64 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:205 errors:0 dropped:0 overruns:0 frame:0
                TX packets:565 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000 
                RX bytes:14280 (14.2 KB)  TX bytes:31810 (31.8 KB)
      
    3. 如果数据包越过vnet0,我的理解是它应该到达网关IP。为了检查网关IP是什么,我运行了route -n

      Kernel IP routing table
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      0.0.0.0         10.40.1.254     0.0.0.0         UG    0      0        0 eno1
      10.0.0.0        10.18.44.1      255.0.0.0       UG    0      0        0 br0
      10.18.44.0      0.0.0.0         255.255.255.192 U     0      0        0 br0
      10.40.0.0       0.0.0.0         255.255.254.0   U     0      0        0 eno1
      161.26.0.0      10.18.44.1      255.255.0.0     UG    0      0        0 br0
      169.254.169.254 10.40.1.254     255.255.255.255 UGH   0      0        0 eno1
      172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
      192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 virbr1
      192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
      208.43.222.48   0.0.0.0         255.255.255.248 U     0      0        0 br1
      
    4. 最后我从主机操作系统运行traceroute 216.58.218.110。这给出了以下输出:

      traceroute to 216.58.218.110 (216.58.218.110), 30 hops max, 60 byte packets
       1  10.40.1.254 (10.40.1.254)  0.094 ms  0.064 ms  0.046 ms
       2  srx3600-vl208-gw.net.tacc.utexas.edu (129.114.108.254)  0.529 ms  0.499 ms  0.495 ms
       3  ex9214-vl654-gw.net.tacc.utexas.edu (129.114.0.185)  0.882 ms  0.847 ms  0.849 ms
       4  mx480-vl667-gw.net.tacc.utexas.edu (129.114.0.165)  0.860 ms  0.860 ms  0.848 ms
       5  hstn-txbb-core-et-1-1-0-703.tx-bb.net (192.124.228.97)  5.742 ms  5.716 ms  5.854 ms
       6  74.200.189.29 (74.200.189.29)  10.619 ms  10.724 ms  10.918 ms
       7  74.200.189.251 (74.200.189.251)  26.455 ms  10.817 ms  10.800 ms
       8  72.14.215.83 (72.14.215.83)  10.828 ms  10.744 ms  10.808 ms
       9  108.170.240.129 (108.170.240.129)  10.990 ms
      
    5. 这意味着没有防火墙/代理阻止访问互联网。有人可以帮帮我吗?我不知道为什么数据包在到达virbr0后没有到达网关。

      谢谢!

1 个答案:

答案 0 :(得分:0)

经过大量调试后,我能够识别并修复2个问题:

  1. 虚拟机无法连接到互联网:我不得不尝试一些东西,我不确定哪一个有效。我按照this link给出的所有步骤。
  2. DNS无法在VM上运行:不幸的是,上述更改并未使DNS工作。结果是VM没有在其/etc/resolv.conf中使用名称服务器来解析域名。相反,我必须在dns-nameservers中修改br0的/etc/network/interfaces字段。具体来说,将dns-nameservers/etc/network/interfaces之后的IP替换为主机操作系统/etc/resolv.conf中的名称服务器。
  3. 这些更改解决了这个问题。希望这可以帮助其他任何面临类似问题的人。