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

Ubuntu 22.04双网卡下SSH走静态IP、下载走动态IP的配置方案咨询

Ubuntu 22.04双网卡下SSH走静态IP、下载走动态IP的配置方案咨询

嗨,根据你描述的场景(Ubuntu 22.04双网卡,eno1静态IP/10Mbps、ens20动态IP/600Mbps,希望SSH走静态网卡、下载走动态网卡),结合你提供的路由表信息:

ip route
default via XX.XX.XX.41 dev eno1 proto static metric 100
default via 10.0.0.6 dev ens20 proto static metric 101
10.0.0.0/8 dev ens20 proto kernel scope link src 10.0.13.64 metric 101
XX.XX.XX.40/28 dev eno1 proto kernel scope link src XX.XX.XX.43 metric 100
169.254.0.0/16 dev eno1 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

你提到调整ens20的metric到100会导致SSH中断,这是因为默认路由优先级相同时,系统会随机选择路由,可能让SSH流量误走动态网卡。下面给你几个可靠的解决方案:


方案一:基于SSH客户端IP的策略路由(最精准)

这个方法给你常用的SSH客户端IP/网段单独指定路由,强制走静态网卡,其他所有流量默认走动态网卡,完全不会冲突:

  1. 创建自定义路由表
    编辑路由表配置文件,添加一个编号为200的路由表(编号只要没被占用即可):

    echo "200 ssh_route" | sudo tee -a /etc/iproute2/rt_tables
    
  2. 添加路由规则
    假设你的SSH客户端IP是YY.YY.YY.Z(或网段YY.YY.YY.0/24),添加规则让来自这个IP的流量使用ssh_route表:

    # 单个IP的情况
    sudo ip rule add from YY.YY.YY.Z table ssh_route
    # 整个网段的情况
    # sudo ip rule add from YY.YY.YY.0/24 table ssh_route
    
  3. 给自定义路由表加默认路由
    让ssh_route表的流量默认走静态网卡eno1:

    sudo ip route add default via XX.XX.XX.41 dev eno1 table ssh_route
    
  4. 调整动态网卡的默认路由优先级
    把ens20的metric改成比eno1的100更低(比如90),让默认流量优先走动态网卡:

    sudo ip route change default via 10.0.0.6 dev ens20 proto static metric 90
    

配置完成后,只有来自指定SSH客户端IP的流量会走静态网卡,其他下载、浏览等流量自动走动态网卡,完美分流。


方案二:基于端口的标记路由(按应用端口分流)

如果不确定SSH客户端IP,或者想按端口区分(比如SSH用22端口,下载用80/443/21等端口),可以用iptables标记流量,再配合路由规则:

  1. 标记下载相关端口的流量
    给常用的下载端口(比如HTTP的80/443、FTP的21/20)打标记(比如标记100):

    sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 100
    sudo iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 100
    sudo iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 100
    sudo iptables -t mangle -A OUTPUT -p tcp --dport 20 -j MARK --set-mark 100
    # 可根据你常用的下载工具端口继续添加
    
  2. 创建下载专用路由表
    同样添加一个自定义路由表:

    echo "201 download_route" | sudo tee -a /etc/iproute2/rt_tables
    
  3. 添加标记匹配规则
    让标记为100的流量使用download_route表:

    sudo ip rule add fwmark 100 table download_route
    
  4. 给下载路由表加默认路由
    让标记的流量走动态网卡ens20:

    sudo ip route add default via 10.0.0.6 dev ens20 table download_route
    

这个方案不需要修改默认路由的metric,SSH的22端口流量没被标记,会继续走默认的eno1,下载端口的流量被标记后走ens20,也能实现分流。


方案三:临时手动切换路由(适合偶尔使用)

如果不想配置永久规则,只是偶尔需要下载时切换网卡,可以手动修改默认路由:

  • 切换到动态网卡下载:

    sudo ip route del default via XX.XX.XX.41 dev eno1
    sudo ip route add default via 10.0.0.6 dev ens20 metric 90
    
  • 下载完成后切回静态网卡:

    sudo ip route del default via 10.0.0.6 dev ens20
    sudo ip route add default via XX.XX.XX.41 dev eno1 metric 100
    

这个方法简单直接,但需要手动操作,适合临时需求。


让配置永久生效

上面的命令都是临时生效的,重启后会失效。如果要永久保存,可以用Ubuntu默认的netplan工具配置:

编辑你的netplan配置文件(通常在/etc/netplan/目录下,比如00-installer-config.yaml):

network:
  ethernets:
    eno1:
      addresses: [XX.XX.XX.43/28]
      gateway4: XX.XX.XX.41
      metric: 100
    ens20:
      dhcp4: true
      metric: 90
  version: 2
  # 添加策略路由规则(对应方案一)
  routing-policy:
    - from: YY.YY.YY.Z/32  # 替换成你的SSH客户端IP
      table: 200
  routes:
    - to: 0.0.0.0/0
      via: XX.XX.XX.41
      table: 200

保存后执行下面的命令生效:

sudo netplan generate
sudo netplan apply

这样重启系统后配置依然有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:59:41