ssh 端口转发实现外网 80 端口映射到内网 80 端口
开发中经常需要外网服务映射到本机内网服务的需要,便于调试。
以前都是同事帮着配,这两天自己也看了一下 ssh 端口转发。 同事分分钟钟搞定的事情,自己折腾了 2 天, 真是弱爆了。
最初老想不明白一件事,为什们外网服务器能够找到我的内网机器,现在才明白原来走的是 ssh 隧道。
需求我的内网机器 192.168.9.100, 我的阿里云外网 123.56.86.52, 现在需要所有对 123.56.86.52 80 端口的访问都映射到 192.168.9.100 的 80 端口。
显然 123.56.86.52 访问不到 192.168.9.100, 但 192.168.9.100 能访问到 123.56.86.52 , 所以很简单 ssh 建立一个远程端口转发就行了。
1 在 192.168.9.100 上执行
ssh -N -v -R 3000:127.0.0.1:80 root@123.56.86.52
-R 表示远程转发, 这句话的意思是 通过 ssh 连接到 123.56.86.52,让 123.56.86.52 监听自己的 3000 端口, 所有通过 3000 端口的数据都通过 ssh 转发到 127.0.0.1 的 80 端口。
这里 127.0.0.1 就是 192.168.9.100 这个机器。 在 ssh 连接的时候通道就建立了, 以后所有的通信都走的是这个通道。
2 既然 123.56.86.52 已经监听在 3000 端口了, 接下来就非常简单了, 服务器上用 nginx 做一个反向代理, 把 80 端口代理到 3000 端口就行了
123.56.86.52 上 nginx 配置如下
location / { root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Via "nginx"; }
现在外网就成功映射到了我的内网机器
看着同事们 ssh 各种打洞, 各种玩法, 只能膜拜。 ssh 功能强大,通过 ssh 可以在家里随便访问公司内网电脑, 在公司内网电脑也可以远程操作家里的内网电脑。
想学好 ssh 的同学推荐一本书 SSH -The Definitive Guide, 2nd Edition.pdf ,抽空我也要好好学一下。
但最重要的还是要理论结合实际,多看多练。