偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

通過SSH實現(xiàn)TCP/IP隧道(端口轉發(fā)):使用OpenSSH可能的8種場景

運維 系統(tǒng)運維
本文介紹一個如何使用 OpenSSH 來完成 TCP 端口轉發(fā)的速查表,其中包含了八種常見的場景。有些 SSH 客戶端,比如 PuTTY,也允許通過界面配置的方式來實現(xiàn)端口轉發(fā)。而我們著重關注的是通過 OpenSSH 來實現(xiàn)的的方式。

[[205773]]

對于 Secure Shell (SSH) 這樣的網(wǎng)絡協(xié)議來說,其主要職責就是在終端模式下訪問一個遠程系統(tǒng)。因為 SSH 協(xié)議對傳輸數(shù)據(jù)進行了加密,所以通過它在遠端系統(tǒng)執(zhí)行命令是安全的。此外,我們還可以在這種加密后的連接上通過創(chuàng)建隧道(端口轉發(fā))的方式,來實現(xiàn)兩個不同終端間的互聯(lián)。憑借這種方式,只要我們能通過 SSH 創(chuàng)建連接,就可以繞開防火墻或者端口禁用的限制。

這個話題在網(wǎng)絡領域有大量的應用和討論:

我們在接下來的內(nèi)容中并不討論端口轉發(fā)的細節(jié),而是準備介紹一個如何使用 OpenSSH 來完成 TCP 端口轉發(fā)的速查表,其中包含了八種常見的場景。有些 SSH 客戶端,比如 PuTTY,也允許通過界面配置的方式來實現(xiàn)端口轉發(fā)。而我們著重關注的是通過 OpenSSH 來實現(xiàn)的的方式。

在下面的例子當中,我們假設環(huán)境中的網(wǎng)絡劃分為外部網(wǎng)絡(network1)和內(nèi)部網(wǎng)絡(network2)兩部分,并且這兩個網(wǎng)絡之間,只能在 externo1 與 interno1 之間通過 SSH 連接的方式來互相訪問。外部網(wǎng)絡的節(jié)點之間和內(nèi)部網(wǎng)絡的節(jié)點之間是完全聯(lián)通的。

 

SSH tunnels: no tunnel

場景 1

在 externo1 節(jié)點訪問由 interno1 節(jié)點提供的 TCP 服務(本地端口轉發(fā) / 綁定地址 = localhost / 主機 = localhost )

externo1 節(jié)點可以通過 OpenSSH 連接到 interno1 節(jié)點,之后我們想通過其訪問運行在 5900 端口上的 VNC 服務。

 

 

SSH Tunnels: Scenario 1

我們可以通過下面的命令來實現(xiàn):

  1. externo1 $ ssh -L 7900:localhost:5900 user@interno1 

現(xiàn)在,我們可以在 externo1 節(jié)點上確認下 7900 端口是否處于監(jiān)聽狀態(tài)中:

  1. externo1 $ netstat -ltn 
  2. Active Internet connections  (only servers) 
  3. Proto Recv-Q  Send-Q  Local Address Foreign Address State       
  4. ... 
  5. Tcp  0  0  127.0.0.1:7900  0.0.0.0:*  LISTEN   
  6. ... 

我們只需要在 externo1 節(jié)點上執(zhí)行如下命令即可訪問 internal 節(jié)點的 VNC 服務:

  1. externo1 $ vncviewer localhost::7900 

注意:在 vncviewer 的 man 手冊中并未提及這種修改端口號的方式。在 About VNCViewer configuration of the output TCP port 中可以看到。這也是 the TightVNC vncviewer 所介紹的的。

場景 2

在 externo2 節(jié)點上訪問由 interno1 節(jié)點提供的 TCP 服務(本地端口轉發(fā) / 綁定地址 = 0.0.0.0 / 主機 = localhost)

這次的場景跟方案 1 的場景的類似,但是我們這次想從 externo2 節(jié)點來連接到 interno1 上的 VNC 服務: 

 

 

SSH Tunnels: Scenario 2

正確的命令如下:

  1. externo1 $ ssh -L 0.0.0.0:7900:localhost:5900 user@interno1 

看起來跟方案 1 中的命令類似,但是讓我們看看 netstat 命令的輸出上的區(qū)別。7900 端口被綁定到了本地(127.0.0.1),所以只有本地進程可以訪問。這次我們將端口關聯(lián)到了 0.0.0.0,所以系統(tǒng)允許任何 IP 地址的機器訪問 7900 這個端口。

  1. externo1 $ netstat -ltn 
  2. Active Internet connections  (only servers) 
  3. Proto Recv-Q  Send-Q  Local Address Foreign Address State       
  4. ... 
  5. Tcp  0  0  0.0.0.0:7900  0.0.0.0:*  LISTEN 
  6. ...  

