Planowanie IPv6 dla koncentratora WireGuard z dwiema lokalizacjami: prefiks, peery, trasy
Przejdź przez prywatny koncentrator IPv6 dla dwóch sieci LAN: wybierz prefiks, zarezerwuj adresy tunelu, a następnie pozwól AllowedIPs wyrazić, który peer posiada którą podsieć.
Dwie sieci LAN, jeden koncentrator WireGuard i plan adresów IPv6, który musi odpowiedzieć na trzy odrębne pytania: który prefiks, który adres należy do każdego routera i który peer posiada którą podsieć. Błąd w którymkolwiek z nich daje tunel, który wykonuje uścisk dłoni i niczego nie routuje. Poniższy plan przechodzi przez prywatny projekt dwóch lokalizacji w tej kolejności. Świadomie nie zapewnia dostępu do internetu przez IPv6.
Zdecyduj, do czego służy prefiks
Unikalny lokalny prefiks z fd00::/8 jest naturalnym wyborem, gdy celem jest prywatna osiągalność między lokalizacjami. Pozostaje stabilny niezależnie od tego, który dostawca obsługuje każdą lokalizację, i nie jest ogłaszany w globalnej tabeli routingu, więc nie może wyciec twojej wewnętrznej numeracji do internetu.
Ta sama właściwość jest ograniczeniem. ULA nie daje publicznej drogi powrotnej, ponieważ żaden operator nadrzędny nie wie, że ma ją routować do twojej bramy. Jeśli wymaganie obejmuje wyjście do internetu przez IPv6, potrzebujesz przydziału od dostawcy, który routuje go do ciebie, a to odrębna decyzja projektowa z własnym rozmiarem prefiksu.
Nie zakładaj, że każde wdrożenie potrzebuje /48. RFC 6177 odszedł od jednego obowiązkowego rozmiaru dla lokalizacji końcowej, a właściwy rozmiar wynika z liczby sieci, które będziesz obsługiwać. Generuj ULA procedurą RFC 4193, zamiast wymyślać prefiks, którego mogłaby użyć także inna organizacja. Zapisz wynik w planie adresów, zanim zostanie skonfigurowane jakiekolwiek urządzenie, bo prefiks, którego nikt nie zapisał, jest prefiksem, który ktoś wykorzysta ponownie.
Podziel prefiks na role
Poniższy przykład używa fd7c:2e91:4a00::/48, a tabela jest uporządkowana według tego, gdzie zapisuje się każdy blok, a nie według lokalizacji. Traktuj wartości jako przykład i wygeneruj własne przed wdrożeniem czegokolwiek.
| Where it is written | What appears there | Block used | What it establishes |
|---|---|---|---|
| Hub wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::1/128 | The hub's own tunnel identity |
| Hub wg0.conf, Site A peer | Two ranges in one AllowedIPs line | ::2/128 and :10::/64 | That A owns its tunnel address and its LAN |
| Hub wg0.conf, Site B peer | Two ranges in one AllowedIPs line | ::3/128 and :20::/64 | That B owns its tunnel address and its LAN |
| Site A wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::2/128 | A's identity as the hub sees it |
| Site B wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::3/128 | B's identity as the hub sees it |
Bloki LAN to /64, ponieważ zwykły SLAAC oczekuje 64-bitowego identyfikatora interfejsu. Podział sieci LAN na mniejszy blok łamie to założenie na większości hostów, a koszt operacyjny nie jest wart oszczędności adresów w prywatnym planie. Oba bloki LAN pochodzą ze środka /48, pozostawiając niski zakres wolny dla późniejszych lokalizacji.
Adresy tunelu to zasób administracyjny, a nie sieć na łączu. Każdy interfejs otrzymuje z niego jeden /128, więc żaden host nie zakłada współdzielonej podsieci na tunelu i wykrywanie sąsiadów nie działa tam, gdzie nie jest potrzebne. Utrzymuj role rozłączne i zapisz je w planie adresów organizacji, aby późniejsza lokalizacja nie użyła bloku ponownie.
Daj każdemu routerowi jeden adres tunelu
Przydziel jeden /128 na router i zachowaj istniejące klucze oraz punkty końcowe działającego koncentratora. Trzy poniższe wartości różnią się tylko w części hosta.
Hub: Address = fd7c:2e91:4a00:ff00::1/128
Site A: Address = fd7c:2e91:4a00:ff00::2/128
Site B: Address = fd7c:2e91:4a00:ff00::3/128
Ten /128 opisuje jedyny adres przypisany do tego interfejsu. Nie mówi nic o tym, do ilu miejsc docelowych peer może routować, ponieważ osiągalność wyraża się w AllowedIPs, a nie w prefiksie interfejsu.
Każdy router lokalizacji potrzebuje też adresu w swoim bloku LAN i sposobu jego dystrybucji, zwykle ogłoszeń routera dla SLAAC. WireGuard nie wysyła tych ogłoszeń za ciebie i nie mostkuje dwóch sieci LAN. Router lokalizacji jest routerem w obu kierunkach.
Umieść własność podsieci w AllowedIPs
Wpis peera koncentratora dla Lokalizacji A posiada adres tunelu A i sieć LAN A, a ta para to cała deklaracja własności. Nic innego w tej sekcji peera nie musi opisywać lokalizacji.
AllowedIPs = fd7c:2e91:4a00:ff00::2/128, fd7c:2e91:4a00:10::/64
Wpis peera dla Lokalizacji B posiada pasującą parę, a symetria jest tu ważniejsza niż zwięzłość. Przeczytaj obie linie razem, a podział własności staje się widoczny na pierwszy rzut oka.
AllowedIPs = fd7c:2e91:4a00:ff00::3/128, fd7c:2e91:4a00:20::/64
To dwie osobne sekcje peera, a nie dwie listy konkurujące o jednego peera. WireGuard używa AllowedIPs w obu kierunkach: wybiera peera dla celu wychodzącego i odrzuca pakiet przychodzący, którego źródło nie pasuje do zakresu przypisanego peerowi, który go odszyfrował. Przydzielenie całego /48 obu peerom wyłączyłoby tę drugą kontrolę i zaciemniło, która lokalizacja posiada który blok. Właśnie ta różnica sprawia, że błędny adres źródłowy jest widoczny, a nie po cichu akceptowany.
Każda lokalizacja potrzebuje tylko celów osiągalnych przez swojego peera koncentratora: Lokalizacja A wymienia adres koncentratora, adres tunelu Lokalizacji B i sieć LAN B, a Lokalizacja B wymienia zbiór odwrotny. Listy są celowo asymetryczne, ponieważ każdy router widzi inną stronę topologii. Oba wpisy pisz z planu adresów, a nie z konfiguracji drugiej lokalizacji, bo właśnie w ten sposób nieaktualny zakres przeżywa renumerację.
Z wg-quick te zakresy tworzą także trasy. Przy systemd-networkd lub konfiguracji ręcznej dodaj równoważne trasy sam; inaczej tunel przenosi pakiety, których jądro nigdy do niego nie wysyła.
Dokończ przekazywanie i przetestuj oba kierunki
Włącz przekazywanie IPv6 na koncentratorze i obu routerach lokalizacji oraz zezwól na wymagane usługi między lokalizacjami w polityce przekazywania. Utrzymuj komunikaty ICMPv6 Packet Too Big w użytecznej formie, ponieważ ich odrzucanie psuje wykrywanie MTU ścieżki i powoduje zastoje dużych transferów, które wyglądają jak błędy aplikacji. Koncentrator, który przekazuje bez zgody zapory, odrzuca pakiet między routingiem a tunelem. Ten tryb awarii warto znać, ponieważ tunel pozostaje aktywny, a ginie tylko część przepływów.
sysctl net.ipv6.conf.all.forwarding
ip -6 route
ping -6 -c 3 fd7c:2e91:4a00:20::1
Testuj z hosta w Lokalizacji A do hosta w Lokalizacji B, a potem w przeciwnym kierunku. Ping do adresu tunelu koncentratora sprawdza tylko pierwszy skok i przejdzie nawet wtedy, gdy trasy LAN są błędne. To przepływ host-do-hosta dowodzi planu.
Zewnętrzne połączenie WireGuard może działać przez IPv4, podczas gdy wewnętrzny ruch jest IPv6, i ta niezależność jest przydatna podczas migracji. Jeśli później dodane zostanie globalne wyjście IPv6, przejrzyj ponownie przydział dostawcy, wybór adresu źródłowego i routing powrotny jako nowy krok projektowy; powyższy plan prywatny pozostaje ważny dla ruchu między lokalizacjami.