Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Bạn có thể cấu hình chuyển tiếp cổng mạng trong tất cả phiên bản Windows mà không cần công cụ thứ ba. Dùng quy tắc chuyển tiếp cổng, bạn có thể chuyển hướng kết nối TCP đến (IPv4 hoặc IPv6) từ cổng TCP cục bộ đến bất kỳ số cổng nào khác, thậm chí đến cổng trên máy tính từ xa. Hơn nữa, không cần thiết Windows phải có dịch vụ lắng nghe trên một cổng TCP cụ thể. Chuyển tiếp cổng Windows thường dùng nhất để bypass tường lửa hoặc ẩn host/dịch vụ nội bộ khỏi mạng bên ngoài (NAT/PAT).

Trong thế giới Linux, chuyển tiếp cổng cấu hình khá đơn giản dùng iptables or firewalld. Trên hệ thống Windows Server, dịch vụ Routing and Remote Access Service (RRAS) thường dùng để cấu hình chuyển hướng cổng. Tuy nhiên, có cách dễ dàng hơn cấu hình chuyển tiếp cổng, hoạt động tốt trong bất kỳ phiên bản Windows nào.

Cách Cấu Hình Chuyển Tiếp Cổng Trên Windows 10 Dùng Netsh Portproxy?

Bạn có thể cấu hình chuyển tiếp cổng trong Windows dùng chế độ Portproxy của lệnh Netsh. Cú pháp lệnh như sau:

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

trong đó

  • listenaddress – là địa chỉ IP cục bộ lắng nghe kết nối đến (hữu ích nếu bạn có nhiều NIC hoặc nhiều địa chỉ IP trên một interface);
  • listenport – số cổng TCP cục bộ lắng nghe (kết nối chờ trên);
  • connectaddress – là địa chỉ IP cục bộ hoặc từ xa (hoặc tên DNS) mà bạn muốn chuyển hướng kết nối đến;
  • connectport – là cổng TCP mà kết nối từ listenport được chuyển tiếp đến.

Dùng tùy chọn netsh interface portproxy add v4tov6/v6tov4/v6tov6, bạn có thể tạo quy tắc chuyển tiếp cổng giữa địa chỉ IPv4 và IPv6.

Giả sử nhiệm vụ của chúng ta là làm dịch vụ RDP phản hồi trên cổng không tiêu chuẩn, ví dụ 3340 (cổng có thể đổi trong cài đặt dịch vụ Remote Desktop, nhưng chúng ta dùng RDP để dễ demo chuyển tiếp cổng). Để làm vậy, chúng ta cần chuyển hướng traffic đến từ cổng TCP 3340 đến cổng cục bộ khác – 3389 (đây là số cổng RDP mặc định).

Lưu ý rằng số cổng cục bộ bạn chỉ định trong listenport không được lắng nghe (dùng) bởi dịch vụ hoặc process khác. Kiểm tra cổng không được dùng:

netstat -na|find "3340"

Thay vào đó, bạn có thể kiểm tra cổng không lắng nghe cục bộ dùng cmdlet PowerShell Test-NetConnection:

Test-NetConnection -ComputerName localhost -Port 3340

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Để tạo quy tắc chuyển tiếp cổng trên Windows 10, chạy command prompt quyền administrator và chạy lệnh sau:

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

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Trong đó 10.10.1.110 – địa chỉ IP hiện tại của máy tính này.

Bây giờ, dùng công cụ netstat kiểm tra Windows giờ lắng nghe trên cổng cục bộ 3340:

netstat -ano | findstr :3340

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Lưu ý. Nếu lệnh này không trả về gì và chuyển tiếp cổng qua netsh interface portproxy không hoạt động, hãy đảm bảo dịch vụ iphlpsvc (IP Helper) đang chạy trên máy tính của bạn.

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Hỗ trợ IPv6 phải được bật trên network interface mà quy tắc chuyển tiếp cổng được tạo cho.

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Đây là điều kiện tiên quyết cho hoạt động đúng của chuyển tiếp cổng. Không có dịch vụ IP Helper và không bật hỗ trợ IPv6, chuyển hướng cổng sẽ không hoạt động.

Để làm cho chuyển tiếp cổng hoạt động trên Windows Server 2003/XP, bạn phải thêm đặt tham số IPEnableRouter thành 1 trong khóa registry HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters.

Bạn có thể tìm process nào đang lắng nghe trên cổng chỉ định dùng PID của nó (trong ví dụ của chúng tôi, PID là 636):

tasklist | findstr 636

Hãy thử kết nối đến cổng này từ máy tính từ xa dùng bất kỳ RDP client nào. Cổng 3340 phải được chỉ định làm số cổng RDP. Nó được chỉ định sau dấu hai chấm theo địa chỉ RDP server. Ví dụ, 10.10.1.110:3340

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Kết nối RDP nên được thiết lập thành công.

Nếu bạn muốn chuyển tiếp kết nối TCP đến đến máy tính từ xa, dùng lệnh sau:

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

Quy tắc này sẽ chuyển hướng tất cả traffic RDP đến (từ cổng TCP cục bộ 3389) từ máy tính này đến host từ xa với địa chỉ IP 192.168.1.100.

Cũng, bạn có thể dùng Windows SSH tunnel để chuyển tiếp cổng cục bộ đến máy chủ từ xa.

Quản Lý Quy Tắc Chuyển Tiếp Cổng Trong Windows

