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

Linux双网卡环境下请求响应接口匹配配置咨询

Linux双网卡环境下请求响应接口匹配配置咨询

这种双网卡同时挂默认网关导致的路由乱套问题我之前也踩过坑,咱们先理清楚问题根源,再一步步解决~

问题分析

你的虚拟机两块网卡分别连内网和外网,现在的核心问题有两个:

  1. 默认网关冲突:两块网卡的默认网关Metric都是100,Linux会优先用排在前面的ens104作为默认路由,所以所有没匹配到具体网段的流量都往外网走;
  2. 缺少源路由策略:即使内网请求从ens001进来,系统回复的时候还是会走默认路由的ens104,导致请求和响应接口不匹配,自然没法正常通信。

看你给出的路由表,确实能看到两个默认网关优先级一致,而且没有针对不同源IP的路由规则,这就是症结所在。

解决方案

咱们分两步来配置,先理顺默认路由,再加上策略路由实现“进哪出哪”的效果:

1. 调整默认网关优先级(或移除内网默认网关)

内网一般不需要默认网关(除非你要通过内网网关访问其他内网网段),所以推荐直接给内网网卡的默认网关设更高的Metric(让它优先级更低),或者干脆取消。这里以Netplan配置为例(如果是RHEL/CentOS系列,对应修改/etc/sysconfig/network-scripts/ifcfg-ens001):

编辑Netplan配置文件(比如/etc/netplan/00-installer-config.yaml):

network:
  ethernets:
    ens001:
      addresses: [10.20.50.xxx/22]  # 替换成你的内网网卡实际IP
      gateway4: 10.20.50.100
      metric: 200  # 比ens104的100高,优先级更低
      nameservers:
        addresses: [你的内网DNS地址]
    ens104:
      addresses: [10.25.40.xxx/24]  # 替换成你的外网网卡实际IP
      gateway4: 10.25.40.200
      metric: 100
      nameservers:
        addresses: [你的外网DNS地址]
  version: 2

应用配置:

sudo netplan apply

如果是RHEL/CentOS,修改完网卡配置后执行:

sudo nmcli con reload
sudo nmcli con up ens001
sudo nmcli con up ens104

2. 配置策略路由(源路由)

这一步是关键,通过策略路由让系统根据源IP选择对应的路由表,从而实现“从哪个接口收到请求,就从哪个接口回复”:

  • 首先给两个网卡分别创建专属路由表:

    echo "200 intranet" >> /etc/iproute2/rt_tables
    echo "100 internet" >> /etc/iproute2/rt_tables
    
  • 给内网路由表添加规则(所有源IP为ens001的流量走这个表):

    ip route add 10.20.50.0/22 dev ens001 table intranet
    ip route add default via 10.20.50.100 dev ens001 table intranet
    
  • 给外网路由表添加规则(所有源IP为ens104的流量走这个表):

    ip route add 10.25.40.0/24 dev ens104 table internet
    ip route add default via 10.25.40.200 dev ens104 table internet
    
  • 添加路由规则,让系统根据源IP匹配对应的路由表:

    ip rule add from 10.20.50.xxx lookup intranet  # 替换成ens001的实际IP
    ip rule add from 10.25.40.xxx lookup internet  # 替换成ens104的实际IP
    
  • 要让配置永久生效,可以把这些命令加到/etc/rc.local里(记得给文件加执行权限sudo chmod +x /etc/rc.local),或者在Netplan/NetworkManager的配置里添加路由规则(不同发行版略有差异,按需查找对应配置方式)。

3. 验证配置

执行以下命令确认配置正确:

# 查看内网路由表
ip route show table intranet
# 查看外网路由表
ip route show table internet
# 查看所有路由规则
ip rule list

之后可以从内网机器访问虚拟机的ens001 IP,抓包看回复是否从ens001发出;再从外网测试ens104的访问,确认回复接口匹配。

这样配置后,Linux的TCP/IP栈就能做到请求从哪个接口进来,就从哪个接口回复啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:49:28