linux下为两个网卡调整路由规则
公司有线网是电信的,访问境外的服务器会间歇性得无法访问,但有一个无线网是移动的,用手机测试发现一直没什么问题,所以搞了个无线网卡连无线网。
但电脑的数据默认只走有线网,只有关了有线网才能用无线网,但是公司内部的服务只能通过有线网访问,所以就尝试了以下方案:
- 192.168.1.0/24 网段走有线网,其他走无线网
- 只在访问境外服务器的时候走无线网
经过测试确定这两个方案都能满足我的需求,但是由于无线不如有限稳定,所以最后确定使用第二种方案。
调整路由的工具使用 ip 命令的子命令 route,除了路由子命令还有很多其他网络相关的功能,具体可以查看 ip 命令的 man 手册。
linux 下当连接无线网和有线网之后使用 ip route
,可以简写为 ip r
可以列出当前所有的路由规则:
default via 192.168.1.1 dev enp2s0 proto static metric 100
default via 192.168.1.1 dev wlx200db012a6be proto dhcp metric 600
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.208 metric 100
192.168.1.0/24 dev wlx200db012a6be proto kernel scope link src 192.168.1.74 metric 600
192.168.252.0/24 dev xdroid0 proto kernel scope link src 192.168.252.1
其中 enp2s0 是有线网相关的路由,wlx200db012a6be 是无线网相关的路由,此外还有 docker 和 xdroid 相关的,后面这两个不用管,没有安装这两个程序的机器也不会有这两种路由。
从上面的路由规则可以看到 enp2s0 相关的 metric 值为 100 而 wlx200db012a6be 相关的 metric 值为 600,这就表示 enp2s0 相关的路由规则比 wlx200db012a6be 相关的路由规则优先级高。在相同的条件下,如相同的 prefix(IP 地址段)时系统将优先使用 enp2s0。
例如以下这两条规则,就表示访问 192.168.1.* 就会走 enp2s0:
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.208 metric 100
192.168.1.0/24 dev wlx200db012a6be proto kernel scope link src 192.168.1.74 metric 600
此外要注意调整路由规则需要 root 权限。
方案一
删除有线网的 default 规则即可实现:
ip r del default via 192.168.1.1 dev enp2s0 proto static metric 100
如此一来,除了 192.168.1.0/24 网段即内网网段内的 ip 访问会走有线网,其他的都会走无线网。
方案二
假设我要访问的境外服务器地址为 123.456.789.111
,那么只需要添加一条走无线网的路由规则,其仅匹配这个 ip 地址而不是一个网段就行了,经过一番测试,最后确定以下命令可行,测试过程中的无效、错误命令就不贴了:
ip r add 123.456.789.111 via 192.168.1.1 dev wlx200db012a6be
注意 via 后面需要写无线网的网关,不写或者写错都会导致这个 ip 无法访问。