2017-04-18 211 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中的名稱服務器。

這些更改解決了問題。希望這可以幫助任何面臨類似問題的人。