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

如何仅使用iptables将特定流量通过指定WAN接口转发?

如何仅使用iptables将特定流量通过指定WAN接口转发?

当然可以只用iptables(配合少量路由策略命令)实现这个需求!你之前只完成了数据包标记这一步,但还缺少路由规则和地址转换的关键配置,这就一步步帮你搞定:

  • 第一步:标记目标LAN流量
    先完善你的数据包标记规则,确保只针对从LAN接口(eth0)发往指定IP的80/443流量打标记,避免误处理其他流量:

    # 替换$PUBLIC_IP为你要定向的目标IP,比如8.8.8.8
    iptables -t mangle -A PREROUTING -i eth0 -d $PUBLIC_IP -p tcp --dports 80,443 -j MARK --set-mark 0x77
    

    你可以用iptables -t mangle -L PREROUTING -n -v命令检查这条规则是否生效。

  • 第二步:创建专属路由表并配置默认路由
    我们需要给标记过的流量单独设置一条走wan1的路由:

    1. 首先在路由表配置文件里添加一个专属表:
      echo "100 wan1route" >> /etc/iproute2/rt_tables
      
    2. 给这个表添加wan1的默认路由(替换<wan1网关>为你实际的wan1网关地址,比如192.168.2.1):
      ip route add default via <wan1网关> dev wan1 table wan1route
      
  • 第三步:让标记流量走专属路由表
    告诉系统,所有带有0x77标记的数据包都使用我们刚创建的wan1route路由表:

    ip rule add fwmark 0x77 table wan1route
    

    可以用ip rule list查看这条规则是否存在。

  • 第四步:配置源地址转换(SNAT)
    从wan1出去的流量必须把源地址换成wan1的公网IP,否则返程流量找不到回到LAN的路径:

    • 如果wan1是静态IP(替换<wan1公网IP>为实际地址):
      iptables -t nat -A POSTROUTING -o wan1 -m mark --mark 0x77 -j SNAT --to-source <wan1公网IP>
      
    • 如果wan1是DHCP动态获取的IP,用MASQUERADE更灵活:
      iptables -t nat -A POSTROUTING -o wan1 -m mark --mark 0x77 -j MASQUERADE
      
  • 第五步:保存配置,确保重启后生效

    • 保存iptables规则:根据你的系统,执行iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或者service iptables save(CentOS/RHEL)
    • 保存路由规则:把添加路由和ip rule的命令加到/etc/rc.local或者系统的开机启动脚本中,避免重启后配置丢失。

小提示

可以用traceroute 8.8.8.8从LAN内的设备测试,看看流量是否走wan1的网关;也可以用iptables -t mangle -vL PREROUTING查看标记规则的匹配计数,确认流量是否被正确标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:37:58