一、測試環境說明
內存 1G 2核 磁盤 50G 網卡1 僅主機(Host-Only)網絡 宿主通信 網卡2 NAT 上網 系統 CentOS-7-x86_64-Minimal-1804 虛擬硬盤文件類型 VDI 動態分配 USB控制器 不啟用 聲音 不啟用
root密碼 root123
(1)軟件工具:
vbox(5.2.20 r125813), Centos7(CentOS-7-x86_64-Minimal-1804)
(2)裝機時網絡設置:
(3)虛機機配置文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0 #內網網卡,用於虛擬機與宿主機互ping
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #如果需要大量虛擬機,建議用dhcp
DEFROUTE=yes #默認路由應該設置為no,因為它僅用於ssh登錄
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes #目前無所謂,ipv6暫時用不到
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=216480ee-d55a-4b50-a56b-7a9d2870f568 #建議刪除,方便以后復制虛擬機
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.56.99 #這里的ip設置僅供參考;如果需要大量虛擬機,建議刪除
PREFIX=24 #如果需要大量虛擬機,建議刪除
GATEWAY=192.168.56.2 # 建議刪除
IPV6_PRIVACY=no
cat /etc/sysconfig/network-scripts/ifcfg-eth1 #外網網卡,用於上網
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp" #一定要用dhcp以適應外部網絡變化
DEFROUTE="yes" #默認路由設為yes, 用於訪問外網
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="dcc0c6bc-9918-472c-b4fe-44d12ca96998" # 建議刪除
DEVICE="eth1"
ONBOOT="yes"
二、實踐--成功ping通外網+與宿主機互ping
(1) 現象1:
安裝虛擬機成功后,reboot;可以ping通過www.baidu.com,但網卡eth0處於onboot=no狀態。估計時vbox的bug。
(2)現象2:
修改配置文件ifcfg-eth0,將ONBOOT設置為yes。然后執行service network restart——此時虛擬機可以和宿主機互ping,但不能聯外網
ip route # default via 192.168.56.2 dev eth0 # default via 10.0.3.2 dev eth1 proto dhcp metric 100 # 10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15 metric 100 # 192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.99 ping www.baidu.com # ping: www.baidu.com: Name or service not known
(3)現象3:
進入虛擬機,執行"ip link set eth0 down"——可以聯外網。然后,執行"ip link set eth0 up"——可以聯外網也可以與宿主機互ping。
("ip route"-->"ip link set eth0 down"--->"ip route"-->"ping www.baidu.com"-->"ip link set eth0 up"--->"ip route"-->"ping www.baidu.com", 中間的ping好像不能省)
自己當時的猜想
我記錄下可以上網的配置,發現NAT網卡(即實例中的10.0.3.0/24)只有出現在ip route輸出結果的第一行時,能上網,也能和宿主機互ping;Host-Only網卡(即示例中的192.168.56.0/24)出現在第一行時,不能上網,只能和宿主機互ping。
相關"ip route"結果如下:
----------------------------------------------------------------------------------
# 不能上網
default via 192.168.56.2 dev eth0 proto static metric 100
default via 10.0.3.2 dev eth1 proto dhcp metric 101
10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15 metric 101
192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.99 metric 100
----------------------------------------------------------------------------------
# 可以上網
default via 10.0.3.2 dev eth1 proto dhcp metric 101
default via 192.168.56.2 dev eth0 proto static metric 102
10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15 metric 101
192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.99 metric 102
----------------------------------------------------------------------------------
# 可以上網, 其他的一台可以上網的虛擬機
default via 10.0.2.2 dev eth1
default via 192.168.56.2 dev eth0 proto static metric 100
10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.15
10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.15 metric 101
192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.11 metric 100
--------------------------------------------------------------------------------
四、暫時解決的方法
(參考:https://blog.csdn.net/tksnail/article/details/60865812)
關掉內網網卡的網關。編輯/etc/sysconfig/network-scripts/ifcfg-eth0,刪除GATWAY所在的那一行,重啟(網絡)
ip route # default via 10.0.3.2 dev eth1 proto dhcp metric 101 # 10.0.3.0/24 dev eth1 proto kernel scope link src 10.0.3.15 metric 101 # 192.168.56.0/24 dev eth0 proto kernel scope link src 192.168.56.99 metric 100
注:這種方法有后遺症,因為eth0和eth1的DEFROUTE都是yes。
#查看路由 ip route #默認路由1(eth1網卡) default via 10.0.3.2 dev eth1 proto dhcp metric 101 #默認路由2(eth0網卡) default via 192.168.56.2 dev eth0 proto static metric 102
執行“ip route”查看結果。
當第一行是“eth1網卡”時,可以上網;
當第一行是“eth0網時”不能上網。
五、 徹底解決的方法--后續
注: 關閉eth1的默認路由DEFROUTE=no, 然后重啟網絡即可,配置如下
(1)ifcfg-eth0
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=no IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 DEVICE=eth0 ONBOOT=yes
(2)ifcfg-eth1
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth1" DEVICE="eth1" ONBOOT="yes"
然后重啟網絡
service network restart
2018-11-02 15:17:45