通过 SSH 端口转发实现异地内网服务器互通
異地內(nèi)網(wǎng)服務(wù)器互通,直接通過路由器映射也可以做到,但是由于公網(wǎng)IP并不是固定的,因此這里介紹通過 SSH 端口轉(zhuǎn)發(fā),實(shí)現(xiàn)的固定IP訪問
場景:內(nèi)網(wǎng)機(jī)器 A、無固定IP機(jī)器B、固定IP機(jī)器C,其中 B 機(jī)器中運(yùn)行有 SVN 服務(wù),端口 6060,現(xiàn)在需要 A 訪問 B 機(jī)器上的 svn 服務(wù)
方案一:通過非固定 IP:6060 直接訪問,顯然,這里的IP是可變的,不指定哪一刻IP變化后導(dǎo)致無法訪問,需要更新鏈接地址
方案二:(推薦)
通過 ssh 本地端口轉(zhuǎn)發(fā)實(shí)現(xiàn),具體命令,在 C 機(jī)器上執(zhí)行:
接下來,通過 svn://C:7070 即可訪問 B 機(jī)器端口為 6060 的 svn 服務(wù)
注:方案二需在 B 機(jī)器上通過腳本實(shí)現(xiàn)自動獲取公網(wǎng)IP并重啟轉(zhuǎn)發(fā)服務(wù)即可
方案三:(強(qiáng)烈推薦)
通過遠(yuǎn)程端口轉(zhuǎn)發(fā)實(shí)現(xiàn),在 B 機(jī)器上執(zhí)行以下命令:
注:經(jīng)實(shí)驗(yàn),發(fā)現(xiàn)如果類似本地轉(zhuǎn)發(fā)將 0.0.0.0 綁定后,在 C 機(jī)器上并不是綁定在 0.0.0.0 ,而是仍然綁定在了 127.0.0.1 ,這種情況下,仍然無法通過 svn://C:7070 訪問,解決辦法是修改 sshd 配置文件,將 GatewayPorts 設(shè)置成 yes 并重啟即可。如圖:
cat /etc/ssh/sshd_config
此時(shí),通過 netstat -antp | grep 7070 可以觀察端口監(jiān)聽情況
- 未啟用 GatewayPorts 之前
- 啟用 GatewayPorts 之后
最后:
1、如果不想修改服務(wù)器本身的配置文件,可以先通過反向代理 -R 的方式,監(jiān)聽 127.0.0.1:7070,然后通過正向代理 -L 的方式,將本地的 7070 轉(zhuǎn)發(fā)到 0.0.0.0:7071,這時(shí)可以通過 svn://C:7071 來訪問B的服務(wù)
在 B 機(jī)器執(zhí)行命令
在 C 機(jī)器執(zhí)行命令
ssh -L 0.0.0.0:7071:localhost:7070 localhost2、由于 ssh 會因?yàn)槌瑫r(shí)自動斷開鏈接,這樣端口轉(zhuǎn)發(fā)就會失效,因此推薦使用 autossh 進(jìn)行設(shè)置
2018-07-29 更新
方案四:
場景:機(jī)器A,運(yùn)行一個WEB服務(wù),機(jī)器B為要訪問機(jī)器A上WEB服務(wù)的客戶機(jī),機(jī)器C為一個公網(wǎng)服務(wù)器,由于某些原因機(jī)器A的WEB服務(wù)不能直接發(fā)布到機(jī)器C,且機(jī)器A無固定IP,要求機(jī)器B能訪問機(jī)器A上的WEB服務(wù)(假定端口為8888)
方案:
由于通常情況下,GatewayPorts 默認(rèn)不啟用,因此,這里可以在機(jī)器C上借用 nginx 做一次反代處理,將其反向代理到 127.0.0.1:8099,如
listen 8011; location /{proxy_pass http://127.0.0.1:8099;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-PORT $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;#持久化連接相關(guān)配置#proxy_connect_timeout 30s;#proxy_read_timeout 86400s;#proxy_send_timeout 30s;#proxy_http_version 1.1;#proxy_set_header Upgrade $http_upgrade;#proxy_set_header Connection "upgrade";add_header X-Cache $upstream_cache_status;expires 12h;}此時(shí),通過 C:8011 即可訪問
總結(jié)
以上是生活随笔為你收集整理的通过 SSH 端口转发实现异地内网服务器互通的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动手开发一个简易的 PHP for Gi
- 下一篇: 依赖注入的几种形式及场景