2017-04-18 214 views
0

我在ubuntu 16.04上使用KVM。我无法从VM内部ping到互联网(VM内部没有互联网连接)。我的调试步骤迄今:虚拟网桥为什么不转发数据包到网关?

  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) 
    

这意味着包正在从容器转发到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 
    

这意味着没有防火墙/代理阻止访问互联网。任何人都可以请帮我在这里?我不知道为什么数据包在到达virbr0后没有到达网关。

谢谢!

+0

任何人都可以请解释为什么这个问题被拒绝投票吗?我试图尽可能具体地解决这个问题。 –

回答

0

大量的调试后,我能够识别并解决2个问题:

  1. VM无法连接到互联网:我不得不尝试了一堆东西,我不知道哪一个工作。我遵循了在this link给出的所有步骤。
  2. DNS无法在虚拟机上工作:上述更改并不令DNS工作不幸。事实证明虚拟机并未使用其名称服务器/etc/resolv.conf来解析域名。相反,我不得不编辑dns-nameservers字段中的br0 /etc/network/interfaces。具体而言,将dns-nameservers/etc/network/interfaces之后的IP替换为主机OS的/etc/resolv.conf中的名称服务器。

这些更改解决了问题。希望这可以帮助任何面临类似问题的人。