用 SSH 反向隧道穿透內網:打工仔必學嘅遠端存取技巧

# 用 SSH 反向隧道穿透內網:打工仔必學嘅遠端存取技巧 做 IT 嘅你一定遇過呢種情況:部測試機擺喺公司內網,冇 public IP,但老闆喺出面開會要你即刻連返去攞個 file,或者 debug 緊部 server 但人已經收咗工返到屋企。呢個時候,SSH 反向隧道(Reverse SSH Tunnel)就係你嘅救命稻草。 今日就用最口語化嘅方式,帶你一步步學識點樣用 SSH 反向隧道穿透內...

用 SSH 反向隧道穿透內網:打工仔必學嘅遠端存取技巧 - 文章重點速覽 infographic

# 用 SSH 反向隧道穿透內網:打工仔必學嘅遠端存取技巧

做 IT 嘅你一定遇過呢種情況:部測試機擺喺公司內網,冇 public IP,但老闆喺出面開會要你即刻連返去攞個 file,或者 debug 緊部 server 但人已經收咗工返到屋企。呢個時候,SSH 反向隧道(Reverse SSH Tunnel)就係你嘅救命稻草。

今日就用最口語化嘅方式,帶你一步步學識點樣用 SSH 反向隧道穿透內網,等你可以隨時隨地連返公司部機。

## SSH 反向隧道係咩一回事?

正常嘅 SSH 係「你主動連去伺服器」。但反向隧道啱啱相反:係「內網嗰部機主動連出嚟,然後喺外面建立一條通道俾你行入去」。

打個比喻:你間屋喺一條掘頭巷入面,外賣哥哥揾唔到門口。反向隧道就等於你(內網機)主動行出巷口,喺大街同外賣哥哥講「跟我嚟」,然後帶佢入你間屋。

呢個機制特別啱用喺:
– 公司內網機冇 public IP
– 防火牆只準出唔準入
– 想臨時 remote 入去 debug

## 事前準備

你要有一部有 public IP 嘅「中轉機」(VPS 都得),假設佢 IP 係 `203.0.113.10`,用户名係 `vpsuser`。內網嗰部機叫「內網機」。

先喺內網機裝好 SSH,確認可以用 key 登入中轉機:

ssh-keygen -t ed25519 -C "internal-host"
ssh-copy-id vpsuser@203.0.113.10

## Step 1:內網機建立反向隧道

喺內網機執行以下指令:

ssh -N -R 2222:localhost:22 vpsuser@203.0.113.10

拆解嚇每個參數:
– `-N`:唔執行遠端指令,淨係建立隧道
– `-R 2222:localhost:22`:喺中轉機開一個 port 2222,任何連去呢個 port 嘅流量都會被「反向」轉返去內網機嘅 port 22(即係內網機自己嘅 SSH)
– 最後係中轉機嘅登入資料

執行完之後,指令會停喺嗰度唔鬱,呢個係正常嘅——佢喺度維持住條隧道。

## Step 2:喺中轉機驗證隧道

開另一個 terminal,SSH 入去中轉機,然後試嚇經隧道連返內網機:

ssh -p 2222 internaluser@localhost

如果成功,恭喜你!你已經通過中轉機,經反向隧道連返去內網機啦。

## Step 3:出面嗰部機點樣用條隧道?

你而家喺屋企(出面),想連去內網機。最簡單做法係行「兩段跳」:

# 先連去中轉機,再喺中轉機入面連去 localhost:2222
ssh -t vpsuser@203.0.113.10 ssh -p 2222 internaluser@localhost

如果想一條指令搞掂,可以喺出面嗰部機嘅 `~/.ssh/config` 加:

Host internal-via-vps
    HostName 203.0.113.10
    User vpsuser
    ProxyCommand ssh vpsuser@203.0.113.10 -W localhost:2222

之後直接 `ssh internal-via-vps` 就入到去。

## 進階:令隧道斷線自動重連

反向隧道最大嘅問題係斷線。如果內網機 reboot 或者網絡中斷,條隧道就冇咗。用 `autossh` 可以自動重連:

autossh -M 0 -N -R 2222:localhost:22 vpsuser@203.0.113.10

配合 systemd service 開機自動啟動:

sudo tee /etc/systemd/system/reverse-tunnel.service <<EOF
[Unit]
Description=SSH Reverse Tunnel
After=network.target

[Service]
ExecStart=/usr/bin/autossh -M 0 -N -R 2222:localhost:22 vpsuser@203.0.113.10
Restart=always
User=internaluser

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable --now reverse-tunnel

咁樣就算部機 reboot,條隧道都會自動起返。

## 安全注意事項

反向隧道雖然方便,但一定要小心:
– **用 key 認證,唔好用密碼**——密碼容易被暴力破解
– 中轉機個 port 2222 盡量用 firewall 只開放俾你指定嘅 IP
– 定期 review 有邊啲隧道仲開住,唔用就 kill 咗佢

## 總結

SSH 反向隧道係一個輕量、免費、唔使裝額外軟件嘅內網穿透方案。掌握咗呢招,以後遇到「內網機冇 public IP」嘅情況,你都識得點樣建立一條安全嘅通道連返入去。

🔗 參考資料:NVD NIST 漏洞資料庫

記住核心概念:**內網機主動連出嚟,你喺外面經中轉機行返入去**。搞掂呢個邏輯,其他變體都係換湯唔換藥。