腾讯云服务器不能访问外网的解决方法

公有云环境下CENTOS腾讯云服务器使用多网卡时,有可能存在默认路由冲突的问题,导致腾讯云服务器无法访问外网?
影响版本:
 
 Centos 6.5 64bit
 
 Centos 7.1 64bit
 
解决方案:
 
 CENTOS6 默认未安装NetworkManager,使用DHCP方式,可以在if-eth*配置文件中添加METRIC=xx参数(注意:每个if-eth配置文件均需添加此参数),并重启网络即可生效,默认值越小,路由选择越优先,用户预期想使用的那个路由的METRIC值必须是最小的。
 
 CENTOS7 安装NetworkManager,使用DHCP方式,可以在if-eth*配置文件中添加IPV4_ROUTE_METRIC=xx参数(注意:每个if-eth配置文件均需添加此参数),并重启网络即可生效,默认值越小,路由选择越优先,用户预期想使用的那个路由的IPV4_ROUTE_METRIC值必须是最小的。
 
问题分析:
 
1. Centos 6.5 64bit
 
默认未安装NetworkManager
 
默认采用DHCP方式获取网卡信息
 
创建时默认一个网卡:
 
名称  port163709
 
编码  5ea1ee92-c7ac-42f8-9e99-b84dac032c26
 
关联腾讯云服务器   TestNetRoute
 
IP地址    10.112.137.225
 
公网IP    112.35.30.85
 
进入腾讯云服务器:
 
[root@testnetroute ~]#  ip a s
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
    inet 127.0.0.1/8 scope host lo
 
    inet6 ::1/128 scope host
 
       valid_lft forever preferred_lft forever
 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether fa:16:3e:87:44:46 brd ff:ff:ff:ff:ff:ff
 
    inet 10.112.137.225/22 brd 10.112.139.255 scope global eth0
 
    inet6 fe80::f816:3eff:fe87:4446/64 scope link
 
       valid_lft forever preferred_lft forever
 
 
 
[root@testnetroute ~]#  ip route show
 
10.112.136.0/22 dev eth0  proto kernel  scope link  src 10.112.137.225
 
169.254.0.0/16 dev eth0  scope link  metric 1002
 
default via 10.112.136.1 dev eth0
 
此种情况下,用户通过云平台上提供的接口,新增了一个网卡,
 
名称  wyytest01
 
编码  4087a96b-6d38-4253-a2a9-f32c6fd64ce5
 
关联腾讯云服务器   TestNetRoute
 
IP地址    192.168.138.4
 
公网IP 
 
进入腾讯云服务器,查看其信息:
 
[root@testnetroute ~]#  ip a s
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
    inet 127.0.0.1/8 scope host lo
 
    inet6 ::1/128 scope host
 
       valid_lft forever preferred_lft forever
 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether fa:16:3e:87:44:46 brd ff:ff:ff:ff:ff:ff
 
    inet 10.112.137.225/22 brd 10.112.139.255 scope global eth0
 
    inet6 fe80::f816:3eff:fe87:4446/64 scope link
 
       valid_lft forever preferred_lft forever
 
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
 
    link/ether fa:16:3e:6f:67:6b brd ff:ff:ff:ff:ff:ff
 
 
 
[root@testnetroute ~]#  ip route show
 
10.112.136.0/22 dev eth0  proto kernel  scope link  src 10.112.137.225
 
169.254.0.0/16 dev eth0  scope link  metric 1002
 
default via 10.112.136.1 dev eth0
 
由于el6系统中无NetworkManager,因此可以看到,eth1没有获取到ip,手动配置网络文件:
 
[root@testnetroute ~]#  cd /etc/sysconfig/network-scripts/
 
[root@testnetroute /etc/sysconfig/network-scripts]#  cp ifcfg-eth0 ifcfg-eth1
 
[root@testnetroute /etc/sysconfig/network-scripts]#  vi ifcfg-eth1  #修改文件如下
 
