przekierowanie portów w systemie Windows


262

W komputerze mam dwie karty sieciowe:

Główny ma lokalny adres IP -> 192.168.1.111 Drugi ma lokalny adres IP -> 192.168.0.200

Główny ma połączenie z Internetem, a drugi jest podłączony do urządzenia o IP 192.168.0.33, ma serwer HTTP na porcie 80.

Mam serwer Apache w głównym połączeniu (port 4422) i mogę uzyskać dostęp z dowolnego miejsca, teraz chcę po wykryciu połączenia z 4422 chcę przekierować to połączenie na 192.168.2.33:80

Jak mogę to zrobić w systemie Windows?


Odpowiedzi:


507

Rozwiązałem to, można to zrobić wykonując:

netsh interface portproxy add v4tov4 listenport=4422 listenaddress=192.168.1.111 connectport=80 connectaddress=192.168.0.33

Aby usunąć przekazywanie:

netsh interface portproxy delete v4tov4 listenport=4422 listenaddress=192.168.1.111

Oficjalne dokumenty


21
Tylko upewnij się, że masz zainstalowany IPv6. Zgodnie z tym artykułem MS KB , netsh potrzebuje bibliotek IPv6 do skonfigurowania funkcji proxy portu.
Renan Mozone

10
Możesz także wykonać czyszczenie za pomocą netsh interface portproxy resetlub netsh interface portproxy delete
patrikbeno

7
Próbowałem użyć tej techniki i chociaż działała, była bardzo powolna. Zamiast. Znalazłem narzędzie o nazwie PassPort ( sourceforge.net/projects/pjs-passport ), które wykonuje ten sam typ przekierowania portów związany z konkretną kartą sieciową, ale nie ma problemów z wydajnością netsh. Instaluje się i działa dobrze na Win2008SvrR2.
James L.

14
Powyższe polecenie nie działało dla mnie w systemie Windows7 ani Windows Server 2003. Musiałem też podać parametr protokół = tcp . Pełne polecenie:netsh interface portproxy add v4tov4 listenport=4422 listenaddress=192.168.1.111 connectport=80 connectaddress=192.168.0.33 protocol=tcp
alwi

3
UWAGA: działa to tylko w TCP , więc nie ma szczęścia, jeśli chcesz przekazać ruch UDP.
user276648,

14

nginx jest przydatny do przesyłania HTTP na wiele platform, w tym Windows. Jest bardziej łatwy w konfiguracji i rozszerzaniu dzięki bardziej zaawansowanej konfiguracji. Podstawowa konfiguracja może wyglądać mniej więcej tak:

events {}

http {
     server {

        listen 192.168.1.111:4422;

        location / {
            proxy_pass http://192.168.2.33:80/;
        }
     }
}

14
Jest to dobre rozwiązanie dla przekazywania HTTP, ale tylko dla przesyłania HTTP (ze wszystkimi jego zastrzeżeniami, np. Websockets wymagają dodatkowej konfiguracji). W przypadku przekazywania HTTPS lub innych dowolnych protokołów (np. RDP) jest to w większości bezużyteczne.
Uli Köhler,

2
To powiedziawszy, jest to niezwykle dobre rozwiązanie do przesyłania dalej HTTP, więc cieszę się, że tu jest.
Casey

Dlaczego? Możesz przesyłać strumieniowo dalej, co chcesz, w tym https
user1156544

@uli, o których ustawieniach się tolktujesz ... Przydatne będzie udostępnianie
użytkownik3787216,

1
@ UliKöhler Nginx to narzędzie do rozłączania połączeń TCP. Możesz go używać do HTTP, HTTPS, AMQP, WebSockets, cokolwiek. Jest wykorzystywany wewnętrznie przez narzędzia do przekierowywania i zarządzania ogólną łącznością TCP. To jest prawidłowe rozwiązanie. Zobacz także netfxharmonics.com/2016/03/nginx
David Betz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.