Linux反向隧道

来自牛奶河Wiki
阿奔讨论 | 贡献2023年12月20日 (三) 09:30的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

有内网机器 C 和 T,均无公网IP,此时 C 无法向 T 发起连接。

现有一公网 IP 机器 P,C 与 T 均可主动向 P 发起连接。此时可透过 P,可完成 C 向 T 发起连接。需要:

  1. Env:T 可用证书连接到 P
  2. Env:P 的 sshd_config 配置打开转发功能:GatewayPorts yes(重启 sshd)
  3. Env:P 的 firewall 打开相应端口
  4. T 向 P 主动建立一个 SSH 反向隧道,如:将 P 的 10022 端口转发到 T 的 22 端口
# 在 T 上执行,在 P 上建立反向隧道监听端口 10022
# 超时会断掉,加参数无用:-o TCPKeepAlive=yes
ssh -T -f -N -g -R :10022:127.0.0.1:22 PublicIP

参数说明:

  • -T 不分配伪终端
  • -f 使 ssh 进程在用户输入密码之后转入后台运行
  • -N 不执行远程指令,即代理服务器不需执行指令,只作端口转发
  • -g 允许代理服务器连接到本地转发端口
  • -R 将代理服务器指定端口上的连接转发到本机端口
  • :10022:127.0.0.1:22表示本机回环接口(127.0.0.1,也可使用本机其他网络接口的地址,比如以太网 IP 或 WiFi IP)的 22 端口连接到远程主机的 10022 接口,因远程主机 10022 绑定的地址为空,所以远程主机会监听其所有网络接口的 10022 端口