Przygotowanie OpenWrt na nadejście przyszłości
Ostatnia zmiana: 2015-08-29 08:06

Protokół IP w wersji 6 od dawna jest uważany za "przyszłość" sieci. Wiele razy było już mówione o wyczerpaniu się puli adresowej IPv4, problemach z adresacją, rosnącą liczbą urządzeń podłączanych do sieci. Wiele dostawców wdrożyło już IPv6, choć ci "domowi" operatorzy niezbyt kwapią się z udostępnieniem tego protokołu, podobnie jak producenci sprzętów codziennego użytku. Mimo wszystko możemy sami wdrożyć protokół IPv6 w naszej sieci i być gotowym na nadejście przyszłości.

Poradnik przetestowano na OpenWrt Chaos Calmer 15.05.
Niezbędne jest posiadane na interfejsie wan publicznego adresu IP (może być dynamiczny) który da się pingować. Z tego też powodu odpadają np. dostawcy sieci komórkowych.
Potrzebujemy trzech elementów - konfigurację dostawcy, dodanie adresu ipv6 do systemu oraz rozgłaszanie prefiksu w naszej sieci lokalnej (bo zwykle otrzymujemy dość dużą klasę adresową do użytku). To ostanie jest zrealizowane przez standardowe pakiety zawarte wydaniu OpenWrt 15.05 (odhcpd).

Dostawca ipv6

Najprawdopodobniej nasz ISP nie jest jeszcze przygotowany do obsługi sieci IPv6 i nie dostaniemy od niego adresów które można użyć, więc sami musimy zatroszczyć się o ich otrzymanie. W sieci istnieje kilka serwisów oferujących adresy; w tym przypadku skorzystamy z serwisu IPv6 Tunnel Broker (Hurricane Electric - zwanego dalej HE). Fizycznie utworzymy tunel pomiędzy naszym routerem a węzłem w sieci i otrzymamy do zarządzania podsieć /64 (więc dość dużą). Tunel IPv6 będzie "wkładany" w pakiety IPv4.
Pierwsza sprawa to założenie sobie konta i utworzenie nowego tunelu - wybieramy na wspomnianej stronie "Register" i podajemy swoje dane. Następnie po lewej stronie wybieramy "Create Regular Tunnel", wskazujemy najbliższy nam serwer (zapewne będzie to Warsaw, PL). Zatwierdzamy i czekamy na potwierdzenie założenia tunelu. Warunkiem koniecznym utworzenia tunelu jest możliwość pingowania naszego routera. Rezultatem powinno być otrzymanie nowej podsieci IPv6. Należy zgromadzić kilka danych które będą później potrzebne do konfiguracji tunelu:
- nazwa użytkownika - na którego logujemy się do serwisu HE
- hasło - to jest hasło do serwisu HE
- tunnelid - znajdziemy to na zakładce "IPv6 Tunnel", jako "Tunnel ID"
- zdalny adres ipv4 - zdalny koniec tunelu, znajdziemy to na zakładce "IPv6 Tunnel" jako "Server IPv4 Address"
- lokalny koniec tunelu ipv6 - znajdziemy to na zakładce "IPv6 Tunnel" jako "Client IPv6 Address"
- rutowana sieć /64 - znajdziemy to na zakładce "IPv6 Tunnel" jako "Routed /64"

Konfiguracja

Od teraz wymienione niżej operacje należy wykonać na routerze.
Do działania niezbędne jest zainstalowanie podstawowej obsługi ipv6


    # opkg update
    # opkg install kmod-ipv6 kmod-ip6tables ip6tables

(pakiety te są domyślnie już instalowane w OpenWrt 15.05) oraz obsługi tunelu HE, w tym przypadku realizuje to pakiet 6in4


    # opkg install 6in4

Sama konfiguracja nie powinna nastręczać większych trudności - na podstawie posiadanych danych o założonym tunelu należy zrobić w pliku /etc/config/network nowy interfejs o nazwie henet:


    config interface henet
        option proto 6in4
        option peeraddr  '216.66.80.162'
        option ip6addr   '2001:0db8:111a:1111::2/64'
        option ip6prefix '2001:0db8:111b:1111::/64'
        option tunnelid  '12345'
        option username  'xxxxxx'
        option password  'yyyyyy'

(identyczna konfiguracja jest podana na zakładce "Example Configuration" - należy wybrać "OpenWRT Barrier Breaker").
Gdzie

  • peeraddr to zdalny adres ipv4 naszego tunelu - "Server IPv4 Address"
  • ip6addr to lokalny koniec tunelu ipv6 - "Client IPv6 Address"
  • ip6prefix to "Routed /64"
  • tunnelid to "Tunnel ID"
  • username to nazwa użytkownika na którego logujemy się w serwisie HE
  • password to hasło użytkownika na którego logujemy się w serwisie HE
Po wprowadzeniu danych wykonujemy restart routera.

