開發中經常需要外網服務映射到本機內網服務的需要,便於調試。
以前都是同事幫着配,這兩天自己也看了一下 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 ,抽空我也要好好學一下。
但最重要的還是要理論結合實際,多看多練。
