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

多跳SSH隧道配置求助:通过S1、S2中转本地网络流量(仅可修改S1、S2配置)

多跳SSH隧道配置求助:通过S1、S2中转本地网络流量(仅可修改S1、S2配置)

我来帮你梳理一套可行的配置方案,完全不需要修改本地客户端的设置,只需要在S1和S2上做一些配置就能实现你的需求:

先明确你的网络链路:

本地 → S1 → S2 → 互联网,我们要把流量一步步中转过去,核心是让S1作为跳板,把本地的SSH隧道流量转发到S2,再由S2完成上网的NAT转发。


第一步:配置S2,让它能转发流量到互联网

S2是最终的上网节点,必须开启IP转发和NAT规则:

  1. 启用IP转发:
    临时生效(重启后失效):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    永久生效:
    编辑/etc/sysctl.conf,找到net.ipv4.ip_forward这一行,去掉注释并设置为:

    net.ipv4.ip_forward=1
    

    然后执行sysctl -p让配置立即生效。

  2. 设置NAT规则:
    先找到S2的外网网卡(比如eth0、ens33,可以用ip addr命令查看),然后执行:

    iptables -t nat -A POSTROUTING -o 你的外网网卡名 -j MASQUERADE
    

    如果想永久保存这个规则,不同系统方式不同:

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

第二步:在S1上建立持久化的SSH隧道到S2

我们需要让S1一直保持一个到S2的SOCKS代理隧道,这样本地流量到S1后能直接中转到S2:

  1. 配置S1免密登录S2:
    在S1上生成SSH密钥对(一路回车默认即可):

    ssh-keygen -t ed25519
    

    然后把公钥复制到S2,这样S1连S2不需要输密码:

    ssh-copy-id -p 1202 S2的用户名@S2的IP地址
    
  2. 创建系统服务维持隧道:
    手动启动隧道容易断开,我们用systemd做一个自动重启的服务:
    创建文件/etc/systemd/system/s1-to-s2-socks.service,内容如下(替换里面的S2用户名和S2IP为实际值):

    [Unit]
    Description=持久化S1到S2的SSH SOCKS隧道
    After=network.target
    
    [Service]
    User=root
    ExecStart=/usr/bin/ssh -fN -D 0.0.0.0:1080 -p 1202 -o ServerAliveInterval=60 -o ServerAliveCountMax=3 S2用户名@S2IP
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    

    解释一下参数:

    • -D 0.0.0.0:1080:让S1在所有网卡上监听1080端口,作为SOCKS5代理入口
    • ServerAliveInterval=60:每60秒发一个心跳包,避免隧道超时断开
    • Restart=always:隧道断开后自动重启
  3. 启动并启用服务:

    systemctl daemon-reload
    systemctl start s1-to-s2-socks.service
    systemctl enable s1-to-s2-socks.service
    

    用systemctl status s1-to-s2-socks.service检查服务是否正常运行。


第三步:配置S1的SSH服务,允许端口转发

编辑S1的/etc/ssh/sshd_config,确保以下配置项存在且未被注释:

AllowTcpForwarding yes
GatewayPorts yes
PermitOpen any

然后重启S1的SSH服务:

systemctl restart sshd

第四步:用NetMod连接S1即可

打开你的NetMod客户端,新建一个SSH连接:

  • 主机:S1的IP地址
  • 端口:22
  • 用户名:S1的登录用户名
  • 选择动态端口转发(SOCKS5),本地端口随便设一个(比如1080)
  • 保存后连接

这样你的本地流量就会通过NetMod到S1,S1再通过我们建立的隧道把流量转到S2,最后由S2转发到互联网,完美实现多跳中转!

另外补充一点:如果你的S1或S2有防火墙,要确保S1能访问S2的1202端口,S2的外网端口能正常访问互联网。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:24:54