Linux处理双网口数据的时候可能存在问题,比如内网+外网,或者内网+网络打印机。这种情况下可能只有一个网能连通,另一个显示已连接但软件和应用怎么都连不上。

这个问题我们需要调整系统的网络路由来解决。

例子的条件如下,实际操作的时候,请更换成你实际的网络参数

设定网络路由

在连接好所有网线、配置好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 后面接要走数据的网口名称。
  

完成后,不要重启,开始测试网络效果。测试没有问题了再进行下一步。

将路由配置写入系统

由于刚刚修改路由的操作是一次性的,所以我们需要将路由的调整保存进系统以实现自动配置。

  1. 启动NetwordManager-dispatcher服务

      sudo  systemctl  enable  NetworkManager-dispatcher.service
      
  2. 创建脚本来执行此操作。路径 /etc/NetworkManager/dispatcher.d,使用管理员权限创建文件。

    文件名要求数字开头,不要有文件名后缀,便于识别。比如下面的"10-LANandPrinter"

      sudo  touch  /etc/NetworkManager/dispatcher.d/10-LANandPrinter
      
  3. 往脚本里写入上面验证成功的内容。文件需要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
      
  4. 设置脚本的权限

      sudo  chown  root:root  10-LANandPrinter
    sudo  chmod  755  10-LANandPrinter
      
  5. 重启系统查看调整效果

** 以上所有IP地址、网段、掩码、网口名称,都应该按实际情况填入,不要无脑抄写**

检查路由表是否正确

上面的操作结束后我们可以检查路由表是否发生了更改。在修改路由无效的时候就更需要这个检查步骤了。

在终端中输入指令route -n, 即打印了当前的路由表。

(图片仅供参考)在前文使用的例子中,0.0.0.0表示默认数据流向,检查是否是从内网网关192.168.1.1走的。以及192.168.100.0是否是从指定的网口eht1走。