ssh隧道
ssh隧道:
#選項含義: -n 重定向stdin到/dev/null
-g 允許遠端主機連接本地轉發端口
-f 后臺運行,隱含-n選項(重定向stdin到/dev/null)
-q 安靜模式
-N 不執行命令
-T 不創建TTY
-L 本地轉發
-R 遠程轉發
-D 動態轉發,實現socks5代理的關鍵
# 注意:1-下面的所有命令在SSH客戶端上執行 2-如果ssh命令生成的隧道不夠穩定,可以考慮AutoSSH
# 本地轉發
ssh -gfq -NTL [SSH客戶端IP]:SSH客戶端主機新產生的監聽Port:目標服務端IP:目標服務端Port SSH服務端User@SSH服務端IP
#此時在SSH客戶端執行:netstat -tunlp 會發現新產生了一個Port監聽,客戶端可以訪問這個Port來實現訪問目標服務
#應用場景:有點像正向代理, 客戶端->SSH客戶端->【SSH服務端->目標服務端】 (此處SSH服務端和目標服務端可以是同一臺主機,如果是同一臺主機,則命令格式中的目標服務端IP:目標服務端Port的格式可以寫成127.0.0.1:目標服務端口號。這里把“SSH服務端和目標服務端之間的網絡”稱之為目標網絡。這種場景簡單說就是客戶端經由“SSH客戶端->SSH服務端”之間的隧道訪問目標網絡。或者說客戶端訪問SSH客戶端執行上述命令新產生的PORT監聽來訪問目標服務端Port代表的服務)
#遠程轉發
ssh -gfq -NTR [SSH服務端IP]:SSH服務端主機新產生的監聽Port:目標服務端IP:目標服務端Port SSHD服務端User@SSHD服務端IP
#此時在SSHD服務端執行: netstat -tunlp 會發現新產生了一個Port監聽,客戶端可以訪問這個Port監聽來訪問目標服務,默認監聽在回環接口,如果需要監聽其他接口,需要修改sshd_config的GatewayPorts
#應用場景:有點像反向代理, 客戶端->SSHD服務端->【SSH客戶端->目標服務端】 (此處SSH客戶端和目標服務端可以是同一臺主機,如果是同一臺主機,則命令格式中的目標服務端IP:目標服務端Port的格式可以寫成127.0.0.1:目標服務端口號,這里把“SSH客戶端和目標服務端之間的網絡”稱之為目標網絡。這種場景簡單說就是客戶端經由“SSH服務端<-SSH客戶端”之間的隧道訪問目標服務,或說客戶端訪問SSH服務端新產生的Port監聽來訪問目標服務端Port代表的服務)
#實際測試發現,如果想要SSH服務端新生成的端口監聽到0.0.0.0的話,需要修改sshd配置文件(/etc/ssh/sshd_config)中的GatewayPorts為yes才行。
#動態轉發
ssh -gfq -NTD [SSH客戶端IP]:SSH客戶端新產生的監聽Port SSH服務端User@SSH服務端IP
#應用場景: socks5正向代理。各種tcp/udp包可以通過"[SSH客戶端IP]:SSH客戶端新產生的監聽Port" 連接到遠程SSH服務端,SSH服務端相當于socks5代理服務器。SSH服務端再把客戶端發上來的各種各樣的“Addr:Port”的請求轉發出去
#注意:在win10中設置socks5代理時,在“設置->網絡和Internet->代理”設置的代理是http代理,如果想要設置socks5代理,需要在地址框中顯示填寫“socks=地址”
浙公網安備 33010602011771號