Przygotowanie OpenWrt/LEDE na nadejście przyszłości
Ostatnia zmiana: 2017-08-19 18:19
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ą i 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 oraz LEDE 17.01.
W przedstawionym rozwiązaniu 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 w ostatnich wydaniach OpenWrt czy LEDE (
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-ip6tables ip6tables
(pakiety te są domyślnie już instalowane w OpenWrt czy LEDE. Należy pamiętać że Gargoyle NIE JEST kompilowane ze wsparciem dla IPv6) oraz obsługi tunelu HE, w tym przypadku realizuje to pakiet
6in4Sama 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"
- 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ół 41, nie port 41). 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 -e 6in4-henet
...
Sat Aug 19 07:44:08 2017 user.notice 6in4-henet: update 1/3: timeout
Sat Aug 19 07:44:51 2017 user.notice 6in4-henet: update 2/3: nochg 95.160.xxx.xxxx
Sat Aug 19 07:44:51 2017 user.notice 6in4-henet: updated