iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
IT 管理

從零開始的網際網路隨筆系列 第 18

Day17-內網穿透的另外一種解法(SSH Remote port Forwarding)

  • 分享至 

  • xImage
  •  

在昨天 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> 讓其他人可以透過伺服器來看到本地端的服務)
remote forwarding

那有沒有辦法把這件事稍微變動一下,讓我外網的設備可以連回內網?

有的兄弟有的,只需要一個有外網 IP 的 SSH 伺服器,先上拓譜圖
topo
我們可以把今天要實現的結果之拓譜圖簡化一下,如下
topo2
然後我們就可以去在設備上執行指令來實現

我們最終的目的是讓外網設備(我在外面的電腦)透過有外網 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 不會開啟遠端的 shell
  • 1234 這個埠號可以隨便設定
  • 10.250.250.199:22 為內網 ssh 服務,當然如果只要存取 Ubuntu1 的話則可以換成 10.250.250.200,設定的重點就是要為內網的 IP

然後連線到有外網 IP 的 SSH 伺服器,然後使用指令連線 ssh ubuntu@localhost -p 1234
其中參數

  • -p 後面的埠號要跟在內網打指令的一樣

這樣就可以成功連線了,最後結果應該會長這樣
result

參考資料:
SSH Tunneling (Port Forwarding) 詳解
特別感謝 chess 學長的解惑


上一篇
Day16- 回到夢開始的地方(暫時的)
下一篇
Day18-填坑時間: CDN 和 反向代理是啥
系列文
從零開始的網際網路隨筆20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言