1. 程式人生 > >[轉帖]Windows 內建埠轉發功能

[轉帖]Windows 內建埠轉發功能

如何在Windows中使用netsh命令進行埠轉發

https://www.freebuf.com/articles/system/176889.html

早上自己做了下實驗,的確可以。linux下 ssh可以做埠轉發,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。