本文來(lái)自 悟塵紀(jì)浦箱,獲取更新內(nèi)容可查看原文:https://www.lixl.cn/2020/010618877.html
當(dāng)我們使用公司或家中電腦搭建了 Web 服務(wù)時(shí)吸耿,一般不能直接從外網(wǎng)訪問(wèn),為了實(shí)現(xiàn)從外網(wǎng)直接訪問(wèn)到內(nèi)網(wǎng)的服務(wù)酷窥,一般會(huì)需要用到 內(nèi)網(wǎng)穿透 技術(shù)咽安。常用的內(nèi)網(wǎng)穿透工具有 NAT 轉(zhuǎn)發(fā)、DMZ 主機(jī)蓬推、AutoSSH妆棒、ngrok、frp沸伏、花生殼等糕珊。下面將會(huì)介紹如何通過(guò) SSH 端口轉(zhuǎn)發(fā),使內(nèi)網(wǎng)主機(jī) A 的服務(wù)轉(zhuǎn)發(fā)至公網(wǎng)主機(jī) B 上毅糟。
需要條件
? 一臺(tái)內(nèi)網(wǎng)主機(jī) A红选,一臺(tái) Linux 公網(wǎng)主機(jī) B。下文以 CentOS7 系統(tǒng)為例姆另。
第一步:公網(wǎng)服務(wù)器配置
? 修改公網(wǎng)主機(jī) B 的 SSH 配置文件/etc/ssh/sshd_config
GatewayPorts yes
? 這樣可以把監(jiān)聽(tīng)的端口綁定到任意 IP 0.0.0.0 上喇肋,否則只有本機(jī) 127.0.0.1 可以訪問(wèn)。
? 重啟 sshd 服務(wù)
sudo service sshd restart
第二步:安裝 AutoSSH 服務(wù)
在內(nèi)網(wǎng)主機(jī) A 上蜕青,執(zhí)行以下命令安裝 AutoSSH
yum install autossh
第三步:斷線免密登錄自動(dòng)重連
? ssh 反向鏈接會(huì)因?yàn)槌瑫r(shí)而關(guān)閉苟蹈,如果關(guān)閉了那從外網(wǎng)連通內(nèi)網(wǎng)的通道就無(wú)法維持,為此我們需要結(jié)合免密碼登錄及 AutoSSH 來(lái)提供穩(wěn)定的 ssh 反向代理隧道右核。
? 1慧脱、在內(nèi)網(wǎng)主機(jī) A 上產(chǎn)生公鑰和私鑰
ssh-keygen
然后按三次回車執(zhí)行默認(rèn)選項(xiàng)生成公鑰和私鑰。會(huì)生成密鑰文件和私鑰文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub
? 2贺喝、拷貝秘鑰
?? 在內(nèi)網(wǎng)主機(jī) A 上繼續(xù)執(zhí)行如下命令菱鸥,將內(nèi)網(wǎng)主機(jī) A 上的秘鑰文件 copy 到公網(wǎng)主機(jī) B 中宗兼。
ssh-copy-id username@ip
其中“username”是公網(wǎng)主機(jī) B 的用戶名,ip 為公網(wǎng)主機(jī) B 的 ip氮采,然后按照提示輸入公網(wǎng)主機(jī) B 的密碼就完成了殷绍。
第四步:利用 AutoSSH 實(shí)現(xiàn)端口轉(zhuǎn)發(fā)
在內(nèi)網(wǎng)主機(jī) A 上,利用 AutoSSH 建立一條 SSH 隧道
autossh -M 4010 -NR 80:localhost:4000 username@xxx.xxx.xxx.xxx (-p xxxx)
? 參數(shù)解釋:
- “-M 4010”意思是使用內(nèi)網(wǎng)主機(jī) A 的 4010 端口監(jiān)視 SSH 連接狀態(tài)鹊漠,連接出問(wèn)題了會(huì)自動(dòng)重連
- “ -N”意思是不執(zhí)行遠(yuǎn)程命令
- “-R”意思是將遠(yuǎn)程主機(jī)(公網(wǎng)主機(jī) B)的某個(gè)端口轉(zhuǎn)發(fā)到本地指定機(jī)器的指定端口
? 代碼解釋:
“80:localhost:4000”意思是將內(nèi)網(wǎng)主機(jī) A 的 4000 號(hào)端口轉(zhuǎn)發(fā)至公網(wǎng)主機(jī) B 的 80 號(hào)端口上
“username@xxx.xxx.xxx.xxx”意思是公網(wǎng)主機(jī) B 的用戶名和 IP
“-p xxxx”意思是公網(wǎng)主機(jī) B 的 SSH 端口主到,如果是默認(rèn)的 22 號(hào)端口,則可以不輸入.
第五步:監(jiān)聽(tīng)端口檢查
? 分別檢查本地主機(jī) A 及公網(wǎng)主機(jī) B 的端口監(jiān)聽(tīng)情況躯概,出現(xiàn)如下進(jìn)程則為正常登钥。
? 本地主機(jī) A:
[root@localhost ~]# lsof -i:4010
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 6710 lixl 5u IPv6 0x15699cecfe8a4995 0t0 TCP localhost:altserviceboot (LISTEN)
autossh 46984 lixl 3u IPv4 0x15699cece41d5e95 0t0 TCP localhost:altserviceboot (LISTEN)
? 遠(yuǎn)程主機(jī) B:
[root@localhost ~]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 9762 root 10u IPv4 473994 0t0 TCP *:webcache (LISTEN)
sshd 9762 root 11u IPv6 473995 0t0 TCP *:webcache (LISTEN)
第六步:開(kāi)啟自啟動(dòng)
? 配置 AutoSSH 開(kāi)機(jī)自啟動(dòng),輸入:
vi /etc/rc.d/rc.local
? 添加內(nèi)容:
autossh -M 4010 -fCNR 80:localhost:4000 username@xxx.xxx.xxx.xxx (-p xxxx)
chmod +x /etc/rc.d/rc.local
? centos7 之后娶靡,修改/etc/rc.d/rc.local 啟動(dòng)腳本需要重新賦予可執(zhí)行權(quán)限牧牢。
? 至此完成了端口轉(zhuǎn)發(fā),在相應(yīng)的應(yīng)用(如瀏覽器)中輸入公網(wǎng)服務(wù)器 B 的 IP+端口即相當(dāng)于直接訪問(wèn)內(nèi)網(wǎng)主機(jī) A 的相應(yīng)服務(wù)姿锭,大功告成塔鳍!
常見(jiàn)問(wèn)題
- 配置完通過(guò)外網(wǎng) IP 加端口無(wú)法訪問(wèn): 請(qǐng)檢查公網(wǎng)服務(wù)器防火墻是否開(kāi)放響應(yīng)端口。
- 本地服務(wù)重啟后呻此,通過(guò)外部端口無(wú)法訪問(wèn):這種情況是由于沒(méi)有檢測(cè)到通道之前已經(jīng)斷開(kāi)轮纫,AutoSSH 應(yīng)該有類似的機(jī)制,還沒(méi)有仔細(xì)研究焚鲜。