Skip to main content

__debug's Home Keep it simple, stupid

利用 ssh 反向代理进行内网穿透

很久之前就想在家里通过 ssh 访问机房里的电脑, 但机房的电脑在内网里没法直接搞…

正好手上有个 VPS, 于是可以很简单地用 ssh 的反向代理功能来解决.

原理

17162647378_c7d9f10de8_b.jpg

具体过程

为了方便, 约定:

  • Client: 家里的电脑
  • Relay: VPS
  • Server: 机房里的电脑

比如说我们要用 Relay 的 6666 端口来反向代理. 一开始不要忘记启动 Server 和 Relay 上的 sshd.

在 Relay 上, 先将 /etc/ssh/sshd_config 中加入 GatewayPorts clientspecified, 然后重启 sshd 服务.

然后, 如果有防火墙的话, 要允许 6666 端口. 比如说在用 firewalld 的 VPS 上, 运行

firewall-cmd --permanent --zone=public --add-port=6666/tcp
firewall-cmd --reload

在 Server 上, 运行

ssh -fNR relay_ip:6666:localhost:22 relay_user@relay_ip

之后在 Client 上直接用

ssh server_user@relay_ip -p 6666

就可以连接 Server 了!

最后, 如果想要长时间地使用, 最好再利用 autossh 来实现自动重连, 用法十分简单, 自己看看文档就会了.

注意:

有一些教程里的命令是

ssh -fNR 6666:localhost:22 relay_user@relay_ip

这样子隧道的终点是 127.0.0.1:6666 而非 relay_ip:6666, 导致只能在 Relay 的内网里用 ssh 访问 Server. 虽然这种方法也通过设置端口转发也可以达到同样的效果, 不过没有任何必要.

Comments

Comments powered by Disqus