1、环境和知识预备html
我遇到问题的生产机器是CentOS release 6.8系统,不过这并不影响问题的解决,本质上都是同样的。服务器
网关:一个网络链接到另外一个网络的关口,也就是实现网络互连,俗称网络链接器。网络
DNS:域名解析服务器,是把网址变成IP地址的服务器。app
上网流程大体以下:dom
服务器IP <--> 对应的网关 <--> 网络tcp
也就是说网关做为一个中介,若是没有对应的网关,那么是没法进行正确通讯、上网的。大数据
2、问题介绍spa
通常咱们在像运营商申请专线宽带的时候,运营商都会提供【IP、网关、掩码、DNS地址】这些基本的网卡配置信息。若是只有一张网卡,那么基本是没有问题的,这也是很常见的一个配置步骤。rest
一、获取网卡名,底下表红色的就是对应的网卡名称,打马赛克的位置就是分配的公网地址(ipv4),inet表示ipv4地址,inet6表示ipv6的地址。code
二、切换到/etc/sysconfig/network-scripts目录下,把配置写到对应的网卡配置文件中,文件名是【ifcfg-网卡名称】,个人这边是ifcfg-em1。
三、修改配置以下:
1 DEVICE=ens33 #网卡名称 2 HWADDR=14:18:77:3B:6F:01 #MAC地址 3 TYPE=Ethernet #网卡类型 4 UUID=314d1b96-70b2-498a-8711-6cb5ab264464 #惟一标识 5 ONBOOT=yes #开机激活 6 BOOTPROTO=static #网卡获取IP地址的方式,通常有【none,dhcp,static】这些,dhcp是自动获取IP的,其余都是固定的 7 IPADDR=100.196.184.188 #IP地址,若是BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不须要配置IP。 8 GATEWAY=100.196.184.19 #默认网关地址!!! 9 NETMASK=255.255.255.248 #掩码 10 DNS1=51.136.192.6 #默认主DNS地址 11 DNS2=50.196.165.2 #默认备DNS地址,后面能够继续递增列下去,DNS3,DNS4 12 NM_CONTROLLED=no #网卡是否容许用 NetworkManager 程序管理,使用于非服务器 13 MTU=9000 #网络上传送的最大数据包
四、单网卡状况下,你这么一配置,重启一下网络服务。【service network restart】或者【systemctl network restart】运行一下就能够了。
由于就一张网卡,无论你配置的是全局仍是局部,都能生效,没有冲突问题。
若是有多张网卡,那么就会出现冲突问题了。冲突的缘由是GATEWAY和DNS的配置,这两个配置的表示默认的地址。多张网卡的配置ifcfg-em1,ifcfg-em2,ifcfg-em3...,后面的配置就会把前面的配置直接进行覆盖操做。啥意思呢?就是em1的网关是A,em2的网关是B,启动的时候系统会去读取这些配置文件的信息,加载em1的配置时,默认网关是A;接着,加载em2的配置时,默认网关变成了B。这样A的IP就走不通了。
因此在有多个网卡的状况,不该该只使用一个默认的网关来实现通讯,由于不一样网卡的网关不同会致使一部分网卡因为网关不适用致使不能使用的状况。
3、问题解决
咱们能够经过为每一个网卡配置单独的规则来实现通讯,em1对应网关A,em2对应网关B,em3对应网关C...这样每一个网卡都选择正确本身的网关,就不会有默认网关带来的冲突问题了。如何操做?请看下面:
首先要知道Linux携带了本身的路由配置的一些命令。
ip rule和ip route: ip rule是用来管理路由规则的,ip route是管理路由表的,底下是这两个的一些参数配置,有兴趣的能够看看,没兴趣的直接跳过下面这个代码段。
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ dev STRING ] [ pref NUMBER ] ACTION := [ table TABLE_ID ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] TABLE_ID := [ local | main | default | NUMBER ] Usage: ip route { list | flush } SELECTOR ip route get ADDRESS [ from ADDRESS iif STRING ] [ oif STRING ] [ tos TOS ] ip route { add | del | change | append | replace | monitor } ROUTE SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ] ROUTE := NODE_SPEC [ INFO_SPEC ] NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] [ scope SCOPE ] [ metric METRIC ] INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]... NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ] [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ] [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ] [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ] TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] TABLE_ID := [ local | main | default | all | NUMBER ] SCOPE := [ host | link | global | NUMBER ] FLAGS := [ equalize ] MP_ALGO := { rr | drr | random | wrandom } NHFLAGS := [ onlink | pervasive ] RTPROTO := [ kernel | boot | static | NUMBER ] TIME := NUMBER[s|ms]
一、切换到/etc/sysconfig/network-scripts目录下,把配置写到对应的网卡配置文件中,文件名是【ifcfg-网卡名称】。
二、修改配置以下(不须要再配置GATEWAY):
if-ens33网卡配置文件
DEVICE=ens33 #网卡名称 HWADDR=14:18:77:3B:6F:01 #MAC地址 TYPE=Ethernet #网卡类型 UUID=314d1b96-70b2-498a-8711-6cb5ab264464 #惟一标识 ONBOOT=yes #开机激活 BOOTPROTO=static #网卡获取IP地址的方式,通常有【none,dhcp,static】这些,dhcp是自动获取IP的,其余都是固定的 IPADDR=100.196.184.188 #IP地址,若是BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不须要配置IP。 ####GATEWAY=100.196.184.19 #默认网关地址!!! NETMASK=255.255.255.248 #掩码 DNS1=51.136.192.6 #默认主DNS地址 DNS2=50.196.165.2 #默认备DNS地址,后面能够继续递增列下去,DNS3,DNS4 NM_CONTROLLED=no #网卡是否容许用 NetworkManager 程序管理,使用于非服务器 MTU=9000 #网络上传送的最大数据包
if-ens34网卡配置文件
DEVICE=ens33 #网卡名称
HWADDR=14:18:77:3B:6F:02 #MAC地址 TYPE=Ethernet #网卡类型 UUID=314d1b96-70b2-498a-8711-6cb11b264464 #惟一标识 ONBOOT=yes #开机激活 BOOTPROTO=static #网卡获取IP地址的方式,通常有【none,dhcp,static】这些,dhcp是自动获取IP的,其余都是固定的 IPADDR=88.196.184.188 #IP地址,若是BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不须要配置IP。 ####GATEWAY=88.196.184.19 #默认网关地址!!! NETMASK=255.255.255.248 #掩码 DNS1=51.136.192.6 #默认主DNS地址 DNS2=50.196.165.2 #默认备DNS地址,后面能够继续递增列下去,DNS3,DNS4 NM_CONTROLLED=no #网卡是否容许用 NetworkManager 程序管理,使用于非服务器 MTU=9000 #网络上传送的最大数据包
三、配置ens33的默认路由
【配置规则以下】:
ip rule add from 网卡IP table 表数字
ip route add default via 网关 dev 网卡名 table 表数字
配置ens33的路由规则(table后面的数字能够本身取,若是冲突系统会提示已存在,换一个不存在的就好,能够经过【ip rule show】命令查看已配置的内容)
ip rule add from 100.196.184.188 table 1
配置ens33的路由表(能够经过【ip route show】命令查看已配置的内容)
ip route add default via 100.196.184.19 dev ens33 table 1
四、配置ens34的默认路由
配置ens34的路由规则(table后面的数字能够本身取,若是冲突系统会提示已存在,换一个不存在的就好,能够经过【ip rule show】命令查看已配置的内容)
ip rule add from 88.196.184.188 table 2
配置ens34的路由表(能够经过【ip route show】命令查看已配置的内容)
ip route add default via 88.196.184.19 dev ens34 table 2
... 若是有多张继续参照上诉步骤配置下去。
五、经过ping命令验证
ping -I 网卡名或者IP www.baidu.com
若是正常的话就是成功了,不然检查一下配置。若是配置错误,能够经过对应的删除命令清理规则,就是把命令的add改为del。好比:
ip rule add from 88.196.184.188 table 2
对应的删除操做是:
ip rule del from 88.196.184.188 table 2
4、总结
这就是我今天一个解决这个问题的一个过程,就是把【网卡使用默认的网关】修改为【网卡本身使用单独的一个路由规则】来实现多IP同时上网的问题。期间,能够经过tcpdump命令,traceroute命令等来协助问题排查。这些命令比较简单就不介绍啦。tcpdump命令能够参照我以前写的:
https://www.cnblogs.com/luozhuzhu/p/13405350.html
好了,今日分享到此结束,我们下期再会!谢谢你们的观看!