双网口引发的网络问题
Linux处理双网口数据的时候可能存在问题,比如内网+外网,或者内网+网络打印机。这种情况下可能只有一个网能连通,另一个显示已连接但软件和应用怎么都连不上。
这个问题我们需要调整系统的网络路由来解决。
例子的条件如下,实际操作的时候,请更换成你实际的网络参数。
现在假设内网接在网卡eth0上,网段为192.168.1.x,本机IP192.168.1.100;
网络打印机接在网卡eth1上,打印机ip为192.168.100.101,本机IP192.168.100.102。
类型 | 接口 | 本机ip | 网关/打印机IP | 子网掩码 |
---|---|---|---|---|
内网 | eth0 | 192.168.1.100 | 192.168.1.1 | 255.255.255.0 |
打印机 | eth1 | 129.168.100.2 | 192.168.100.1 | 255.255.255.0 |
设定网络路由
在连接好所有网线、配置好ip地址后,先查看网口的具体参数,执行指令 ifconfig
,就能获得网络接口的名称。有的系统名称比较长,需要来回复制,建议后面的指令开一个新的终端来执行。
[图片中仅为示意,接下来的例子中依然使用eth1作为网口名称。]
然后,我们需要让全部流量默认走内网,而不是打印机。这个指令需要变更的参数是最后网关的ip地址。
sudo route add default gw 192.168.1.1
第三步,我们规定打印机网段(192.168.100.xxx)的数据全从eth1网口走。
sudo route add -net 192.168.100.0 netmask 255.255.255.0 dev eth1
# -net后面是*网段*,即将本机ip最后一位写0。
# netmask是网关,一般情况下填255.255.255.0即可。如果配置其他网关,需要把网段一并修改。
# 即,如果网关某一位是0,那网段需要一起改成0
# dev 后面接要走数据的网口名称。
完成后,不要重启,开始测试网络效果。测试没有问题了再进行下一步。
将路由配置写入系统
由于刚刚修改路由的操作是一次性的,所以我们需要将路由的调整保存进系统以实现自动配置。
-
启动NetwordManager-dispatcher服务
sudo systemctl enable NetworkManager-dispatcher.service
-
创建脚本来执行此操作。路径
/etc/NetworkManager/dispatcher.d
,使用管理员权限创建文件。文件名要求数字开头,不要有文件名后缀,便于识别。比如下面的"10-LANandPrinter"
sudo touch /etc/NetworkManager/dispatcher.d/10-LANandPrinter
-
往脚本里写入上面验证成功的内容。文件需要sudo权限编辑,但添加的内容不要加sudo。
# 以下内容不是指令,而是 10-LANandPrinter 应填入的内容。 route add default gw 192.168.1.1 route add -net 192.168.100.0 netmask 255.255.255.0 dev eth1
-
设置脚本的权限
sudo chown root:root 10-LANandPrinter sudo chmod 755 10-LANandPrinter
-
重启系统查看调整效果
** 以上所有IP地址、网段、掩码、网口名称,都应该按实际情况填入,不要无脑抄写**
检查路由表是否正确
上面的操作结束后我们可以检查路由表是否发生了更改。在修改路由无效的时候就更需要这个检查步骤了。
在终端中输入指令route -n
, 即打印了当前的路由表。
(图片仅供参考)在前文使用的例子中,0.0.0.0表示默认数据流向,检查是否是从内网网关192.168.1.1走的。以及192.168.100.0是否是从指定的网口eht1走。