1. 程式人生 > >ECS太貴,如何家裡機器上的網站釋出到公網?

ECS太貴,如何家裡機器上的網站釋出到公網?

實現部署需要的環境如下:

  1. 家裡機器(win10)通過路由nat上網,沒有可用的公網IP,簡稱機器A1
  2. 配置內網機器通過私鑰登陸訪問香港地區的ECS,例如win10機器上安裝hyper-v虛擬機器,虛擬出一臺linux主機,上面部署了nginx服務,埠是8080,簡稱機器A2
  3. 申請一個阿里雲非大陸地區的ECS(CentOS7.4),例如一個香港地區的ECS,帶有公網IP,假設該機器的ssh埠是1234,主要是香港地區可以不用備案,簡稱機器B
  4. 申請一個公網域名,指向香港地區的ECS的公網IP
  5. 可以使用autossh或ssh來實現

一、把A1機器,win10作業系統的遠端桌面功能釋出到公網,這樣就可以在公司訪問你家裡的機器了

  • 在A1機器上執行: 實際使用時,可以使用如下的具有斷線重連功能的指令碼,儲存為autossh.bat即可
@echo off
echo ******
:LOOP
echo [%date% %time%] ssh is running...
ssh -NR 33890:localhost:3389 [email protected]【B伺服器IP】 -p 1234
timeout 60 > NUL
goto LOOP
echo [%date% %time%] remote ssh connection exited ...

ssh相關使用方法說明如下:

ssh -fCNR [B機器IP或省略]:[B機器埠]:[A機器的IP]:[A機器埠] [登陸B機器的使用者名稱@B伺服器IP] -p [B機器自定義的ssh埠]
win10企業版自帶ssh,可以在cmd中執行`ssh-keygen -t rsa`生成私鑰目錄,一般是"C:\Users\【當前登陸使用者】\.ssh",把私鑰放入這個目錄即可
  • 在B機器上執行: 需要檢查B機器的sshd_config的下面三項配置
cat /etc/ssh/sshd_config
GatewayPorts yes
ClientAliveInterval 60
ClientAliveCountMax 3

最後通過訪問B機器的33890埠就可以訪問到A1機器的3389埠

二、把A2機器,CentOS7.4作業系統上的nginx服務釋出到公網,這樣大家就可以在公網訪問你的個人網站了

  • 在A2機器上執行:
yum -y install autossh
autossh -M 5555 -fCNR *:8080:localhost:80 [email protected]【B伺服器IP】 -p 1234

autossh相關使用方法說明如下:

autossh -M [自定義的監控埠] -fCNR [B機器IP或省略]:[B機器埠]:[A機器的IP]:[A機器埠] [登陸B機器的使用者名稱@伺服器IP] -p [B機器自定義的ssh埠]
  • 在B機器上執行: 需要檢查B機器的sshd_config的下面三項配置
cat /etc/ssh/sshd_config
GatewayPorts yes
ClientAliveInterval 60
ClientAliveCountMax 3

最後通過訪問B機器的8080埠就可以訪問到A2機器的80埠

TIPS:部署中使用的ssh和autossh的相關引數的說明

介紹一下使用到的ssh引數,autossh也有一下命令,只是autossh有斷線自動重連功能
反向代理:ssh -fCNR
正向代理:ssh -fCNL

-f 後臺執行ssh指令
-C 允許壓縮資料
-N 不執行遠端指令
-R 將遠端主機(伺服器)的某個埠轉發到本地端指定機器的指定埠
-L 將本地機(客戶機)的某個埠轉發到遠端指定機器的指定埠
-p 指定遠端主機的埠

參考:https://www.cnblogs.com/kwongtai/p/6903420.html