DEVICE=eth1
 
TYPE=Ethernet
 
ONBOOT=yes
 
BOOTPROTO=dhcp
 
重启网络:
 
[root@testnetroute ~]#  ifup eth1
 
发现默认路由变为了:
 
[root@testnetroute ~]#  ip route show
 
192.168.138.0/24 dev eth1  proto kernel  scope link  src 192.168.138.4
 
10.112.136.0/22 dev eth0  proto kernel  scope link  src 10.112.137.225
 
169.254.0.0/16 dev eth0  scope link  metric 1002
 
169.254.0.0/16 dev eth1  scope link  metric 1003
 
default via 192.168.138.1 dev eth1
 
此时,为了使默认路由仍走10.112.136.1,可为2个网卡分别配置METRIC参数,配置如下:
 
[root@testnetroute /etc/sysconfig/network-scripts]#  cat ifcfg-eth0
 
DEVICE=eth0
 
TYPE=Ethernet
 
ONBOOT=yes
 
BOOTPROTO=dhcp
 
METRIC=10       #增加此行如左
 
 
 
[root@testnetroute /etc/sysconfig/network-scripts]#  cat ifcfg-eth1
 
DEVICE=eth1
 
TYPE=Ethernet
 
ONBOOT=yes
 
BOOTPROTO=dhcp
 
METRIC=20       #增加此行如左
 
重启网络:
 
[root@testnetroute ~]#  service network restart
 
重新查看路由:
 
[root@testnetroute ~]#  ip route show
 
192.168.138.0/24 dev eth1  proto kernel  scope link  src 192.168.138.4
 
10.112.136.0/22 dev eth0  proto kernel  scope link  src 10.112.137.225
 
169.254.0.0/16 dev eth0  scope link  metric 1002
 
169.254.0.0/16 dev eth1  scope link  metric 1003
 
default via 10.112.136.1 dev eth0  metric 10
 
default via 192.168.138.1 dev eth1  metric 20
 
测试访问8.8.8.8所走的默认路由:
 
[root@testnetroute ~]#  ip route get 8.8.8.8
 
8.8.8.8 via 10.112.136.1 dev eth0  src 10.112.137.225
 
    cache  mtu 1500 advmss 1460 hoplimit 64
 
更改默认路由成功。
 
PS:修改网卡配置文件调整路由优先级遵循一个原则,如果希望联通外网,则将公网ip所在的网卡配置文件的METRIC 值设置为几个网卡配置文件中相对最小,即公网ip的默认路由优先级设置为最高。
 
 
 
2. Centos 7.1 64bit
 
默认安装NetworkManager
 
默认采用DHCP方式获取网卡信息
 
创建时默认一个网卡:
 
名称     port130722
 
编码     97b146ca-51a3-4a16-9438-6804aa9cf3bf
 
关联腾讯云服务器         multiNICtest7
 
IP地址   10.139.4.219
 
公网IP
 
 [root@multinictest7 ~]# ip a
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
    inet 127.0.0.1/8 scope host lo
 
       valid_lft forever preferred_lft forever
 
    inet6 ::1/128 scope host
 
       valid_lft forever preferred_lft forever
 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether fa:16:3e:40:ba:1b brd ff:ff:ff:ff:ff:ff
 
    inet 10.139.4.219/24 brd 10.139.4.255 scope global eth0
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::f816:3eff:fe40:ba1b/64 scope link
 
       valid_lft forever preferred_lft forever
 
[root@multinictest7 ~]# route -n
 
Kernel IP routing table
 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 
0.0.0.0         10.139.4.254    0.0.0.0         UG    100    0        0 eth0
 
10.139.4.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
 
[root@multinictest7 ~]# ping 8.8.8.8
 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
 
64 bytes from 8.8.8.8: icmp_seq=1 ttl=37 time=87.7 ms
 
64 bytes from 8.8.8.8: icmp_seq=2 ttl=37 time=88.0 ms
 
