用策略路由解决Linux使用双网卡的问题

在Linux下,两个网卡是不能都设置网关的,在很多博客里写的都是通过在一个网卡上配置网关,另一个网卡添加静态路由的方法来实现,但是我之前自己试过这个方法真的不好用,后来找到另一种办法,通过配置策略路由的方式实现,这种方法更好。

这里有个别人写的更详细的,想进一步学习的可以移步

下面写下直接了当的配置过程

1.先配好其中一个网卡(eth0)的IP和网关,这时候剩另一个网卡(eth1),设置eth1的IP但是不要配置网关或者删除之前的网关,这两个设置完成后eth0是可以正常上网和从外面连到eth0的,但是eth1是不能正常工作的。

下面通过策略路由配置让eth1来的流量再从eth1应该有的网关上出去(TCP协议规定了TCP连接的源进源出,如果你从eth1收到了一握手个包, 然后从eth0给对方回ACK的话,对方看来的地方不对,会忽略那个包的,所以连接都不会通)

下一步, 修改rt_tables, #之后的内容是要在命令行里输的命令

# vim /etc/iproute2/rt_tables

在配置文件里面添加一个路由表项,数字表示优先级1-255且不和已有的重复,后面是名字,保存。例如252那条是我新加的:

然后设置从eth1来的流量回去的时候查找你添加的路由表 ↓,而不是去查找默认的路由表

# ip rule add from {eth1的IP} lookup {你添加的路由表的名字}

再给你添加的路由表配置上网关

# ip route add table {你添加的路由表} default via {这个路由表的网关}

例如你网卡IP是192.168.1.2,网关是192.168.1.1

那就是

ip rule add from 192.168.1.2 lookup telecom
ip route add table telecom default via 192.168.1.1

最后要把前面两条命令添加到开机自启动脚本,最简单的是把这两条命令放在/etc/rc.local这个文件里的exit 0之前,因为在/lib/systemd/system下有个开机自启动脚本rc.local.service,就是执行/etc/rc.local里面的命令。

完工


本文章使用limfx的vsocde插件快速发布