所以現(xiàn)在在 externo2 節(jié)點上,我們可以執(zhí)行:

  1. externo2 $ vncviewer externo1::7900 

來連接到 interno1 節(jié)點上的 VNC 服務。

除了將 IP 指定為 0.0.0.0 之外,我們還可以使用參數(shù) -g(允許遠程機器使用本地端口轉發(fā)),完整命令如下:

  1. externo1 $ ssh -g -L 7900:localhost:5900 user@interno1 

這條命令與前面的命令能實現(xiàn)相同效果:

  1. externo1 $ ssh -L 0.0.0.0:7900:localhost:5900 user@interno1 

換句話說,如果我們想限制只能連接到系統(tǒng)上的某個 IP,可以像下面這樣定義:

  1. externo1 $ ssh -L 192.168.24.80:7900:localhost:5900 user@interno1 
  2. externo1 $ netstat -ltn 
  3. Active Internet connections (only servers) 
  4. Proto Recv-Q Send-Q Local Address Foreign Address State       
  5. ...   
  6. Tcp 0 0 192.168.24.80:7900 0.0.0.0:* LISTEN 
  7. ... 

場景 3

在 interno1 上訪問由 externo1 提供的 TCP 服務(遠程端口轉發(fā) / 綁定地址 = localhost / 主機 = localhost)

在場景 1 中 SSH 服務器與 TCP 服務(VNC)提供者在同一個節(jié)點上?,F(xiàn)在我們想在 SSH 客戶端所在的節(jié)點上,提供一個 TCP 服務(VNC)供 SSH 服務端來訪問: 

 

 

SSH Tunnels: Scenario 3

將方案 1 中的命令參數(shù)由 -L 替換為 -R。

完整命令如下:

  1. externo1 $ ssh -R 7900:localhost:5900 user@interno1 

然后我們就能看到 interno1 節(jié)點上對 7900 端口正在監(jiān)聽:

  1. interno1 $ netstat -lnt 
  2. Active Internet connections (only servers) 
  3. Proto Recv-Q Send-Q Local Address Foreign Address State       
  4. ...   
  5. Tcp 0 0 127.0.0.1:7900 0.0.0.0:* LISTEN 
  6. ... 

現(xiàn)在在 interno1 節(jié)點上,我們可以使用如下命令來訪問 externo1 上的 VNC 服務:

  1. interno1 $ vncviewer localhost::7900 

場景 4

interno2 使用 externo1 上提供的 TCP 服務(遠端端口轉發(fā) / 綁定地址 = 0.0.0.0 / 主機 = localhost)

與場景 3 類似,但是現(xiàn)在我們嘗試指定允許訪問轉發(fā)端口的 IP(就像場景 2 中做的一樣)為 0.0.0.0,這樣其他節(jié)點也可以訪問 VNC 服務: 

 

 

SSH Tunnels: Scenario 4

正確的命令是:

  1. externo1 $ ssh -R 0.0.0.0:7900:localhost:5900 user@interno1 

但是這里有個重點需要了解,出于安全的原因,如果我們直接執(zhí)行該命令的話可能不會生效,因為我們需要修改 SSH 服務端的一個參數(shù)值 GatewayPorts,它的默認值是:no。

GatewayPorts

該參數(shù)指定了遠程主機是否允許客戶端訪問轉發(fā)端口。默認情況下,sshd(8) 只允許本機進程訪問轉發(fā)端口。這是為了阻止其他主機連接到該轉發(fā)端口。GatewayPorts 參數(shù)可用于讓 sshd 允許遠程轉發(fā)端口綁定到非回環(huán)地址上,從而可以讓遠程主機訪問。當參數(shù)值設置為 “no” 的時候只有本機可以訪問轉發(fā)端口;“yes” 則表示允許遠程轉發(fā)端口綁定到通配地址上;或者設置為 “clientspecified” 則表示由客戶端來選擇哪些主機地址允許訪問轉發(fā)端口。默認值是 “no”。

如果我們沒有修改服務器配置的權限,我們將不能使用該方案來進行端口轉發(fā)。這是因為如果沒有其他的限制,用戶可以開啟一個端口(> 1024)來監(jiān)聽來自外部的請求并轉發(fā)到 localhost:7900。

