AllowedIPs a ruch do całego Internetu
Chcąc komunikować się przez WireGuard z całym Internetem naturalnie ustawimy wartość AllowedIPs na 0.0.0.0/0 czyli wszystkie hosty. Wpisując taką wartość, pod polem konfiguracji w kliencie pojawi się checkbox „Zablokuj niezabezpieczony ruch (wyłącznik awaryjny)”, taka konfiguracja spowoduje że każdy ruch jaki będzie chciał „wyjść z komputera” będzie musiał być realizowany tunelem WireGuard. Teoretycznie tego chcemy, jednak w tym przypadku nie skomunikujemy się z żadnymi hostami będącymi np. w sieci lokalnej do której jesteśmy podłączeni (czyli np. nie skomunikujemy się z drukarką). Rozwiązaniem jest odznaczenie tego checkboxa wówczas wpis AllowedIPs zmieni się na „0.0.0.0/1 i 128.0.0.0/1” czyli nadal ruch do całego Internetu będzie realizowany tunelem ale będziemy mogli komunikować się z LAN.
DNS dla klientów
Istotną kwestią jest fakt że DNS jaki ustawiamy w konfiguracji jest wartością niezależną od AllowedIPs. Przykładowo więc jeśli ustawimy DNS na 1.1.1.1 a w AllowedIPs będziemy mieli tylko jakąś sieć lokalną przykładowo 172.20.0.0/24 to po zestawieniu połączenia w systemie zostanie ustawiony DNS 1.1.1.1 ale komunikacja do niego będzie realizowana bezpośrednio łączem z którego korzysta nasz komputer a nie przez tunel. W tym przypadku aby ruch DNS był również wysyłany przez tunel AllowedIPs powinno mieć wartość „172.20.0.0/24,1.1.1.1/32”.
WireGuard w konfiguracji site2site
Konfiguracja zakładająca połączenie ze sobą 2 urządzeń w celu zestawienia połączenia pomiędzy wieloma sieciami oczywiście również jest możliwa. Trzeba mieć na uwadze że WireGuard jest tunelem warstwy 3 a nie 2.
Konfiguracja site2site sprowadza się do dodania konfiguracje Peer’a w sposób taki jak powyżej uzupełnionej o:
- Endpoint – adres IP drugiej strony (z którym będzie zestawiony tunel)
- Endpoint port – port na którym nasłuchuje druga strona
- Allowed Address – tutaj wpisujemy adresy które mogą być transmitowane przez tunel, w przypadku połączenie klient<–>serwer wpisywaliśmy po prostu adres IP klienta, tutaj musimy wpisać albo poszczególne IP które będą transmitowane albo zezwolić na wszystkie (0.0.0.0/0) i ewentualnie weryfikować poprawność ruchu w firewall.
MTR / traceroute / tracert
Warto dodać jeszcze o jednej kwestii dotyczącej WireGuard. Jeśli korzystamy z innych typów VPN np. L2TP, IKEv2 itp. możemy zdefiniować trasy jakie są realizowane przez tunel. W ten sposób możemy przykładowo zestawić tunel przez który będzie realizowany ruch tylko do adresu 8.8.8.8 czyli DNS Google. Robiąc wtedy traceroute do tego adresu zobaczymy poprawnie całą ścieżkę hostów przez które przeszedł pakiet wysłany do tego adresu.
Niestety w przypadku WireGuard sytuacja jest nieco inna. Zobaczmy poniższą konfigurację:
Wartość AllowedIPs to 8.8.8.8/32 czyli tym tunelem jest dopuszczony ruch tylko do ale też tylko z adresu 8.8.8.8 przez co tracert do niego wygląda tak:
Wynika to z sposobu działania mtr/traceroute/tracert które wysyłają ping do hosta docelowego z coraz większym TTL pakietu przez do poszczególne routery w Internecie na których TTL dochodzi do 0 wysyłają komunikat „TTL time exceeded” przez co znamy ich adres IP ponieważ ów komunikat jest wysyłany z tego adresu. W tym właśnie problem ponieważ taki pakiet również wróci do nas tunelem WireGuard ale zostanie odrzucony przez aplikację ponieważ takie ustawienie AllowedIPs nie dopuszcza ruchu z adresu innego niż 8.8.8.8 – trzeba po prostu być tego świadomym przy korzystaniu z WireGuard.