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

Debian系统重启后SSH反向隧道结合DNAT的外部流量转发失效求助

Debian系统重启后SSH反向隧道结合DNAT的外部流量转发失效求助

看起来你遇到了重启后反向隧道+DNAT组合失效的头疼问题,内部测试正常但外部走 jumphost 就不行,隧道还通着但流量没被正确NAT,咱们一步步排查可能的原因:

1. 先确认ip_forward是否持久化生效

你启动脚本里是临时把ip_forward设为1,但/proc下的配置重启就会重置,这大概率是第一个踩坑点!

  • 先检查当前状态:执行cat /proc/sys/net/ipv4/ip_forward,如果输出是0,说明重启后这个配置丢了
  • 解决办法:编辑/etc/sysctl.conf,添加或修改一行:net.ipv4.ip_forward=1,然后执行sysctl -p让它立即生效,这样下次重启就不会重置了

2. 检查iptables规则的持久化与生效状态

你手动在启动脚本里加的iptables规则,有可能重启后没加上,或者规则范围有问题:

  • 重启后先验证规则是否存在:执行iptables -t nat -L -n -v,看看PREROUTING里的DNAT规则、POSTROUTING里的MASQUERADE规则是不是都在,而且计数(pkts列)有没有流量进来的增长
  • 为了避免每次重启手动加规则,建议安装iptables-persistent来持久化规则:
    apt install iptables-persistent
    iptables-save > /etc/iptables/rules.v4
    
    这样重启后系统会自动加载这些规则
  • 另外注意:你的MASQUERADE规则是针对ens18接口的,那反向隧道进来的流量回包时,走的是不是这个接口?如果回包走的是隧道接口(比如lo或者tun类接口),那这个MASQUERADE规则就不会生效,导致回包源地址还是10.10.10.5,外部流量的源是jumphost那边的地址,可能触发路由问题。可以尝试把MASQUERADE规则改成不限制接口,或者指定源地址范围:
    iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
    

3. 验证反向隧道的转发链路是否完整

虽然你说隧道是通的,但得确认jumphost上的端口真的转发到了Debian机器:

  • 在jumphost上执行ss -tulpn | grep 443,看看是不是有sshd进程在监听443端口(反向隧道是由jumphost的sshd负责转发的)
  • 在jumphost上直接测试访问:curl -v http://localhost:443,看看能不能通到Debian机器的443端口,再在Debian上用tcpdump -i any port 443抓包,确认流量确实到了Debian,然后看有没有被DNAT到10.10.10.5
  • 另外检查autossh的进程状态:在Debian上执行ps aux | grep autossh,看看两个autossh进程是不是都在正常运行

4. 回包路由的问题排查

如果前面的都没问题,那可能是回包没经过NAT导致的:

  • 在10.10.10.5上用tcpdump -i any port 443抓包,看是否收到了Debian转发过来的流量,然后看回包的目标地址是哪里
  • 如果回包的目标地址是jumphost那边的外部地址,而10.10.10.5的默认网关不是Debian机器,那回包会直接走自己的网关出去,导致流量不对称,外部就收不到回包。这种情况要确保10.10.10.5的默认网关指向Debian,或者在Debian上添加静态路由让10.10.10.5的回包走Debian转发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:24:36