Konfiguracja tunelu 6in4 w OpenWRT (IPv6)

Spis treści

Ludzie z IETF prawie 20 lat temu opracowali protokół IPv6. Niemniej jednak, w dalszym ciągu ogromna część providerów internetowych nie ma zamiaru zaimplementować u siebie jego obsługi. Ilość użytkowników, którzy mają natywne wsparcie dla protokołu IPv6 oscyluje w granicach 10% . Jeśli jednak mamy do dyspozycji router z firmware OpenWRT na pokładzie, to możemy pokusić się o skonfigurowanie tunelu 6in4. Jedynym warunkiem jest posiadanie zewnętrznego adresu IP. Tunel 6in4 jest bardzo podobny do tego 6to4, który był opisywany na przykładzie debiana. Tutaj jednak ten tunel zostanie ustawiony na routerze i w ten sposób cała wewnętrzna sieć będzie miała przydzieloną określoną przestrzeń adresową z puli IPv6.

OpenWRT Chaos Calmer i potrzebne oprogramowanie

Wszystkie poniższe kroki będą przeprowadzane na routerze TP-LINK Archer C7 v2, gdzie wgrany jest firmware OpenWRT Chaos Calmer (15.05). Z tego co zdążyłem ustalić, we wcześniejszych wersjach (BB, AA) cześć rzeczy nie jest wspieranych lub też szereg rozwiązań jest już przestarzałych. Dlatego też jest niemal pewne, że niżej opisane rzeczy nie będą się stosować do tych starszych wersji OpenWRT i by wdrożyć u siebie tunel 6in4, to będziemy musieli zaktualizować firmware routera.

Logujemy się zatem na router i instalujemy potrzebne oprogramowanie. Modułów kernela, serwera DHCPv6 jak i samego filtra pakietów nie musimy instalować w OpenWRT Chaos Calmer, bo te pakiety są już domyślnie wgrane. Interesuje nas głownie pakiet 6in4 oraz iputils-ping6 , który umożliwi nam przeprowadzenie testu połączenia:

# opkg update
# opkg install kmod-ipv6 kmod-ip6tables ip6tables odhcpd 6in4 iputils-ping6

Jak zarejestrować tunel 6in4

Mając zainstalowane potrzebne oprogramowanie na routerze, odpalamy przeglądarkę i przechodzimy na stronę tunnelbroker.net. To tutaj zarejestrujemy za free tunel, którego konfigurację będziemy mogli wdrożyć na routerze. By móc korzystać z usług tego serwisu, musimy się pierw zarejestrować. Po zarejestrowaniu, tworzymy tunel wybierając z menu po lewej stronie Create Regular Tunnel .

rejestracja-tunelu-6in4-hurricane-electric

Przy tworzeniu tunelu 6in4, trzeba określić jeden z jego z końców. Po to nam jest właśnie potrzebny zewnętrzny adres IP w protokole IPv4. Nasz aktualny adres powinien zostać automatycznie wykryty i wystarczy go przekopiować w pole IPv4 Endpoint . Ważne jest by podczas tego kroku router był w stanie odpowiadać na zapytania ping od strony WAN. W przeciwnym razie dostaniemy taki oto komunikat i nie będziemy mogli kontynuować:

problem-sprawdzanie-tunel-6in4

Jeśli nasz router odpowiada na żądanie ping z tego serwisu, to powinniśmy zobaczyć wiadomość o tym, że dany adres może być potencjalną końcówką dla tunelu 6in4:

pomyslna-weryfikacja-tunel-6in4

Standardowo możemy zarejestrować 5 tunelów ale tylko jeden tunel może być przypisany do konkretnego zewnętrznego adresu IP w protokole IPv4. Wybieramy także serwer, do którego mamy najbliżej. W tym przypadku jest to Europa > Warszawa. Po chwili zostanie nam zwrócona strona z informacjami o nowo utworzonym tunelu.

Konfiguracja tunelu 6in4 w OpenWRT

Mając tunel, musimy uzyskać jego konfigurację, którą później wpiszemy w OpenWRT. Przechodzimy zatem na zakładkę Example Configurations i wybieramy z listy OpenWRT. Nie ma, co prawda, Chaos Calmer ale ta konfiguracja podana dla Barrier Breaker również działa prawidłowo.

konfiguracja-tunelu-6in4-openwrt

