關于想要了解linux端口映射的知識,其實很簡單。那么現在我們那就一起來看看這其中的奧秘吧!
01
ssh -C -g root@127.0.0.1 -L 5000:61.235.139.123:5000
02
03
#輸入機器的root密碼
04
05
#后臺執行:
06
ssh -C -f -N -g root@127.0.0.1 -L 5000:61.235.139.123:5000
07
08
#另:
09
10
ssh -C -f -N -g -R remote_port:local:port user@remotehost
可以將遠端服務器一個端口remote_port綁定到本地端口port,其中-C是進行數據壓縮,-f是后臺操作,只有當提示用戶名密碼的時候才轉向前 臺。-N是不執行遠端命令,在只是端口轉發時這條命令很有用處。-g 是允許遠端主機連接本地轉發端口。-R表明是將遠端主機端口映射到本地端口。如果是-L,則是將本地端口映射到遠端主機端口。
ssh的三個強大的端口轉發命令:
1
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
2
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
3
ssh -C -f -N -g -D listen_portuser@Tunnel_Host
-f Fork into background after authentication.
后臺認證用戶/密碼,通常和-N連用,不用登錄到遠程主機。
-p port Connect to this port. Server must be on the same port.
被登錄的ssd服務器的sshd服務端口。
-L port:host:hostport
將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-R port:host:hostport
將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工作原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉發. 只有用 root 登錄遠程主機才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-D port
指定一個本地機器 “動態的'’ 應用程序端口轉發. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 根據應用程序的協議可以判斷出遠程主機將和哪里連接. 目前支持 SOCKS4 協議, 將充當 SOCKS4 服務器. 只有 root 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.
-C Enable compression.
壓縮數據傳輸。
-N Do not execute a shell or command.
不執行腳本或命令,通常與-f連用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數中,允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接。注:這個參數我在實踐中似乎始終不起作用,參見III)
iptables實現端口轉發的過程
設我們有一臺計算機,有兩塊網卡,eth0連外網,ip為1.2.3.4;eth1連內網,ip為192.168.0.1.現在需要把發往地址1.2.3.4的81端口的ip包轉發到ip地址192.168.0.2的8180端口,設置如下:
1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180
2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1
真實的傳輸過程如下所示:
假設某客戶機的ip地址為6.7.8.9,它使用本機的1080端口連接1.2.3.4的81端口,發出的ip包源地址為6.7.8.9,源端口為1080,目的地址為1.2.3.4,目的端口為81.
主機1.2.3.4接收到這個包后,根據nat表的第一條規則,將該ip包的目的地址更該為192.168.0.2,目的端口更該為8180,同時在連接跟 蹤表中創建一個條目,(可從/proc/net/ip_conntrack文件中看到),然后發送到路由模塊,通過查路由表,確定該ip包應發送到 eth1接口.在向eth1接口發送該ip包之前,根據nat表的第二條規則,如果該ip包來自同一子網,則將該ip包的源地址更該為 192.168.0.1,同時更新該連接跟蹤表中的相應條目,然后送到eth1接口發出.
此時連接跟蹤表中有一項:
連接進入: src=http://www.3lian.com/edu/2013/09-05/6.7.8.9 dst=1.2.3.4 sport=1080 dport=81
連接返回: src=http://www.3lian.com/edu/2013/09-05/192.168.0.2 dst=http://www.3lian.com/edu/2013/09-05/6.7.8.9 sport=8180 dport=1080
是否使用: use=1