從XP(2001)開始,Windows就內置了網絡端口轉發功能,傳入本地計算機端口的任何TCP連接(IPV4/IPV6),都可以被轉發到本地或遠程計算機的另一個端口,而無需本地計算機真的運行一個監聽該端口的服務。
在Linux中,使用iptables可以很輕易地實現這一功能,而在Windows中,則由Routing and Remote Access服務(RRAS)來配置端口轉發,但還有一種更簡單的、適合任意windows版本的方法:netsh。
可以使用命令netsh的portproxy模式配置Windows中的端口轉發,命令語法如下:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
- listenaddress:監聽地址
- listenport:監聽端口
- connectaddress:轉發地址
- connectport:轉發端口
一個使用示例:通過非標準端口連接遠程桌面(可以更改RDP服務的端口,此處只是爲了舉例),即將TCP端口3340重定向到本地端口3389(標準RDP端口)。
以管理員身份啓動命令提示符,並運行如下命令:
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110
其中10.1.1.110爲提供遠程桌面服務的計算機IP地址。
使用netstat命令看下3340端口此時是否處於監聽狀態:
netstat -ano | findstr :3340
如果此時看不到一個監聽在3340端口的進程,請檢查如下兩個地方:
1、檢查IP Helper服務是否運行(win+R:service.msc查看)
2、檢查網絡接口是否啓用了IPV6支持(檢查適配器屬性,是否勾選Intermet Protocol Version6(TCP/IPV6)/Internet協議版本6(TCP/IPV6))
這是實現端口轉發的先決條件。
此時可以嘗試遠程桌面連接10.1.1.110:3340,如果一切正常,將和連接10.1.1.110:3389效果一樣。
記得在Windows防火牆中開放3340端口
可以通過圖形界面配置,或者使用命令:
netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=10.1.1.110 localport=3340 action=allow
可以創建任意數量的轉發規則,且所有netsh interface portproxy規則都是永久的,不會隨着系統重啓而失效。可以通過如下命令顯示當前計算機的所有轉發規則:
netsh interface portproxy show all
或者使用如下命令獲取端口代理配置:
netsh interface portproxy dump
可以使用如下命令刪除某個端口轉發規則:
netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110
使用如下命令清除所有規則:
netsh interface portproxy reset
如果想將傳入的tcp連接轉發到另外一臺計算機,可以使用(將連接請求轉發到192.168.100.101:3389):
netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101
如果想讓遠程服務看起來像是運行在本地,可以使用(此時訪問localhost:5555將重定向到157.166.226.25:80):
netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp
注意:在Windows Server 2012 R2中端口轉發規則可能在系統重啓後被重置,請檢查網絡接口是否中斷或者服務器IP地址是否變更(建議設置爲靜態地址),另一個解決方法是在windows任務計劃程序中添加一個配置規則的開機啓動腳本。
在Windows Server 2003 / XP中,還需要確保註冊表HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters中的IPEnableRouter參數已設置爲1。
以上內容譯自:http://woshub.com/port-forwarding-in-windows/
另一個用法示例
之前遇到過一個問題,一組獨立網絡中的服務器需要添加到現有的zabbix監控系統中,而該系統中的已沒有多餘的服務器可供安裝zabbix proxy,僅有一臺windows(192.168.0.179)服務器具有訪問現有監控系統中某個zabbix proxy(132.222.222.222)的條件,此時就可以使用這臺windows做跳板來監控其所在網絡中的其他服務器。
netsh interface portproxy add v4tov4 listenport=10051 listenaddress=192.168.0.179 connectport=10051 connectaddress=132.222.222.222
待監控網絡中的zabbix agent應設置爲active模式,且ServerActive字段應設置爲192.178.0.179,這樣即可在不對現有網絡做任何變動的條件下實現對該網絡的監控。