^C
 
--- 8.8.8.8 ping statistics ---
 
3 packets transmitted, 2 received, 33% packet loss, time 2003ms
 
rtt min/avg/max/mdev = 87.720/87.882/88.045/0.338 ms
 
[root@multinictest7 ~]# ip route get 8.8.8.8
 
8.8.8.8 via 10.139.4.254 dev eth0  src 10.139.4.219 cache
 
此种情况下,用户通过云平台上提供的接口,新增了一个网卡,
 
名称     mutlinic2
 
编码     94c0756d-bfdc-4fab-ad7c-6789f350fb82
 
关联腾讯云服务器      
 
IP地址   192.168.200.20
 
公网IP
 
查看网络信息(由于centos7默认安装了NetworkManager,因此eth1自动获取到ip:192.168.200.20):
 
root@multinictest7 ~]# ip a
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 
    inet 127.0.0.1/8 scope host lo
 
       valid_lft forever preferred_lft forever
 
    inet6 ::1/128 scope host
 
       valid_lft forever preferred_lft forever
 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether fa:16:3e:40:ba:1b brd ff:ff:ff:ff:ff:ff
 
    inet 10.139.4.219/24 brd 10.139.4.255 scope global eth0
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::f816:3eff:fe40:ba1b/64 scope link
 
       valid_lft forever preferred_lft forever
 
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 
    link/ether fa:16:3e:bb:29:58 brd ff:ff:ff:ff:ff:ff
 
    inet 192.168.200.20/24 brd 192.168.200.255 scope global eth1
 
       valid_lft forever preferred_lft forever
 
    inet6 fe80::f816:3eff:febb:2958/64 scope link
 
       valid_lft forever preferred_lft forev
 
查看路由状态:
 
[root@multinictest7 ~]#  ip route show
 
default via 10.139.4.254 dev eth0  proto static  metric 100
 
default via 192.168.200.1 dev eth1  proto static  metric 101
 
10.139.4.0/24 dev eth0  proto kernel  scope link  src 10.139.4.219  metric 100
 
192.168.200.0/24 dev eth1  proto kernel  scope link  src 192.168.200.20  metric 100
 
测试系统访问8.8.8.8所走默认路由:
 
[root@multinictest7 ~]#  ip route get 8.8.8.8
 
8.8.8.8 via 10.139.4.254 dev eth0  src 10.139.4.219
 
    cache
 
若当前路由并不是想要的,则用户可以自行更改(假设想使用192.168.200.1,注意如果使用内网路由优先级最高会导致外网无法访问):
 
[[root@multinictest7 network-scripts]# cd /etc/sysconfig/network-scripts/
 
[root@multinictest7 network-scripts]# vi ifcfg-eth0
 
[root@multinictest7 network-scripts]# vi ifcfg-eth1#如果没有该文件可以cpifcfg-eth0 ifcfg-eth1  复制模板后再vi修改
 
[root@multinictest7 network-scripts]# cat ifcfg-eth0
 
TYPE=Ethernet
 
BOOTPROTO=dhcp
 
DEVICE=eth0
 
ONBOOT=yes
 
IPV4_ROUTE_METRIC=20
 
[root@multinictest7 network-scripts]# cat ifcfg-eth1
 
TYPE=Ethernet
 
BOOTPROTO=dhcp
 
DEVICE=eth1
 
ONBOOT=yes
 
IPV4_ROUTE_METRIC=10
 
[root@multinictest5 network-scripts]# systemctl restart network重启服务:
 
查看路由状态:测试系统访问8.8.8.8所走默认路由:
 
 
 
更改默认路由成功。
 
PS:修改网卡配置文件调整路由优先级遵循一个原则,如果希望联通外网,则将公网ip所在的网卡配置文件的IPV4_ROUTE_METRIC 值设置为几个网卡配置文件中相对最小,即公网ip的默认路由优先级设置为最高。

标签