You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Netplan实现双上行链路按源子网路由的配置咨询

基于Netplan实现双上行链路按源子网路由的配置咨询

嗨,这个需求完全可以通过Netplan结合Linux的多路由表功能搞定,我给你梳理下具体的配置步骤和关键细节:


一、正确的Netplan配置文件

首先要解决的核心问题是给不同源子网绑定专属的路由表,Netplan支持直接在配置里定义路由表和路由规则,这里是调整后的完整配置(注意YAML的缩进必须严格,建议用2个空格):

network:
  version: 2
  ethernets:
    eth0:
      addresses: [5.5.5.2/27]
      routes:
        - to: default
          via: 5.5.5.1
          table: 100  # 为快速计费链路创建专属路由表,编号100
      routing-policy:
        - from: 10.20.30.0/24
          table: 100  # 匹配10.20.30子网的流量,使用100号路由表
    eth1:
      addresses: [6.6.6.2/27]
      routes:
        - to: default
          via: 6.6.6.1
          table: 200  # 为包月慢链路创建专属路由表,编号200
      routing-policy:
        - from: 10.20.40.0/24
          table: 200  # 匹配10.20.40子网的流量,使用200号路由表
    eth2:
      addresses: [10.20.30.1/24]
    eth3:
      addresses: [10.20.40.1/24]
  # 可选配置:确保内网子网互访的路由优先级(Netplan通常会自动添加直连路由,这部分可省略)
  routing-policy:
    - from: 10.20.30.0/24
      to: 10.20.40.0/24
      table: main
    - from: 10.20.40.0/24
      to: 10.20.30.0/24
      table: main

配置说明:

  • 自定义路由表:给两条上行链路分别创建独立的路由表(100和200),每个表中只包含对应链路的默认路由,避免路由冲突。
  • 路由规则:通过routing-policy指定“来自某个源子网的流量,使用对应的专属路由表”,这就是实现按源子网选路的核心。
  • 内网互访:当你给eth2、eth3配置内网地址后,Netplan会自动在主路由表(main)中添加直连路由,所以两个子网默认就能互相通信。如果遇到互访问题,加上上面的全局路由规则可以强制内网流量走主表的直连路由。

二、iptables NAT配置

因为你的服务器是网关,需要给内网流量做SNAT(源地址转换)才能正常访问外网,执行以下命令:

# 给10.20.30.0/24子网的流量做SNAT,使用eth0的公网地址
iptables -t nat -A POSTROUTING -s 10.20.30.0/24 -o eth0 -j SNAT --to-source 5.5.5.2

# 给10.20.40.0/24子网的流量做SNAT,使用eth1的公网地址
iptables -t nat -A POSTROUTING -s 10.20.40.0/24 -o eth1 -j SNAT --to-source 6.6.6.2

如果要让这些规则开机自动生效,在Debian/Ubuntu系统上可以安装iptables-persistent包,然后保存规则:

apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4

三、配置验证

配置完成后,执行netplan apply生效,然后通过以下命令验证:

  1. 查看专属路由表内容:
    ip route show table 100  # 应该显示 default via 5.5.5.1 dev eth0
    ip route show table 200  # 应该显示 default via 6.6.6.1 dev eth1
    
  2. 查看路由规则:
    ip rule show
    # 应该能看到类似这样的条目:
    # 32764:  from 10.20.30.0/24 lookup 100
    # 32765:  from 10.20.40.0/24 lookup 200
    
  3. 流量测试:从10.20.30子网的机器ping外网,用tcpdump -i eth0 icmp抓包,应该能看到对应流量;同理测试10.20.40子网的流量会从eth1出去,同时两个子网之间可以互相ping通。

小提示

  • 路由表编号可以自定义(1-252之间,避开系统预留的0、253、254、255),也可以在/etc/iproute2/rt_tables里给编号起名字,比如添加100 fast_link,这样Netplan配置里可以用table: fast_link更直观。
  • 注意防火墙规则(比如ufw)要允许内网之间的流量,以及出站的外网流量,避免被拦截。

备注:内容来源于stack exchange,提问作者zrav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 16:19:39