W tej konfiguracji jest wykorzystywane narzędzie uci ale nic nie stoi na przeszkodzie, by wszystkie wpisy ręcznie sobie dodać przez edycję pliku /etc/config/network . Logujemy się zatem na router i we wspomnianym pliku odszukujemy sekcję wan6 . Przerabiamy ją do poniższej postaci:

config interface 'wan6'
      option ifname    'eth0'
      option proto     '6in4'
      option peeraddr  '216.66.80.162'
      option ip6addr   '2001:470:11:22::2/64'
      option ip6prefix '2001:470:11:22::/64'
      option tunnelid  '12345'
      option username  'login'
      option password  'pass'

Wyżej w pliku /etc/config/network mamy opcję ula_prefix . Może ona powodować problemy z przydzielaniem adresów IPv6 w sieci lokalnej. W taki sposób zamiast adresów oferowanych przez Hurricane Electric, OpenWRT będzie przydzielał adresy ULA (Unique Local Address) i hosty lokalne nie będą miały dostępu do tunelu 6in4. Dobrze jest zatem wykomentować ten poniższy blok:

#config globals 'globals'
#       option ula_prefix 'fd42:156b:900b::/48'

Zapisujemy konfigurację i resetujemy router. Po podniesieniu się routera, w statystykach interfejsów powinien się pojawić interfejs 6in4-wan6 posiadający adres IPv6: 2001:...::2/64 . Dodatkowo, na interfejsie br-lan również powinien się pojawić adres IPv6: 2001:...::1/64 . Można to sprawdzić przy pomocy narzędzi takich jak ifconfig lub ip .

Test połączenia IPv6 przez tunel 6in4 na routerze

Pozostało nam jeszcze przetestowanie konfiguracji samego tunelu. Będąc na routerze, ping'ujemy adres ipv6.google.com :

# ping -6 ipv6.google.com
PING ipv6.google.com (2a00:1450:4008:800::200e): 56 data bytes
64 bytes from 2a00:1450:4008:800::200e: seq=0 ttl=54 time=36.147 ms
64 bytes from 2a00:1450:4008:800::200e: seq=1 ttl=54 time=32.065 ms
64 bytes from 2a00:1450:4008:800::200e: seq=2 ttl=54 time=33.969 ms
^C
--- ipv6.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 32.065/34.060/36.147 ms

Pakiety docierają do celu i wracają do nas bez większego problemu. Zatem tunel działa i realizuje połączenie. Niemniej jednak, póki co tylko router ma dostęp do sieci IPv6. Musimy jeszcze skonfigurować hosty w sieci lokalnej, tak by im też został przypisany odpowiedni adres IPv6.

Konfiguracja IPv6 na hoście lokalnym

Konfiguracja adresacji w protokole IPv6 odbywa się automatycznie. W zależności od posiadanego systemu operacyjnego, może być wymagane dodatkowe dostosowanie pewnych parametrów. Niemniej jednak, zarówno windows jak i linux, bez problemu powinny podłapać konfigurację przesyłaną przez router w wiadomościach Router Advertisements i automatycznie się skonfigurować bez naszej ingerencji. Restartujemy zatem połączenie sieciowe na swoim laptopie i sprawdzamy, czy interfejsowi sieciowemu został przydzielony adres IPv6 z puli, którą otrzymał router za sprawą tunelu 6in4.

Na dobrą sprawę powinniśmy mieć jeden adres zaczynający się od fe80: (link-local address) i, w zależności od konfiguracji, jeden lub dwa adresy zaczynające się od 2001: . Czemu jeden albo dwa? Standardowo, konfiguracja adresacji w protokole IPv6 jest dokonywana via mechanizm stateless address autoconfiguration (SLAAC). Dodatkowo, jeśli posiadamy w sieci serwer DHCPv6, a posiadamy, to za jego sprawą może zostać przypisany drugi adres IPv6, z tym, że jego końcówka będzie taka sama jak tego adresu z puli IPv4.

Tak czy inaczej, musimy sprawdzić czy połączenie na lokalnych hostach działa. Odpalamy przeglądarkę i przechodzimy na adres http://ipv6test.google.com/ . Jeśli wszystko działa jak należy, powinniśmy zobaczyć ten poniższy komunikat:

test-tunel-6in4-google-ivp6

Możemy także sprawdzić jakość tego połączenia przechodząc pod adres http://test-ipv6.com/ . W tym przypadku wygląda to tak:

test-tunel-6in4-jakosc-ipv6

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.