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

解决WireGuard网关中SSH TCP SYN被错误转发至wg0接口导致连接超时的iptables规则配置求助

解决WireGuard网关中SSH TCP SYN被错误转发至wg0接口导致连接超时的iptables规则配置求助

嘿,我来帮你搞定这个问题!你的核心痛点是来自ino1接口的SSH(TCP 22端口)流量被WireGuard的转发规则错误导向了wg0,导致无法收到SYN-ACK进而超时。我们可以通过给iptables添加优先级更高的规则,让SSH流量绕过WireGuard的转发逻辑,同时完全不影响WireGuard的UDP流量(毕竟WG本身就是基于UDP的)。

下面是具体的操作步骤,我会一步步解释清楚:

1. 优先放行ino1接口的SSH流量到本地

如果你是直接连接这个WireGuard网关的SSH服务(也就是目标IP是网关自身),我们需要在INPUT链最前面添加规则,让来自ino1的SSH流量直接被本地处理,不会走到后续的转发规则:

# 允许来自ino1接口的TCP 22端口流量进入本地INPUT链
iptables -I INPUT 1 -i ino1 -p tcp --dport 22 -j ACCEPT

这里用-I INPUT 1是把这条规则插入到INPUT链的第一个位置,确保它比WireGuard的转发规则先匹配。

2. 防止SSH流量被NAT转发到wg0(如果你的WG用了NAT)

如果你的WireGuard配置里做了NAT转发(比如POSTROUTING链的MASQUERADE),还需要在nat表的PREROUTING链里拦截SSH流量,避免它被转发到wg0:

# 拦截来自ino1的SSH流量,不让它被NAT转发到wg0
iptables -t nat -I PREROUTING 1 -i ino1 -p tcp --dport 22 -j ACCEPT

3. 确保WireGuard的UDP流量不受影响

为了避免误操作影响WG的正常运行,我们可以明确放行WG的UDP流量(默认端口是51820,如果你的端口不一样,记得替换):

# 允许WG端口的UDP流量进入本地
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
# 允许WG接口的转发流量双向通行
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT

4. (可选)添加策略路由确保响应流量从ino1返回

如果你的网关默认路由是走wg0的,可能会出现SSH的响应流量从wg0出去,导致连接还是异常。这时候需要添加策略路由,让来自ino1的流量响应原路返回:

# 添加自定义路由表100,指定来自ino1 IP的流量走ino1网关
ip rule add from <你的ino1接口IP> table 100
ip route add default via <ino1接口的网关IP> dev ino1 table 100

记得把<你的ino1接口IP>和<ino1接口的网关IP>替换成你实际的地址。

最后:保存iptables规则避免重启丢失

配置完成后,一定要保存规则,不然重启网关后就失效了:

  • Debian/Ubuntu系:
    iptables-save > /etc/iptables/rules.v4
    
  • RHEL/CentOS系:
    service iptables save
    

这样配置后,SSH流量会被优先处理,不会被WireGuard转发,同时WG的UDP流量依然正常工作,完美解决你的问题!

备注:内容来源于stack exchange,提问作者J.Valášek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:48:09