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

Ubuntu双网卡环境下Postfix指定网卡发件及多服务分网卡使用的路由配置问题

Ubuntu双网卡环境下Postfix指定网卡发件及多服务分网卡使用的路由配置问题

看起来你遇到的是双网卡环境下策略路由配置的典型问题——当前混乱的默认路由导致服务流量选路冲突,要么Postfix发件超时,要么其他服务无法正常工作。我来一步步帮你解决:

第一步:先清理现有混乱的路由表

你当前的路由表有重复的默认路由,这会导致系统随机选择网关,是问题的根源。先删除所有默认路由:

sudo ip route del default via 192.168.18.1 dev eth0
sudo ip route del default via 192.168.1.1 dev eth1
# 确保把所有Metric为0和100的默认路由都删掉

第二步:创建专属路由表

我们要给每个网卡单独配置路由表,让不同来源IP的流量走对应网关:

  1. 先编辑路由表配置文件,添加自定义表:

    echo "10 eth1table" | sudo tee -a /etc/iproute2/rt_tables
    echo "20 eth0table" | sudo tee -a /etc/iproute2/rt_tables
    

    这里eth1table是给eth1用的路由表(编号10),eth0table给eth0用(编号20)。

  2. 给eth1的路由表添加路由(替换成你实际的eth1本机IP,比如假设是192.168.1.10):

    sudo ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table eth1table
    sudo ip route add default via 192.168.1.1 dev eth1 table eth1table
    
  3. 给eth0的路由表添加路由(替换成你实际的eth0本机IP,比如假设是192.168.18.20):

    sudo ip route add 192.168.18.0/24 dev eth0 src 192.168.18.20 table eth0table
    sudo ip route add default via 192.168.18.1 dev eth0 table eth0table
    

第三步:添加策略路由规则

让系统根据流量的来源IP选择对应的路由表:

sudo ip rule add from 192.168.1.10 table eth1table
sudo ip rule add from 192.168.18.20 table eth0table

这样,从eth1 IP发出的流量会走eth1的网关,从eth0 IP发出的流量会走eth0的网关,完美隔离。

第四步:配置Postfix绑定到eth1

修改Postfix的配置文件,强制它从eth1的IP收发邮件:

  1. 编辑/etc/postfix/main.cf:
    sudo nano /etc/postfix/main.cf
    
  2. 修改以下参数(替换成你的eth1 IP):
    inet_interfaces = localhost, 192.168.1.10
    smtp_bind_address = 192.168.1.10
    
  3. 重启Postfix生效:
    sudo systemctl restart postfix
    

第五步:配置其他服务绑定到eth0

对于HTTP、FTP等需要走eth0的服务,同样设置它们监听eth0的IP:

  • 比如Nginx/Apache,在配置文件里设置listen 192.168.18.20:80;
  • FTP服务(比如vsftpd)设置listen_address=192.168.18.20
    这样这些服务的流量会从eth0的IP发出,自动走eth0的网关。

第六步:保存配置确保重启生效

上面的路由配置是临时的,重启后会丢失,我们需要把它们保存下来:
如果你用的是传统的ifupdown,可以把路由和规则命令放到/etc/rc.local(记得给文件加执行权限);如果是Ubuntu 18.04+的Netplan,需要编辑Netplan配置文件(比如/etc/netplan/00-installer-config.yaml),添加路由表和规则的配置,示例如下:

network:
  ethernets:
    eth0:
      addresses: [192.168.18.20/24]
      routes:
        - to: default
          via: 192.168.18.1
          table: 20
      routing-policy:
        - from: 192.168.18.20/32
          table: 20
    eth1:
      addresses: [192.168.1.10/24]
      routes:
        - to: default
          via: 192.168.1.1
          table: 10
      routing-policy:
        - from: 192.168.1.10/32
          table: 10
  version: 2

然后执行sudo netplan apply生效。

为什么之前的配置会出问题?

  • 你之前有多个默认路由,系统会随机选择网关,导致Postfix绑定到eth1时,可能用了eth0的网关,从而无法正确发件(超时)。
  • 直接把默认路由改成eth1的话,所有流量都会走eth1,eth0上的服务收到请求后,返回流量会走eth1的网关,导致客户端无法收到响应,所以HTTP/FTP等服务失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:18:15