收起左侧

多网卡同网段情况下,TCP服务(fnOS与nginx)访问异常

2
回复
106
查看
[ 复制链接 ]

3

主题

3

回帖

0

牛值

江湖小虾

2025-8-5 17:55:16 显示全部楼层 阅读模式
悬赏1飞牛币未解决

📝 问题描述:fnOS下多网卡同网段部署导致端口访问异常

📌 当前网络环境:

  • 系统 fnOS 0.9.18
  • 服务器配置了 3 个本地 IP 地址,分别为:
    • 10.0.1.0(绑定于 eno1
    • 10.0.1.1(绑定于 enp6s0
    • 10.0.1.2(绑定于 enp5s0-ovs
  • 三个 IP 均处于同一个子网(10.0.0.0/23);
  • 所有 IP 从外部均可成功 ping 通;
  • fnOS 访问端口:
    • HTTP: 5666
    • HTTPS: 5667

⚠️ 遇到的问题:

  • 当从客户端直接访问 https://10.0.1.0:5667 时,连接正常;
  • 但访问 https://10.0.1.1:5667https://10.0.1.2:5667 时,连接建立但卡在 TLS 握手阶段(Client Hello 发出后无响应);
  • 该问题在 HTTP (5666) 上同样存在:10.0.1.0 正常,其它 IP 无响应或连接超时;
  • 所有访问均使用 IP 直连,无使用域名或 DNS;(使用域名或nginx反向代理时问题同样存在)
  • 测试使用 curl 手动指定目标 IP,可复现问题。

📌 推测原因(Chatgpt分析):

  • 虽然连接请求进入正确接口(如 enp6s0),但由于系统默认只有一个主路由出口(如 eno1),返回包可能从不同接口发出
  • 这将导致客户端无法完成 TLS 握手,表现为连接挂起或超时;
  • 同时,Linux 默认启用的 反向路径过滤(rp_filter) 也可能丢弃了这种“入出口不一致”的响应包;
  • 所有迹象表明,该问题为典型的回包路径异常ARP 路由混乱导致的连接失败。

大佬们有什么好的解决办法吗?我希望给多个网口都利用上,一个专门给监控推流使用,一个用于内网访问(10G),一个用于外网访问(2.5G)

收藏
送赞
分享

3

主题

242

回帖

0

牛值

小有名气

2025-8-5 18:59:02 显示全部楼层
  1. 路由表优化配置

【清除默认路由冲突】
sudo ip route del 10.0.0.0/23

【为每个接口添加特定路由】
sudo ip route add 10.0.0.0/23 dev eno1 src 10.0.1.0
sudo ip route add 10.0.0.0/23 dev enp6s0 src 10.0.1.1
sudo ip route add 10.0.0.0/23 dev enp5s0-ovs src 10.0.1.2

【添加策略路由】
sudo ip rule add from 10.0.1.0 lookup 100
sudo ip rule add from 10.0.1.1 lookup 101
sudo ip rule add from 10.0.1.2 lookup 102

【创建独立路由表】
sudo ip route add default via 10.0.0.1 dev eno1 table 100
sudo ip route add default via 10.0.0.1 dev enp6s0 table 101
sudo ip route add default via 10.0.0.1 dev enp5s0-ovs table 102

  1. 调整内核参数

【关闭反向路径过滤】
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eno1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/enp6s0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/enp5s0-ovs/rp_filter

【启用ARP过滤】
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

  1. 防火墙规则优化

【允许特定接口的流量】
sudo iptables -A INPUT -i eno1 -d 10.0.1.0 -j ACCEPT
sudo iptables -A INPUT -i enp6s0 -d 10.0.1.1 -j ACCEPT
sudo iptables -A INPUT -i enp5s0-ovs -d 10.0.1.2 -j ACCEPT

【保存规则】
sudo netfilter-persistent save

4.功能分配建议

‌监控推流专用‌:绑定10.0.1.1到enp6s0,限制带宽并优化QoS

‌内网访问(10G)‌:使用10.0.1.2和enp5s0-ovs,配置高性能路由

‌外网访问(2.5G)‌:保留10.0.1.0和eno1作为默认出口

5.验证步骤

使用tcpdump -i enp6s0 port 5667抓包确认请求到达正确接口

通过ip route get 10.0.1.1 from 10.0.1.1检查回包路径

测试各接口的端到端连通性:curl --interface enp6s0 https://10.0.1.1:5667

6.持久化配置

【编辑/etc/network/interfaces添加以下内容】
post-up ip route add 10.0.0.0/23 dev eno1 src 10.0.1.0
post-up ip route add 10.0.0.0/23 dev enp6s0 src 10.0.1.1
post-up ip route add 10.0.0.0/23 dev enp5s0-ovs src 10.0.1.2
post-up echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

该方案通过策略路由和ARP过滤解决了多网卡同网段的回包路径问题,同时实现了业务流量的物理隔离

主要是担心自己修改路由表,在将来更新或者配置其他功能的时候出现冲突,然后导致其他问题 大家平时这种多网口如果不用端口聚合都是怎么配置的啊?如果都自定义路由表,可能引发更多问题,这种类似的回包路径异常,  详情 回复
2025-8-5 19:25

3

主题

3

回帖

0

牛值

江湖小虾

2025-8-5 19:25:23 楼主 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=155788&ptid=33509][color=#999999]yyywd 发表于 2025-8-5 18:59[/color][/url][/size] 路由表优化配置 【清除默认路由冲突】 [/quote]

主要是担心自己修改路由表,在将来更新或者配置其他功能的时候出现冲突,然后导致其他问题

大家平时这种多网口如果不用端口聚合都是怎么配置的啊?如果都自定义路由表,可能引发更多问题,这种类似的回包路径异常,我在OpenWrt和Exsi上就没遇到过,多网口同网段的话一般都是可以直接访问

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则