參照這個案例:netcat ( Debian # 310431: sshd_config should warn about the GatewayPorts workaround. )

所以我們修改 /etc/ssh/sshd_config,添加如下內(nèi)容:

  1. GatewayPorts clientspecified 

然后,我們使用如下命令來重載修改后的配置文件(在 Debian 和 Ubuntu 上)。

  1. sudo /etc/init.d/ssh reload 

我們確認一下現(xiàn)在 interno1 節(jié)點上存在 7900 端口的監(jiān)聽程序,監(jiān)聽來自不同 IP 的請求:

  1. interno1 $ netstat -ltn 
  2. Active Internet connections (only servers) 
  3. Proto Recv-Q Send-Q Local Address Foreign Address State       
  4. ...     
  5. Tcp 0 0 0.0.0.0:7900 0.0.0.0:* LISTEN 
  6. ... 

然后我們就可以在 interno2 節(jié)點上使用 VNC 服務了:

  1. interno2 $ internal vncviewer1::7900 

場景 5

在 externo1 上使用由 interno2 提供的 TCP 服務(本地端口轉發(fā) / 綁定地址 localhost / 主機 = interno2 )

 

SSH Tunnels: Scenario 5

在這種場景下我們使用如下命令:

  1. externo1 $ ssh -L 7900:interno2:5900 user@interno1 

然后我們就能在 externo1 節(jié)點上,通過執(zhí)行如下命令來使用 VNC 服務了:

  1. externo1 $ vncviewer localhost::7900 

場景 6

在 interno1 上使用由 externo2 提供的 TCP 服務(遠程端口轉發(fā) / 綁定地址 = localhost / host = externo2)

 

SSH Tunnels: Scenario 6

在這種場景下,我們使用如下命令:

  1. externo1 $ ssh -R 7900:externo2:5900 user@interno1 

然后我們可以在 interno1 上通過執(zhí)行如下命令來訪問 VNC 服務:

  1. interno1 $ vncviewer localhost::7900 

場景7

在 externo2 上使用由 interno2 提供的 TCP 服務(本地端口轉發(fā) / 綁定地址 = 0.0.0.0 / 主機 = interno2)

 

SSH Tunnels: Scenario 7

本場景下,我們使用如下命令:

  1. externo1 $ ssh -L 0.0.0.0:7900:interno2:5900 user@interno1 

或者:

  1. externo1 $ ssh -g -L 7900:interno2:5900 user@interno1 

然后我們就可以在 externo2 上執(zhí)行如下命令來訪問 vnc 服務:

  1. externo2 $ vncviewer externo1::7900 

場景 8

在 interno2 上使用由 externo2 提供的 TCP 服務(遠程端口轉發(fā) / 綁定地址 = 0.0.0.0 / 主機 = externo2)

 

SSH Tunnels: Scenario 8

本場景下我們使用如下命令:

  1. externo1 $ ssh -R 0.0.0.0:7900:externo2:5900 user@interno1 

SSH 服務器需要配置為:

  1. GatewayPorts clientspecified 

就像我們在場景 4 中講過的那樣。

然后我們可以在 interno2 節(jié)點上執(zhí)行如下命令來訪問 VNC 服務:

  1. interno2 $ internal vncviewer1::7900 

如果我們需要一次性的創(chuàng)建多個隧道,使用配置文件的方式替代一個可能很長的命令是一個更好的選擇。假設我們只能通過 SSH 的方式訪問某個特定網(wǎng)絡,同時又需要創(chuàng)建多個隧道來訪問該網(wǎng)絡內(nèi)不同服務器上的服務,比如 VNC 或者 遠程桌面。此時只需要創(chuàng)建一個如下的配置文件 $HOME/redirects 即可(在 SOCKS 服務器 上)。

  1. # SOCKS server 
  2. DynamicForward 1080 
  3. # SSH redirects 
  4. LocalForward 2221 serverlinux1: 22 
  5. LocalForward 2222 serverlinux2: 22 
  6. LocalForward 2223 172.16.23.45:22 
  7. LocalForward 2224 172.16.23.48:22 
  8. # RDP redirects for Windows systems 
  9. LocalForward 3391 serverwindows1: 3389 
  10. LocalForward 3392 serverwindows2: 3389 
  11. # VNC redirects for systems with "vncserver" 
  12. LocalForward 5902 serverlinux1: 5901 
  13. LocalForward 5903 172.16.23.45:5901 

然后我們只需要執(zhí)行如下命令:

  1. externo1 $ ssh -F $HOME/redirects user@interno1  
責任編輯:龐桂玉 來源: Linux中國
相關推薦

2013-04-22 10:07:08

2019-10-29 16:30:10

FedoraSSH端口Linux

2017-03-23 12:38:49

2024-01-09 12:05:24

SSH協(xié)議端口

2023-10-26 14:23:26

2011-03-16 09:53:25

2023-09-13 12:34:23

2014-10-13 09:22:39

TCPIPwireshark

2011-03-16 12:55:00

iptables 端口

2011-03-17 14:26:45

iptables 端口

2022-11-10 07:41:00

sshLinux

2019-07-04 15:13:42

端口WANLAN

2019-07-22 14:50:08

數(shù)據(jù)庫SQL索引

2010-07-01 16:38:18

Linux TCP I

2022-12-01 17:23:45

2015-05-22 08:59:38

2018-06-12 10:12:12

2012-10-23 09:32:07

2022-03-31 10:42:04

端口轉發(fā)Linux

2013-06-27 14:41:40

TCP端口TCP
點贊
收藏

51CTO技術棧公眾號