多网口环境下配置Ubuntu网络路由

目前我们的实验室有两条线路:

  • 172.C.D.0/24: 校园网(不可连接互联网,但可以接入VPN)
  • 192.168.B.0/24: 实验室宽带网(可以连接互联网,但是没有公网IP)

我们的主要需求是通过校园网实现远程SSH接入,通过实验室宽带网访问互联网。但是由于Ubuntu生成的默认网关会自动将所有流量转到metric小的接口上,这将导致原本应该从校园网出口流出的SSH流量也走了实验室宽带网,从而无法建立SSH连接。这就需要对路由进行修改,可以通过netplan工具进行。

由于校园网的路由已经建立且正确,所以在默认网络配置下的主要问题其实是主机内路由表能否正确找到到客户端的路由路径,而且由于VPN的存在,还需要考虑其产生的虚拟IP到主机的路由

编辑/etc/netplan/50-cloud-init.yaml(这是Ubuntu 24.04默认的网络配置文件,也有可能会变动),将路由项写入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
network:
    ethernets:
        eno1:
            addresses:
            - 172.C.D.E/24        # 主机校园网IP
            routes:
            - to: 172.A.0.0/12    # 整个校园网的子网
              via: 172.C.D.1      # 当前网关(下同)
            - to: 211.64.0.0/13   # VPN的虚拟IP子网
              via: 172.C.D.1
        eno2:
            dhcp4: true           # 实验室宽带网(直接使用DHCP配置)

接下来使用netplan apply进行应用,就可以实现两条线路分工工作了。

当然,实现上述目标还有其它方法(例如通过设置路由表使流量强制走来时的接口),但是这些做法稍显复杂,就不在此赘述了。