Quan trọng. Đảm bảo tường lửa của bạn (Microsoft Windows Defender Firewall hoặc tường lửa thứ ba thường đi kèm phần mềm antivirus) cho phép kết nối đến đến cổng mới. Bạn có thể thêm quy tắc allow mới vào Windows Defender Firewall bằng lệnh:

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

Hoặc dùng cmdlet New-NetFirewallRule PowerShell:
New-NetFirewallRule -DisplayName "forwarder_RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow

Khi tạo quy tắc firewall đến cho cổng 3340 qua giao diện đồ họa Windows Defender Firewall, không cần liên kết chương trình nào với nó. Cổng này chỉ được lắng nghe bởi network driver.

Bạn có thể tạo bất kỳ số lượng quy tắc chuyển tiếp cổng Windows. Tất cả quy tắc netsh interface portproxy đều bền vững và được lưu trong hệ thống sau khi restart Windows.

Cũng có trường hợp trong Windows Server 2012 R2 quy tắc chuyển tiếp cổng bị reset sau reboot server. Trong trường hợp này, bạn cần kiểm tra xem có ngắt kết nối định kỳ trên network interface không, và địa chỉ IP có thay đổi khi OS boot không (tốt hơn dùng IP tĩnh thay vì DHCP động). Làm workaround, tôi phải thêm batch script vào Windows Task Scheduler với quy tắc netsh interface portproxy chạy khi khởi động hệ thống.

Để hiển thị danh sách tất cả quy tắc chuyển tiếp cổng TCP đang hoạt động trên Windows, chạy lệnh:

netsh interface portproxy show all

Trong trường hợp của chúng tôi chỉ có một quy tắc chuyển tiếp từ cổng cục bộ 3340 đến 3389:

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

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Mẹo. Bạn cũng có thể liệt kê cài đặt chuyển tiếp cổng trong portproxy như sau:

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

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Để xóa một quy tắc chuyển tiếp cổng cụ thể:

netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110

Để xóa tất cả quy tắc ánh xạ hiện có và xóa hoàn toàn bảng quy tắc chuyển tiếp cổng:

netsh interface portproxy reset

Quan trọng. Sơ đồ chuyển tiếp này chỉ hoạt động cho cổng TCP. Bạn không thể chuyển tiếp cổng UDP cách này. Cũng không thể dùng interface loopback 127.0.0.1 làm connectaddress.

Bạn có thể dùng Windows Server với RRAS và NAT role cài đặt để cấu hình chuyển tiếp cổng cho traffic UDP. Bạn có thể cấu hình chuyển tiếp cổng giữa interface server dùng snap-in đồ họa (rrasmgmt.msc) hoặc với lệnh:

netsh routing ip nat add portmapping Ethernet1 udp 0.0.0.0 53 192.168.100.100 53

Tính năng portproxy khác là cơ hội làm cho bất kỳ dịch vụ mạng từ xa nào trông như đang chạy cục bộ.

Ví dụ, hãy chuyển hướng kết nối từ cổng cục bộ 5555 đến HTTP server từ xa với IP 157.166.226.25 (trang web CNN):

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

Bây giờ nếu bạn vào https://localhost:5555/ trong trình duyệt, trang chủ CNN sẽ mở. Vì vậy dù trình duyệt truy cập máy tính cục bộ, nó mở trang từ web server bên ngoài.

Cấu Hình Chuyển Tiếp Cổng Trên Windows

Quy tắc chuyển tiếp cổng cũng có thể dùng để chuyển tiếp cổng từ địa chỉ IP bên ngoài của physical NIC đến cổng của máy ảo chạy trên cùng host. Trong Hyper-V, bạn có thể cấu hình chuyển tiếp cổng ở cấp Virtual Switch (xem dưới).

Windows không thể chuyển tiếp một dải cổng TCP. Nếu bạn cần chuyển tiếp nhiều cổng, bạn sẽ phải thủ công tạo nhiều quy tắc chuyển tiếp portproxy. Cách dễ nhất là tạo danh sách lệnh netsh interface portproxy add với số cổng khác nhau trong notepad rồi paste vào command prompt để thực thi.

Chuyển Tiếp Cổng Trong Hyper-V Server

Khi dùng vai trò Hyper-V trên máy tính (có thể cài trên cả Windows 10 và Windows Server, hoặc dưới dạng Hyper-V Server miễn phí), bạn có thể cấu hình quy tắc DNAT chuyển tiếp cổng dùng PowerShell. Giả sử bạn muốn chuyển hướng tất cả traffic https mà Hyper-V host nhận đến địa chỉ IP của máy ảo chạy trên host. Để làm vậy, dùng lệnh Hyper-V StaticMapping.

Trước hết bạn cần tạo Virtual Switch với NAT:

New-VMSwitch -Name "HTTPS-NAT" -SwitchType NAT -NATSubnetAddress 192.168.100.0/24

Sau đó bạn cần kết nối VM cần thiết đến vswitch chỉ định và bật quy tắc dịch địa chỉ cho tất cả máy ảo kết nối qua Hyper-V virtual switch này:

New-NetNat -Name HTTPS-NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.100.77" -InternalPort 443 -NatName HTTPS-NAT

Sau khi thực thi các lệnh PowerShell này, tất cả traffic HTTPS đến cổng 443 của Hyper-V host sẽ được chuyển tiếp đến địa chỉ IP riêng của máy ảo.