5 分鐘學懂 SSH 隧道技術
公眾號關注“傑哥的IT之旅”,
選擇“星標”,重磅乾貨,第一時間送達!
概述
本文將介紹一些關於 SSH 隧道技術的小技巧,並且給出一個網路拓撲圖更好地解釋在做的東西。
網路基礎
假設我的網路情況是這樣的一個簡化拓撲:
那麼這裡有幾種可能的操作,分別是:
從 Home PC 直接 SSH Office PC
從 Office PC SSH 到 Home PC 同理從 Home PC 直接 SSH 到 VPS
從 Office PC SSH 到 VPS 同理從 VPS SSH 到 Home(Office) PC
在這幾個場景中,最簡單實現的就是:從 Home PC SSH 到 VPS,這也是我們平時最常見的一個操作。只所以我們可以輕鬆地實現這個原理,是因為 VPS 擁有公網 IP,我們可以直接從 Home PC 中路由到 VPS,反之,因為我們得 Home PC 沒有公網 IP,所以 VPS 無法直接 SSH 到我們的 Home PC。
那麼這裡就會有同學有想法了,那麼我們的 Home PC 能不能有公網 IP,答案肯定是可以的,從上圖中可以看到,簡單來說,PC 和 VPS 的差異就在於 PC 還接了一次路由器,那麼如果直接將 PC 介入 ISP 網路中,是不是就可以擁有公網 IP 了。這個問題很複雜,答案是可能是,這依賴於你的 ISP 如果提供網路給你,在以前 ADSL 時代,基本上都是可以提供公網 IP 的,但是,隨著光纖的普及,即使你不使用路由器,你也不是直接介入 ISP 的骨幹網了,而是 ISP 的一個分線器,例如 FTTB 系列。所以,這裡設想讓 PC(路由器) 擁有公網 IP 的想法不具有通用性,加上即使有,ISP 可能也會限制一些埠,因此用的也不多。
SSH 隧道
所以,終於進入到本文的主題了,既然沒法直接連線到 PC,那麼可不可以反過來,讓 PC 自己主動來發起請求,這就是 SSH 隧道的原理了:
[[email protected]]# ssh -qngfNTR 9999:localhost:8888 root@192.168.29.48
命令列快速使用
[[email protected]]# cat ~/.ssh/config
Host jump
HostName 10.0.0.102
Port 22
User root
IdentityFile /root/.ssh/id_rsa
ForwardAgent yes
Host 10.0.0.87
HostName 10.0.0.87
ProxyJump jump
User zhangsan
首先需要確保可以直接登入跳板機:10.0.0.102;
10.0.0.87 是通過 10.0.0.102 這個跳板機訪問的;
Tips
反向隧道只監聽 localhost
[[email protected]]# cat /etc/ssh/sshd_config
GatewayPorts = yes
代理 UDP
反向代理
本地機器
[[email protected]]# yum install -y nc
[[email protected]]# mkfifo /tmp/fifo
[[email protected]]# nc -l -p 1162 < /tmp/fifo | nc -u localhost 1163 > /tmp/fifo
這裡的意思是說監聽機器上的 1162 埠發出來的資料,然後以 UDP 的形式將資料傳送給 localhost:1163。
遠端機器
[[email protected]]# mkfifo /tmp/fifo
[[email protected]]# nc -l -u -p 1163 < /tmp/fifo | nc localhost 1162 > /tmp/fifo
這裡的意思是在機器上監聽 1163 埠的 UDP 協議,然後將收到的 UDP 流量通過 TCP 鏈路 localhost:1162 傳送出去。
注意要點
必須先在本地執行完命令之後再去遠端伺服器執行,不然,伺服器這邊會因為沒有資料而導致無法正常執行;
在使用過程中我遇到了一個問題就是這種方式只能接收一次 UDP,第二次就無法接收成功了;
這是反向代理的例子,正向代理反過來即是;
參考文件
How to make a SSH tunnel publicly accessible?
Performing UDP tunneling through an SSH connection
How to use ansible openstack modules with a ssh socks proxy
SSH Tunneling Technology Guide
推薦閱讀
本文分享自微信公眾號 - 傑哥的IT之旅(Jake_Internet)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
- 又一個基於 GPT-4 編寫、解釋程式碼的工具,誕生了!
- 太強了!這款開源終端工具可查詢 IP 資訊 ...
- 視覺化大屏可真是太 beautiful 了!!!
- 再見 Xshell!這個開源的終端工具更酷炫!
- 10 款你不知道的 Linux 環境下的替代工具!
- Python爬蟲實戰 | 利用多執行緒爬取 LOL 高清桌布
- HTTPS 協議到底比 HTTP 協議多些什麼?
- 利用 Python 實現多工程序
- 利用 Python 分析了一波月餅,我得出的結論是?
- Docker 入門,萬字詳解!
- 超硬核!11 個非常實用的 Python 和 Shell 拿來就用指令碼例項!
- 用 Python 自動給抖音漂亮小姐姐視訊點贊!
- 挺帶勁,這款國人開源的監控系統真強大~
- 用Python頭像秒變成表情包
- Docker 常用命令,這些都要會!
- 5 分鐘學懂 SSH 隧道技術
- 【建議收藏】神器 Nginx 的學習手冊
- IT運維面試問題總結-LVS、Keepalived、HAProxy、Kubernetes、OpenShift等