Linux SSH隧道技術(端口轉發,socket代理)


動態轉發(SOCKS5代理):
命令格式:ssh -D <local port> <SSH Server>
ssh -fnND 0.0.0.0:20058 172.16.50.20  //f后台執行,必須配合n使用,N不打開遠程shell,D綁定本地20058端口
 
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數中,允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接。
 
修改配置文件 ~#vi /etc/ssh/sshd_config
在文件最后加入 gatewayports yes  
 
 
本地端口轉發:
有時,綁定本地端口還不夠,還必須指定數據傳送的目標主機,從而形成點對點的"端口轉發"。為了區別后文的"遠程端口轉發",我們把這種情況稱為"本地端口轉發"(Local forwarding)。
假定host1是本地主機,host2是遠程主機。由於種種原因,這兩台主機之間無法連通。但是,另外還有一台host3,可以同時連通前面兩台主機。因此,很自然的想法就是,通過host3,將host1連上host2。
我們在host1執行下面的命令:
      $ ssh -L 2121:host2:21 host3
命令中的L參數一共接受三個值,分別是"本地端口:目標主機:目標主機端口",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地端口 2121,然后指定host3將所有的數據,轉發到目標主機host2的21端口(假定host2運行FTP,默認端口為21)。
這樣一來,我們只要連接host1的2121端口,就等於連上了host2的21端口。
      $ ftp localhost:2121
"本地端口轉發"使得host1和host3之間仿佛形成一個數據傳輸的秘密隧道,因此又被稱為"SSH隧道"。
 
 
遠程端口轉發:
既然"本地端口轉發"是指綁定本地端口的轉發,那么"遠程端口轉發"(remote forwarding)當然是指綁定遠程端口的轉發。
還是接着看上面那個例子,host1與host2之間無法連通,必須借助host3轉發。但是,特殊情況出現了,host3是一台內網機器,它可以連接外網的host1,但是反過來外網的host1連不上內網的host3。這時,"本地端口轉發"就不能用了,怎么辦?
解決辦法是,既然host3可以連host1,那么就從host3上建立與host1的SSH連接,然后在host1上使用這條連接就可以了。
我們在host3執行下面的命令:
      $ ssh -R 2121:host2:21 host1
R參數也是接受三個值,分別是"遠程主機端口:目標主機:目標主機端口"。這條命令的意思,就是讓host1監聽它自己的2121端口,然后將所有 數據經由host3,轉發到host2的21端口。由於對於host3來說,host1是遠程主機,所以這種情況就被稱為"遠程端口綁定"。
綁定之后,我們在host1就可以連接host2了:
      $ ftp localhost:2121
這里必須指出,"遠程端口轉發"的前提條件是,host1和host3兩台主機都有sshd服務器和ssh客戶端。
 
host1(172.16.2.164),host3(172.16.50.20),host2(192.168.1.130)
host1和host3互通,host1無法訪問host2,host3可以訪問host2
現在host1需要訪問host2的80端口,那么可以在host1上運行ssh -fnNL 5900:192.168.1.130:80 172.16.50.20
或者在host3上運行ssh -fnNR 5900:192.168.1.130:80 172.16.2.164即可

 

linux terminal 環境變量

HTTP_PROXY=http://172.16.50.20:20058

HTTPS_PROXY=http://172.16.50.20:20058


免責聲明!

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



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