在昨天 Day16-回到夢開始的地方(暫時的) 我們提到 SSH Local port Forwarding(下簡稱local forwarding)。今天我們就來試試 SSH Remote port Forwarding(下簡稱remote forwarding)。
昨天我們在本地端電腦上使用 local forwarding 的指令去得到 http://localhost:8000
,但如果在本地端使用 remote forwarding 的指令則會剛好相反,Remote forwarding 會在本地端開一個埠(port) 然後讓其他人可以到對應的伺服器上去存取你本地端的服務。畫成圖的話會長這樣(我們在本地端有一個服務在 localhost:8000,然後在本地端使用指令 ssh -R 9000:127.0.0.1:8000 <user>@<remote-server-ip>
讓其他人可以透過伺服器來看到本地端的服務)
那有沒有辦法把這件事稍微變動一下,讓我外網的設備可以連回內網?
有的兄弟有的,只需要一個有外網 IP 的 SSH 伺服器,先上拓譜圖
我們可以把今天要實現的結果之拓譜圖簡化一下,如下
然後我們就可以去在設備上執行指令來實現
我們最終的目的是讓外網設備(我在外面的電腦)透過有外網 IP 的 SSH 伺服器連回內網設備 Ubuntu2(10.250.250.199),但是我們不在 Ubuntu2 上動手,而是在 Ubuntu1(10.250.250.200) 上下指令。
具體我們在 Ubuntu1 上用指令 ssh -NR 1234:10.250.250.199:22 <user>@<remote-server-ip>
打通 SSH 連線。
其中參數
-N
不會開啟遠端的 shell1234
這個埠號可以隨便設定10.250.250.199:22
為內網 ssh 服務,當然如果只要存取 Ubuntu1 的話則可以換成 10.250.250.200
,設定的重點就是要為內網的 IP然後連線到有外網 IP 的 SSH 伺服器,然後使用指令連線 ssh ubuntu@localhost -p 1234
其中參數
-p
後面的埠號要跟在內網打指令的一樣這樣就可以成功連線了,最後結果應該會長這樣
參考資料:
SSH Tunneling (Port Forwarding) 詳解
特別感謝 chess 學長的解惑