在Linux系統中我們可以使用ssh或者autossh進行端口轉發。
在Linux中使用ssh或者autossh進行端口轉發可以查看這篇博客:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
在Window中我們可以使用netsh命令進行端口轉發。
注意:在window中現在只能針對TCP請求進行端口轉發,不能對UDP協議進行轉發。
一、端口轉發介紹
端口轉發(Port Forwarding):通過監聽一個端口,將所有收到的數據,轉發到另一個配置的本地端口或者遠程地址的端口中。
可以看一張圖片來大致的瞭解一下端口轉發。
上面的圖解:當我們去請求【本地:PortA】的時候,相當於請求的【遠程或者本地:PortB】一樣。
二、在window中使用netsh命令
1.在window中,進行端口轉發時,使用portproxy模式下進行配置。必須使用管理員身份運行下面的命令。
2.創建一個端口轉發:
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=0.0.0.0 connectaddress=192.168.15.178 connectport=3389
參數說明:
- interface portproxy:切換到端口代理的上下文中。固定不變。
- add:表示添加一個端口轉發。
- v4tov4:表示添加的類型。還可以v4tov6,v6tov4,v6tov6四種參數
- listenport:想要監聽那個端口,相當於圖1中的PortA
- listenaddress:配置監聽的地址,如何配置0.0.0.0表示本地的任何地址,如果是127.0.0.1,只有在請求通過這個迴環地址,纔會進行端口轉發。監聽的網卡地址。
- connecport:轉發到的端口,相當於圖1中的PortB。
- connectaddress:配置的轉發的地址,可以是這個機器連接到的任何地址。
3.查看所有的端口轉發:
netsh interface portproxy show all
4.刪除一個端口映射
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=0.0.0.0
5.刪除所有的端口映射
netsh interface portproxy reset
6.顯示端口配置腳本
netsh interface portproxy dump
三、使用示例
1.遠程連接示例1:
實現目的:我們想通過一個非標準的遠程桌面連接端口,進行遠程桌面連接請求。我們想通過請求3340,來完成遠程桌面連接。而不是使用默認的端口3389。
實現步驟:
- 遠程桌面連接默認的使用的端口是3389端口。首先將3340轉發到3389,完成請求3340相當於請求3389。完成請求3340完成遠程桌面連接。
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.15.178
2.查看端口轉發的映射:
netsh interface portproxy show all
或者使用
netstat -ano | findstr 3340
我們可以從中看到,正在監聽3340端口。
如果沒有顯示的話,檢查IP Helper服務是否開啓。
檢查IPv6支持是否開啓,
3.連接遠程桌面服務:
從而使用3340端口完成遠程桌面連接。
注意:進行遠程桌面連接之前,確保我們的電腦可以進行遠程桌面連接。
2.使用示例2:
使用目的:本地機器通過瀏覽器請求服務器上的資源(192.168.15.177:8888)的資源。
使用步驟:
1.將本地的80端口請求,轉發到另一臺機器8888端口。
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=8888 connectaddress=192.168.15.177
2.直接在瀏覽器上請求:http://localhost,相當於請求了192.168.15.177:8888的資源內容。