背景
因《网工必备技能!Windows网卡1访问外网,网卡2访问内网!》受到粉丝的关注,就有粉丝提出,想给一台拥有多个网卡的linux主机,想配置不同的网卡走不通的路由,怎么操作呢?阿祥今天就介绍这种需求的配置方法,希望对粉丝有帮助!
环境准备
我用云主机作为操作演示,主要展示的是Linux操作系统的策略路由配置方法。而阿祥操作实现目标为双网卡都通公网,大家可以根据自身实际需求配置!
适用场景
下面两种场景均适合这种操作,都需要添加策略路由解决:
1、主机绑定同网段多块网卡,只有主网卡地址通,其他地址不通
2、主机多块网卡绑定多个公网IP后,只有绑定主网卡的公网IP可以通信
操作演示
操作系统:CentOS系统7.6
假设公有云主机已经增加了两张网卡,IP地址分别为192.168.100.103、192.168.200.41:
1、ifconfig 查看eth0、eth1 的IP是否一致。
2、确认是否没有eth1的配置文件(如有跳过此步)
cd /etc/sysconfig/network-scripts/
ll
如缺eth1,增加eth1的配置文件,注意HWADDR和GATEWAY:
cp ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1
eth0配置:
eth1配置:
按ESC退出,并输入:wq!保存配置
增加完重启网络:systemctl restart NetworkManager
3、执行以下命令,在“/etc/iproute2/rt_tables”文件中增加两张路由表名称(route1和route2,可自定义名称)和路由表优先级(252和251,优先级数值越小表示优先级越高)。
①vi /etc/iproute2/rt_tables
251 route1
252 route2
255 local #默认存在,不要动
254 main #默认存在,不要动
253 default #默认存在,不要动
或者 直接在root执行:
echo "251 route1" >> /etc/iproute2/rt_tables
echo "252 route2" >> /etc/iproute2/rt_tables
4、配置永久路由:
vi /etc/rc.local
在文件末尾添加以下配置:
# wait for nics up
sleep 10
# Add v4 routes for eth0
ip route flush table route1
ip route add default via 192.168.100.1 dev eth0 table route1
ip route add 192.168.100.0/24 dev eth0 table route1
ip rule add from 192.168.100.103 table route1
# Add v4 routes for eth1
ip route flush table route2
ip route add default via 192.168.200.1 dev eth1 table route2
ip route add 192.168.200.0/24 dev eth1 table route2
ip rule add from 192.168.200.41 table route2
参数说明:wait for nics up:文件启动时间,建议和本示例中的配置保持一致
按ESC退出,并输入:wq!保存配置
主网卡
ip route add default via 子网网关 dev 网卡名称 table 路由表名称
ip route add 子网网段 dev 网卡名称 table 路由表名称
ip rule add from 网卡地址 table 路由表名称
扩展网卡
ip route add default via 子网网关 dev 网卡名称 table 路由表名称
ip route add 子网网段 dev 网卡名称 table 路由表名称
ip rule add from 网卡地址 table 路由表名称
参数说明如下:
网卡名称:填写实际名称。
路由表名称:自定义路由表名称,此处请使用数字命名路由表。
其他网络信息:填写实际收集的地址。
5、注意检查rc.local是否有执行权限,在centos7或者以上的版本,rc.local是没有执行权限的,主机重启之后,不执行该文件配置,导致当前配置不生效,所以需要赋予执行权限:
chmod +x /etc/rc.local
6、重启reboot
“/etc/rc.local”文件中添加的策略路由,需要重启云服务器后才会生效,此处请确保不影响业务再重启云服务器操作。
7、依次执行以下命令,确认策略路由是否添加成功
ip rule
ip route show tableroute1
ip route show tableroute2
回显类似如下信息,表示策略路由添加成功
[root@ecs-resource ~]# ip rule
0: from all lookup local
32764: from 192.168.200.41 lookup route2
32765: from 192.168.100.103 lookup route1
32766: from all lookup main
32767: from all lookup default
[root@ecs-resource ~]# ip route show table 251
default via 192.168.100.1 dev eth0
192.168.100.0/24 dev eth0 scope link
[root@ecs-resource ~]# ip route show table 252
default via 192.168.200.1 dev eth1
192.168.200.0/24 dev eth1 scope link
可通过本地windows机器进cmd,确认是否能ping通云主机EIP
ping eth0
ping eth1
注意:
注意1 :做完以上策略路由后,可以保证用ip作为源去通信是正常的,但是如果以eth0、eth1的网卡名称作为源访问还是不通的,因为策略路由是根据from后面的ip来匹配的。
ip rule add from 192.168.0.x table route1
如果要以eth0、eth1的网卡名称作为源去通信,需要在路由表中添加针对 dev 的路由,如果是双网卡,一般eth0已经存在默认路由了,则为eth1增加一条默认路由即可:
route add default gw 192.168.0.1 dev eth1 metric 100 #注意要加metic,否则会导致主网卡eth0的默认路由失效
注意2:两个网卡的安全组都要放通ICMP才可ping通IP
注意3:公有云主机网卡要放通本地windows机器ip ping测