分类
折腾

端口转发 + 内网穿透?用 SSH 就够了!

之前我介绍过 otunnel,它可以建立一个 TCP 隧道,穿透 NAT 将本机的端口映射到远程主机上。这样一来,就可以通过有公网 IP 的主机(或 VPS)来访问 NAT 下主机上的服务。今天,这里再介绍一种方法,只需要利用服务器上自带的 SSH 即可。

适用情景

本机没有公网 IP,但你拥有一台有公网 IP 的主机或 VPS。你可以把本地服务的端口映射到 VPS 上的指定端口,这样访问 VPS 的指定端口,相当于访问了本机上的端口。

本文的封面图直观地说明了这一情景:

“连接 远程 端口 80 = 本地端口 80”

服务器端 SSH 的配置

在服务器上执行:

echo "GatewayPorts yes" >> /etc/ssh/sshd_config
echo "AllowTcpForwarding yes" >> /etc/ssh/sshd_config
systemctl restart sshd

第一行代码,可以让 sshd 把端口转发至远程主机的 0.0.0.0 上。如果不加这一行,sshd 只会把端口转发至远程主机的 127.0.0.1 上,公网无法访问转发后的端口。

第二行代码,会启用 sshd 的 TCP 转发。

第三行代码用来重启 sshd。

客户端连接

Linux / macOS 执行:

ssh -fNTRC rport:127.0.0.1:lport user@hostname -p ssh_port

其中:

  • rport:要转发到的远程端口
  • lport:被转发的本机端口
  • user:SSH 用户名
  • hostname:远程主机名 / IP
  • ssh_port:SSH 端口

Windows 用户需要先下载 PuTTY 套件中的 plink.exe。(putty.exe 或许有图形化的操作,不过我没有了解) 然后执行:

plink.exe -ssh -R rport:127.0.0.1:loprt -C -T -N user@hostname -P ssh_port

其中:

  • rport:要转发到的远程端口
  • lport:被转发的本机端口
  • user:SSH 用户名
  • hostname:远程主机名 / IP
  • ssh_port:SSH 端口

至此,端口转发已完成。

“端口转发 + 内网穿透?用 SSH 就够了!”上的4条回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注