在Windows中使用netsh命令進行端口轉發


文本可用於醫保網絡轉發

 

自Windows XP開始,Windows中就內置網絡端口轉發的功能。任何傳入到本地端口的TCP連接(IPv4或IPv6)都可以被重定向到另一個本地端口,或遠程計算機上的端口,並且系統不需要有一個專門用於偵聽該端口的服務。

在Linux中,使用iptables可以非常輕松地配置端口重定向。在Windows Server系統上,路由和遠程訪問服務(RRAS)通過使用虛擬專用網絡 (VPN) 或撥號連接支持遠程用戶或站點到站點連接,但這種方式相對較為麻煩。其實,除此之外還有一種更為簡單的方法可以幫助我們在Windows中實現端口轉發,即我們可以使用命令Netsh的Portproxy模式配置Windows中的端口轉發。該命令的語法如下:

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport

listenaddress - 等待連接的本地IP地址。

listenport - 本地偵聽TCP端口。

connectaddress - 將傳入連接重定向到本地或遠程IP地址(或DNS名稱)。

connectport - 一個TCP端口,來自listenport的連接會被轉發到該端口。假設當前我們的RDP服務端口在一個非標准端口上進行響應,如3340(端口可以在服務設置中更改)。為此,我們需要將傳入流量從TCP端口3340重定向到另一個本地端口 - 3389(即標准rdp端口)。

我們以管理員身份啟動命令提示符並執行以下命令:

netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110

10.10.1.110 - 計算機的當前IP地址。

使用netstat確保3340端口當前處於被偵聽狀態:

netstat -ano | findstr :3340

注意:如果該命令未返回任何內容並且通過netsh interface portproxy進行端口轉發不成功,則請確保iphlpsvc(IP Helper)服務當前已在你的系統上運行。

必須在為其創建端口轉發規則的網絡接口上啟用IPv6支持。

以上條件必須滿足,如果沒有IP Helper服務且未啟用IPv6支持,則端口重定向將不起作用。

你可以使用其PID找出正在偵聽此端口的進程(在我們的示例中PID為636):

tasklist | findstr 636

讓我們使用任意的RDP客戶端嘗試從遠程系統連接到此計算機。指定RDP端口3340,在RDP服務器地址后以冒號分隔,例如10.10.1.110:3340

如果不出問題的話,連接應該會被成功建立。

重要:請確保防火牆(Windows防火牆或通常包含在殺毒軟件中的第三方防火牆)允許到新端口的傳入連接。 如有必要,可以使用以下命令添加新的Windows防火牆規則:

netsh advfirewall firewall add rule name=”forwarded_RDPport_3340” protocol=TCP dir=in localip=10.1.1.110  localport=3340 action=allow

你可以創建任意數量的Windows端口轉發規則。所有netsh interface portproxy規則都是持久性的,並會在Windows系統重啟后被保存。

顯示系統中的轉發規則列表:

netsh interface portproxy show all

在我們的例子中,只有一個轉發規則即從3340到3389端口的轉發:

Listen on ipv4:             Connect to ipv4:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
10.1.1.110     3340        10.1.1.110     3389

Tip:此外,portproxy設置可以通過以下命令查看:

netsh interface portproxy dump
#========================
# Port Proxy configuration
#========================
pushd interface portproxy
reset
add v4tov4 listenport=3340 connectaddress=10.1.1.110 connectport=3389
popd
# End of Port Proxy configuration

刪除指定的端口轉發規則:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

清除所有當前的端口轉發規則:

netsh interface portproxy reset

重要:以上端口轉發僅適用於TCP端口,對於UDP端口將不起作用,並且不能使用127.0.0.1作為連接地址。

如果要將傳入的TCP連接轉發至另一台計算機,則命令如下:

netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101

此規則將所有傳入的RDP請求(到3389端口)從此計算機重定向到IP地址為192.168.1.101的遠程計算機上。

portproxy的另一個特性就是可以讓它看起來像任意的遠程網絡服務在本地運行。

例如,將連接從本地端口5555轉發至遠程地址157.166.226.25(CNN網站):

netsh interface portproxy add v4tov4 listenport=5555 connectport=80 connectaddress= 157.166.226.25 protocol=tcp

現在,如果你在瀏覽器中訪問http://localhost:5555/,則將打開CNN網站的主頁。因此,盡管瀏覽器對本地計算機進行了尋址,但它仍會打開一個遠程頁面。

端口轉發還可用於將端口從網卡的外部地址,轉發到在同一計算機上運行的虛擬機端口。

此外,在Windows Server 2012 R2中情況可能會有所不同。在Windows Server 2012 R2中,端口轉發規則僅在系統重啟之前有效,並且在重啟后它們會被重置。出現這種病情況,你需要檢查網絡接口上是否存在定期斷開連接,以及操作系統引導時IP地址是否發生更改(最好使用靜態IP地址)。作為一種解決方案,我會添加一個使用netsh interface portproxy規則的腳本到Windows scheduler,以在系統啟動時運行。

在Windows Server 2003/XP中,必須在注冊表項HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters中另外將IPEnableRouter參數設置為1。


免責聲明!

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



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