SSH端口轉發 (Port Forwarding) 的個人理解


2020/8/18 15:06:55

工作原因,會用到SSH登陸以及端口轉發 (Port Forwarding) 的配置,對這個原理上如果不清楚的話,出現問題就不知道如何下手排查故障。咱也不是科班出身,對於這個問題,也只能從網上搜索答案,然后嘗試自己理解。目前來看這個理解在邏輯上是通的,先記下來。

我用的SSH客戶端是KiTTY,在這個軟件上,端口轉發叫做隧道 (Tunnels)。這個叫法很形象,配置兩邊的端口(一邊是Local Port或者叫Source Port;另外一邊是Remote IP:Remote Port,或者叫Destination)就像隧道的兩頭,連接起了本端 (Local) 和遠端 (Remote) 兩頭。

SSH Port forwarding example:

Remark Local port Remote IP Remote port
Local machine (RDP) 1110 222.222.222.222 3389
Local machine (SSH, SFTP) 1111 222.222.222.222 22
web Application Launcher 10000 -- Dynamic

最常見的是遠程桌面連接 (Remote Desktop Protocol, RDP) 以及SFTP的Port Forwarding。兩端防火牆設置允許,權限開通,網絡聯通,登陸已經配置好Port Forwarding的主SSH會話 (Session),對本地端口的操作就全部轉發至遠端,且接受遠端的數據,通訊建立。

其實真正促使我寫這篇筆記的是剛開始讓我撓頭不已,一頭霧水的SOCKS轉發,在KiTTY中叫做動態轉發 (Dynamic)。在網上查了一下(https://blog.csdn.net/English0523/article/details/79461430)才大概理解了,這個動態轉發,在本端的瀏覽器上配置好SOCKS代理 (Proxy) 規則,比如用FireFox自帶的代理 (Proxy) 設置,或者Chrome結合代理插件SwitchyOmega,瀏覽器主動請求應用SOCKS Host(也就是中間代理),結合上表中的例子來說,瀏覽器訪問一個地址時(可以是類似Bing.com這樣的URL,也可以是222.222.222.222這樣的IP地址),瀏覽器通過本地的10000端口發送數據,這些數據就像隧道里的水流一樣,從本地10000端口流入,從哪里流出呢(這是我之前最迷惑的地方)?流出的地方取決於瀏覽器的目標地址,如果填入的是URL,則通過系統hosts文件解析或DNS解析目標地址(這就是叫做動態的原因吧)(另外對於DNS解析請求,還有這么一個知識點:盡管訪問網頁的流量被加密轉發了,並且對於目標服務器來說訪問源IP改變了,但是DNS查詢的時候記錄的仍然是你本身所在的網絡,並沒有做到完全的保密。這種情況也是有解決方案的。打開Firefox瀏覽器,地址欄中輸入about:config進入瀏覽器的內部設置,在使用該配置的時候要非常的謹慎,配置不當可能會使瀏覽器無法正常使用。在彈出的告警對話框中點擊”我了解此風險!”進入下一個頁面。在頂部的搜索欄中輸入”network.proxy.socks_remote_dns”,然后雙擊該配置項,配置就發生了變化,狀態由默認變成了已修改,值由false(默認值)變成了true。配置生效后,Firefox就會使用代理轉發DNS請求而不是在本地解析。);如果填入的是IP地址,也同樣通過SOCKS Host(也就是中間代理)和遠端進行通訊。通俗(可能不太准確)的理解就是這種由SOCKS中間代理替代本端和遠端直接通訊可以實現身份鑒權和安全管理的需求,就好比說,一個無名小輩想拜會大佬,直接去拜會的話,大佬是不認識你也不屑理你的,得找說得上話的有身份的中間人,大佬認識中間人,原意和中間人說話,然后中間人再通過轉述把你的話轉告大佬,同時把大佬的話轉告給你。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM