Stałe porty UDP mogą ominąć przekierowanie portów, ale nie każdy NAT
Zapora stanowa przepuszcza pakiet partnera jako ruch powrotny, gdy oba końce przypną jeden port. Oto kiedy to działa i co po cichu temu kładzie kres.
Dwa domowe routery, żadne przekierowane porty i VPN, który czasem jednak się łączy. UDP na to pozwala, ponieważ zapora przepuści pakiet, który potrafi dopasować do strumienia, jaki maszyna już rozpoczęła. To warunkowy trik, a nie funkcja, i warunki łatwo wymienić, gdy wiesz, co porównuje zapora. Są też powodem, dla którego identyczne profile zachowują się różnie w różnych sieciach.
Porównanie, którego dokonuje zapora
Każdy wychodzący datagram tworzy krótkotrwały wpis: adres źródłowy, port źródłowy, adres docelowy, port docelowy. Wszystko, co przychodzi i pasuje do wpisu, jest traktowane jako odpowiedź i przepuszczane. Reguły ruchu przychodzącego nie mają tu nic do rzeczy.
Pytanie więc nie brzmi, czy zapora wpuszcza partnera. Brzmi, czy pakiet partnera wygląda jak odpowiedź, na którą czeka wpis. Zmień jedno pole tej czteroczęściowej krotki, a pakiet staje się obcy. Dlatego działająca konfiguracja może się zepsuć, gdy zmieni się tylko numer portu, i dlatego ten sam port może działać na jednym routerze, a na następnym zawieść.
Ustal lokalny port źródłowy, a ten sam numer pojawi się po obu stronach wymiany. To cały mechanizm i wyjaśnia, dlaczego trik jest kruchy, a nie tajemniczy.
Przypięcie jednego portu na każdym końcu
Domyślny port UDP OpenVPN to 1194, a lport ustawia port źródłowy, z którego wysyła. Przypnij oba peery, a krotka wychodząca każdego z nich wskaże port, na którym nasłuchuje drugi:
# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194
To działa tylko tak długo, jak żaden router pomiędzy nimi nie przepisuje portu źródłowego. Gdy pakiety pojawiają się w przechwyceniu, ale tunel nie wstaje, przepisywanie jest pierwszym podejrzanym.
Gdzie krotka przestaje pasować
NAT mapujący według celu daje każdemu peerowi inny port zewnętrzny. Adres, który kazano użyć twojemu peerowi, nie jest adresem, który do niego dociera, więc przychodzący pakiet do niczego nie pasuje i jest po cichu odrzucany.
Tłumaczenie na poziomie operatora, piętrowy NAT i randomizacja portów kończą się tak samo. Podobnie każde urządzenie pośredniczące, które przepisuje porty, a adresy zostawia w spokoju.
Transporty strumieniowe mają gorzej. Uścisk dłoni TCP jest śledzony krok po kroku, więc VPN oparty na TCP w ogóle nie da się w ten sposób przebić i potrzebuje nasłuchu gdzieś na ścieżce.
Zwykle jedna strona zawodzi pierwsza
W praktyce obie sieci rzadko zachowują się tak samo. Jeden router może dawać przewidywalne mapowanie, a drugi porty według celu, i wynikiem jest konfiguracja, która działa między dwoma domami, a zawodzi z sieci komórkowej. Sprzeczne doniesienia zwykle opisują dwie różne pary routerów. Żaden z autorów się nie myli i żaden wynik się nie uogólnia.
Zanim dotkniesz profili, ustal, która strona odrzuciła pakiet. Przechwycenia na obu końcach rozstrzygają to za pierwszym razem: datagramy, które opuszczają A i nigdy nie docierają do B, oznaczają, że strumień przepisano po drodze, natomiast datagramy, które docierają do B, a żadna odpowiedź nie wraca, oznaczają, że zapora nie uznała ich za powiązane.
Dwa peery z publicznymi adresami IPv6 omijają cały problem. Bez tłumaczenia nie ma czego dopasowywać, więc wystarczy reguła zapory wymieniająca peery i projekt przestaje zależeć od zachowania routera.
Kiedy przestać próbować
Host z publicznym adresem to niezawodna odpowiedź. Może zakończyć tunel dla obu peerów albo po prostu pomóc im odkryć bieżący adres zewnętrzny drugiej strony, i oba układy działają niezależnie od tego, co robią NAT-y. Zarządzana nakładka daje tę samą koordynację, jeśli polityka na to pozwala.
Żadne z tych rozwiązań nie potrzebuje wyłączonej zapory. Wyłączanie ochrony, by wygrać bezpośrednie połączenie, odrzuca powód, dla którego bezpośrednia próba była atrakcyjna, i zostawia maszynę otwartą na cały czas testu.
Najpierw wypróbuj układ bezpośredni, a potem zapisz, co zobaczyłeś. Zachowanie NAT i przechwycenie, które je pokazało, są warte więcej niż para portów, której w końcu użyłeś, bo następna sieć będzie inna. podręcznik OpenVPN 2.6 dokumentuje lport oraz opcje remote, od których to zależy.