Zamiast używać dodatkowego interfejsu o nazwie henet można to zrobić w sekcji wan6 - nie trzeba będzie zmieniać firewalla.

Testy połączenia - część pierwsza

Wykonujemy polecenie ifconfig. Powinien pojawić się nowy interfejs o nazwie 6in4-henet lub 6in4-wan6 (w zależności od nazwy sekcji z której skorzystaliśmy) z przypisanym adresem ipv6. Inny adres powinniśmy zobaczyć na interfejsie br-lan. Jeżeli tak jest to instalujemy program ping6


    # opkg install iputils-ping6

i sprawdzamy czy ipv6 działa


    # ping6 -c3 ipv6.google.com

Powinien odpowiedzieć pozytywnie:


    # ping6 -c3 ipv6.google.com
    PING ipv6.google.com(waw02s06-in-x0e.1e100.net) 56 data bytes
    64 bytes from waw02s06-in-x0e.1e100.net: icmp_seq=1 ttl=54 time=108 ms
    64 bytes from waw02s06-in-x0e.1e100.net: icmp_seq=2 ttl=54 time=116 ms
    64 bytes from waw02s06-in-x0e.1e100.net: icmp_seq=3 ttl=54 time=121 ms

    --- ipv6.google.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 108.095/115.179/121.370/5.470 ms

Jeżeli tak jest - wszystko działa.

Routing pakietów

Po pierwsze - odpowiednia konfiguracja firewalla, zapewniająca routing pakietów ipv6. Wymaga to dopisania do strefy wan naszego nowego interfejsu henet. Zmieniamy więc odpowiednią sekcję w firewallu (w pliku /etc/config/firewall):


    config zone
        option name             wan
        list   network          'wan'
        list   network          'wan6'
        list   network          'henet'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT
        option masq             1
        option mtu_fix          1

Nie trzeba tego robić jeżeli użyliśmy sekcji wan6 - ona jest już domyślnie dodana do firewalla.
W niektórych przypadkach dobrze jest zezwolić (otworzyć firewall) na protokół 41 (ipv6 - protokół, nie port). Wykonuje się to dopisując nową sekcję do firewalla


    config rule
        option src wan
        option proto 41
        option target ACCEPT

Drugie - upewnijmy się, że w /etc/sysctl.conf jest odpowiedni wpis


    net.ipv6.conf.all.forwarding=1

lub odkomentujemy go, jeżeli tam już istnieje.


    # /etc/init.d/sysctl restart
    # /etc/init.d/firewall restart

Testy połączenia - część druga

Włączamy komputer. Upewniamy się że mamy zainstalowaną obsługę ipv6 (w nowszych wydaniach dystrybucji linuksa jest to standardowo, w windows sprawdzamy we właściwościach karty sieciowej). Jeżeli komputer dostał adres ipv6 to otwieramy po prostu przeglądarkę i wprowadzamy jeden z adresów: http://ipv6test.google.com lub http://test-ipv6.com/ . Jeżeli przejdziemy test pomyślnie to gratulacje - wszystko działa.



O krok dalej...

Mając gotową konfigurację możemy posunąć się jeszcze dalej - całą domową sieć przestawić na ipv6, bez udziału ipv4. Ma to niestety dwie wady - nie wszyscy dostawcy (witryny) obsługują ipv6 i trzeba używać translacji adresów ipv6 do ipv4. Drugi zaś problem to fakt, że nie wszystkie urządzenia wspierają ipv6. O ile nowsze systemy operacyjne tak, o tyle smartfony, tv, tablety, odtwarzacze sieciowe czy inne urządzenia które mamy połączone w sieci - już nie koniecznie. A jeszcze gorsze jest to, że w większości przypadków nie da się w nich wymienić oprogramowania na nowsze, więc w przyszłości czeka nas albo wymiana sprzętu na inny, albo w dalszym ciągu posługiwanie się hybrydową siecią ipv4/ipv6.

Zakończenie

O ile mamy środowisko graficzne LuCI to po instalacji pakietu luci-proto-ipv6 można to wszystko wyklikać w przeglądarce.
Mała ciekawostka: facebook.com ma adres 2a03:2880:10:8f01:face:b00c:0:25.

Nie ma problemu jeżeli posiadamy zmienny, publiczny adres IP. Aktualne skrypty 6in4 zapewniają automatyczną aktualizację adresu w systemie HE i nie ma potrzeby osobnego wywołania aktualizacji; system powinien wykonywać to automatycznie:


    # logread | grep 6in4-wan6
    ...
    Fri Aug 28 19:11:22 2015 user.notice 6in4-wan6: update 1/3: timeout
    Fri Aug 28 19:11:28 2015 user.notice 6in4-wan6: update 2/3: nochg 178.235.xxx.xxx
    Fri Aug 28 19:11:28 2015 user.notice 6in4-wan6: updated