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

如何通过反向SSH将Server A的全部流量转发至Server B?

如何通过反向SSH将Server A的全部流量转发至Server B?

嗨,我来帮你理清这个问题!你已经成功用反向SSH把Server A的22端口映射到了Server B的4000端口,但这只是单端口的SSH转发,要实现全部流量的转发,还需要调整隧道配置、开启Server B的转发能力,以及设置Server A的路由规则。下面分步骤给你讲两种可行的方法:


前提准备:先让Server B具备流量转发能力

首先,Server B需要能把来自Server A的流量转发到公网,所以得先开启IP转发和地址伪装:

  1. 在Server B上执行以下命令(临时生效,重启后会重置):
    sudo echo 1 > /proc/sys/net/ipv4/ip_forward
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
    👉 注意:把eth0换成Server B的公网网卡名(可以用ip addr查看,比如ens33、ens5之类的)。
  2. 要是想永久生效:
    • 编辑/etc/sysctl.conf,找到net.ipv4.ip_forward一行,改成net.ipv4.ip_forward=1,然后执行sudo sysctl -p。
    • 保存iptables规则:Debian/Ubuntu可以用sudo iptables-save > /etc/iptables/rules.v4,CentOS/RHEL可以用firewall-cmd配置或者保存到对应路径。

方法一:用反向SSH建立TUN虚拟隧道(推荐,全流量转发最直接)

这种方法会在Server A和Server B之间建立一个虚拟的点对点网络,让Server A的所有流量都通过这个隧道走Server B转发。

  1. 在Server A上修改反向SSH命令,建立TUN隧道:

    ssh -fNT -o Tunnel=point-to-point -o TunnelDevice=0:1 -o ServerAliveInterval=60 ubuntu@62.45.xx.xx -i <private-key>
    

    👉 加ServerAliveInterval=60是为了防止隧道长时间无数据被断开。

  2. 给虚拟网卡配置IP地址:

    • 在Server A上执行:
      sudo ip addr add 10.0.0.1/30 dev tun0
      sudo ip link set tun0 up
      
    • 在Server B上(可以直接在Server B的终端操作,或者通过反向隧道用ssh -p 4000 ubuntu@localhost连回Server A后操作):
      sudo ip addr add 10.0.0.2/30 dev tun1
      sudo ip link set tun1 up
      
  3. 设置Server A的默认网关,让所有流量走虚拟隧道:

    sudo ip route add default via 10.0.0.2 dev tun0
    

    这样配置后,Server A的所有流量都会通过Server B转发到公网了。


方法二:用反向SSH+SOCKS代理+iptables重定向

如果你不想修改默认网关,可以用这种方法,把Server A的流量重定向到SOCKS代理端口,再通过反向SSH转发到Server B。

  1. 在Server A上启动本地SOCKS5代理,并通过反向SSH映射到Server B:
    先在Server A上开一个SOCKS5代理(用SSH自带的功能):

    ssh -fNT -D 1080 localhost
    

    然后修改反向SSH命令,把Server B的1080端口映射到Server A的1080端口:

    ssh -fNT -R 1080:localhost:1080 -o ServerAliveInterval=60 ubuntu@62.45.xx.xx -i <private-key>
    
  2. 用iptables把Server A的所有流量重定向到SOCKS5代理:

    sudo iptables -t nat -A PREROUTING -p tcp --dport 1:65535 -j REDIRECT --to-ports 1080
    sudo iptables -t nat -A PREROUTING -p udp --dport 1:65535 -j REDIRECT --to-ports 1080
    

    👉 注意:这种方法需要确保你的系统支持UDP转发到SOCKS5,部分环境可能需要额外工具(比如redsocks)来处理UDP流量。


一些注意事项

  • 确保Server B的防火墙允许反向SSH的22端口,以及TUN隧道/ SOCKS代理的端口(比如1080)通过。
  • 如果反向SSH经常断开,可以把ServerAliveInterval和ServerAliveCountMax参数加到~/.ssh/config里,比如:
    Host serverB
      HostName 62.45.xx.xx
      User ubuntu
      IdentityFile <private-key>
      ServerAliveInterval 60
      ServerAliveCountMax 3
    
    之后用ssh -fNT -R ... serverB连接会更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:27:52