Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 Instalacja ipv6 na OpenWrt tunel hertbeat
 
 
Instalacja ipv6 na OpenWrt tunel hertbeat Drukuj Email
Wpisany przez rpc   
sobota, 10 października 2009 23:09


Instalacja ipv6 na OpenWrt tunel typu heartbeat - 8.09
, 10.03.x

Co prawda do pełnego wykorzystania ipv6 droga jeszcze daleka (portale internetowe oraz usługodawcy internetowi nie wykazują pośpiechu) już teraz można korzystać z tego protokołu w pełni automatycznie. Jednym z plusów IPv6 to niemaskowany zakres adresów IP dla każdego hosta w danej sieci. Metodą na zastosowanie nowego standardu jest stworzenie i utrzymanie tunelu ipv6. Po skonfigurowaniu, całość działa bezobsługowo, nie występują więc problemy z zarządzaniem. Różnica w stosunku do standardu poprzedniego polega na wyświetlaniu innego adresu strony www.(np. www.google.pl ukaże się jako ipv6.google.com). Instalacja ipv6 sprowadza się do wykonania niżej podanych czynności. Jest to sposób najprostszy i najszybszy, co prawda w sieci dostępne są opisy konfiguracji różniące się od przedstawionego rozwiązania.

Opisany sposób został przetestowany z OpenWrt Kamikaze/Backfire na modemie AG241V2-EU oraz routerze WR1043ND.


Wymagania

Utworzenie tunelu typu hertbeat wymaga bezpośredniego dostępu do internetu - w skrócie należy mieć adres publiczny jednakże może on być dynamiczny.


Instalacja

Należy zainstalować następujące pakiety:

opkg install kmod-ipv6 kmod-ip6tables ip6tables kmod-ip6-tunnel kmod-tun aiccu radvd ntpclient kmod-sit kmod-gre


Tworzenie tunelu

Tunel ipv6 można założyć w darmowym serwisie sixxs www.sixxs.net:

*wchodzimy na stronę www.sixxs.net
*klikamy na opcję „Signup for new users”
*wybieramy opcję „direct signup”
*wypełniamy poszczególne pola i klikamy „Submit Signup”
*dostajemy maila w którym widnieje link potwierdzający założenie konta
*po utworzeniu konta logujemy się do serwisu sixxs korzystając z „Login for existing users”
*po zalogowani wybieramy opcję „request tunnel” i wybieramy typ tunelu. Opis dotyczy tunelu „heartbeat” należy go więc wybrać. W trakcie zakładania tunelu warto jest wybrać najbliższego dostawcę tunelu, proponowany usługodawca to „PoP Name  plwaw01” . Jest to ICM umiejscowiony w Polsce
*po założeniu konta otrzymamy dwie wiadomości. Pierwsza to, potwierdzenie o przyjęciu wniosku o tunel do kolejki. Druga wiadomośc zawierać będzie adres ip bramy i końca naszego tunelu, nazwę użytkownika oraz numer (id) Tunelu

UWAGA: zakładamy tylko jeden tunel. Serwis sixxs punktuje każde założenie tunelu. My chcemy otrzymać oprócz tunelu również i podsieć dla naszych komputerów więc każdy punkt się liczy na początku. Założenie tunelu to łącznie 15 pkt.Przykładowy adres ipv6 otrzymany do utworzenia tunelu:

The SixXS Staff have honored your request for a tunnel with the following
specifications:
-------
Tunnel Id : T13903
PoP Name : plwaw01 (pl.icm [AS8664])
Your Location : Warszawa, pl
SixXS IPv6 : 2001:6a0:200:3d::1/64
Your IPv6 : 2001:6a0:200:3d::2/64
SixXS IPv4 : 193.219.28.26
Tunnel Type : Dynamic (heartbeat)


Konfiguracja

Konfigurujemy klienta aiccu dla tunelu „heartbeat” w OpenWrt

root@OpenWrt:~# cat /etc/config/aiccu.conf


config aiccu
option username         '????-SIXXS''
option password         '???????????'
option protocol         'tic'
option server           'tic.sixxs.net'
option interface        'sixxs'
option tunnel_id        'T13903'
option requiretls       '0'
option defaultroute     '1'
option nat              '1'
option heartbeat        '1'



Testujemy tunel ipv6. Uruchamiamy aiccu:

/etc/init.d/aiccu start


zostanie utworzony tunel ipv6. Aby się upewnić, wydajemy 'ifconfig':

root@OpenWrt:~# ifconfig
...

sixxs     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet6 addr: 2001:6a0:200:3d::2/64 Scope:Global
inet6 addr: fe80::4a0:200:3d:2/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Metric:1
RX packets:1932 errors:0 dropped:0 overruns:0 frame:0
TX packets:1120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:527624 (515.2 KiB)  TX bytes:144799 (141.4 KiB)


Jak widać został założony interfejs „sixxs”. Już teraz można sprawdzić jak działa ipv6:

root@OpenWrt:~# ping6 www.sixxs.net
PING www.sixxs.net (2001:838:1:1:210:dcff:fe20:7c7c): 56 data bytes
64 bytes from 2001:838:1:1:210:dcff:fe20:7c7c: seq=0 ttl=47 time=130.770 ms
64 bytes from 2001:838:1:1:210:dcff:fe20:7c7c: seq=1 ttl=47 time=132.424 ms
64 bytes from 2001:838:1:1:210:dcff:fe20:7c7c: seq=2 ttl=47 time=129.322 ms
64 bytes from 2001:838:1:1:210:dcff:fe20:7c7c: seq=3 ttl=47 time=136.360 ms
64 bytes from 2001:838:1:1:210:dcff:fe20:7c7c: seq=4 ttl=47 time=136.191 ms
^C
--- www.sixxs.net ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 129.322/133.013/136.360 ms


Jednym z wymogów otrzymania 5pkt w serwisie sixxs, jest utrzymanie tunelu przez okres 1 tygodnia. Mając dodatkowe punkty można wypełnić wniosek o otrzymanie zakresu adresów dla wszystkich hostów w obrębie jednej sieci. Potrzebujemy do tego 14 pkt.

Po zalogowaniu się do serwisu SIXXS i wybieramy zakładkę „Request subnet”. Wypełniamy wniosek o nową podsieć, wysyłamy i poraz kolejny otrzymamy dwie wiadomości. Pierwsza z nich to potwierdzenie otrzymanie wniosku, druga zawierać będzie szczegółowe dane otrzymanej podsieci. Przykład otrzymanych parametrów sieci:

The SixXS Staff have honored your request for a subnet on the following
tunnel:
-------
PoP Name : plwaw01 (pl.icm [AS8664])
Subnet IPv6 : 2001:6a0:16b::/48
Routed to : 2001:6a0:200:3d::2/64
Your IPv4 : heartbeat


Konfiguracja demona radvd, pozwala na przydział adresów dla hostów naszej sieci:

root@OpenWrt:~# cat /etc/config/radvd.conf
config interface
option interface        'lan'
option AdvSendAdvert    1
option AdvManagedFlag   0 #musi być włączone jeśli używamy dhcpv6 i przydzielamy adres po dhcpv6
option AdvOtherConfigFlag 0 #musi być włączone jeśli używamy dhcpv6 i przydzielamy adres po dhcpv6
option 'MinRtrAdvInterval' '3'
option 'MaxRtrAdvInterval' '10'
option ignore           0

config prefix
option interface        'lan'
# If not specified, a non-link-local prefix of the interface is used
option prefix           '2001:6a0:16b:1111::/64'
option AdvOnLink        1
option AdvAutonomous    1 #musi być wyłączone jeśli używamy dhcpv6 i przydzielamy adres po dhcpv6
option AdvRouterAddr    1
option 'AdvValidLifetime' '7200'
option 'AdvPreferredLifetime' '7200'
option ignore           0

config rdnss
option interface        'lan'
# If not specified, the link-local address of the interface is used
option addr             ''
option ignore           1


Otrzymaliśmy zakres naszej sieci z czego utworzyliśmy sobie podsieć dodając 1111 (po wyjaśnienia odnoście adresacji sieci w ipv6 odsyłam do internetu).

W końcowej fazie ustawiamy adres ipv6 routera:

root@OpenWrt:~# cat /etc/config/network


config interface lan
option ifname   eth0
option proto    static
option ipaddr   10.0.0.1
option netmask  255.255.255.0
option ip6addr  2001:6a0:16b:1111::1/64

config 'interface' 'sixxs_wan'
option 'ifname' 'sixxs'
option 'proto' 'none'


Nadaliśmy zatem adres ip ipv6 dla naszego interfejsu lan. 2001:6a0:16b:1111::1/64 oraz dodaliśmy nowy interfejs aby zgrać to z firewall w openwrt.


Jeżeli wszystkie kroki zostały należycie wykonane powinniśmy cieszyć się działającym protokołem ipv6. Po podłączeniu komputera z dowolnym systemem operacyjnym, automatycznie obok adresu ipv4 zostanie przydzielony adres ipv6. !UWAGA! Wprzypadku 'windows xp' konieczne jest wydanie komendy: „netsh interface ipv6 install”. Aby sprawdzić poprawne funkcjonowanie ipv6 należy wejść na stronę ipv6.google.com, bądź spróbować ten adres spingować.


Teraz wystarczy włączyć na stałe uruchamianie demonów aiccu i radvd

/etc/init.d/aiccu enable
/etc/init.d/radvd enable


Jeszcze słówko o aiccu i hotplug. Otóż nie zawsze aiccu w kamikadze dobrze radzi sobie z adresem zmiennym ipv4. Bywa że wywala się w powietrze i potem nie startuje. Prostym rozwiązaniem jest wykorzystanie do tego celu hotpluga.

Tworzymy plik w katalogu /etc/hotplug.d/iface:

touch /etc/hotplug.d/iface/80-aiccu

o zawartości:

#!/bin/sh
[ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ] && /etc/init.d/aiccu stop
[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && rdate ntp.task.gda.pl && /etc/init.d/aiccu start

Teraz jak tylko pojawi się interfejs ppp0(modemy adsl/dsl połączenie pppoe/pppoa - adres ipv4 zmienny) automatycznie uruchomi nam się aiccu i jednocześnie zsynchronizuje datę.


Ps. W Backfire plik w hotplug istnieje. Jednakże aby wszystko działało bez problemów należy wprowadzić poniższe modyfikację:

mv /etc/hotplug.d/ifup/40-rdate /etc/hotplug.d/ifup/30-rdate
mv /etc/hotplug.d/ifup/30-aiccu /etc/hotplug.d/ifup/80-aiccu

Zawartość pliku /etc/hotplug.d/ifup/80-aiccu musimy zmodyfikować ponieważ domyślny działa błędnie. Zawartość pliku /etc/hotplug.d/ifup/80-aiccu winna wyglądać następująco:

#!/bin/sh
[ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ] && /etc/init.d/aiccu stop
[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && rdate ntp.task.gda.pl && /etc/init.d/aiccu start



Jeszce parę słów o firewallu. Jest to tylko parę regułek które wystarczą do wstępnego uruchomienia:

w pliku /etc/config/firewall należy dopisać

config rule
option proto    41
option target   ACCEPT
 option family    ipv4

config rule   # potrzebne dla tunelu typu hertbeat
option dest_port        3740
option target   ACCEPT
 option family    ipv4


generalnie to przerobimy trochę plik /etc/config/firewall tak aby był jasny podział na reguły ipv4 i ipv6.

Pełna konfiguracja powinna wyglądać następująco:

config defaults
option syn_flood        1
option input            ACCEPT
option output           ACCEPT
option forward          REJECT
# Uncomment this line to disable ipv6 rules
#       option disable_ipv6     1

config zone
option name             lan
option network          'lan'
option input            ACCEPT
option output           ACCEPT
option forward          REJECT

config zone
option name             wan
option network          'wan'
option input            REJECT
option output           ACCEPT
option forward          REJECT
option masq             1
option mtu_fix          1
option family           ipv4

config zone
option name             'sixxs_wan'
option network          'sixxs_wan'
option input            REJECT
option output           ACCEPT
option forward          REJECT
option mtu_fix          1
option family           ipv6

config forwarding
option src              lan
option dest             wan
option family           ipv4

config forwarding
option src              lan
option dest             'sixxs_wan'
option family           ipv6


# We need to accept udp packets on port 68,
# see https://dev.openwrt.org/ticket/4108
config rule
option src              wan
option proto            udp
option dest_port        68
option target           ACCEPT
option family           ipv4

config rule
option src              wan
option proto            41
option target           ACCEPT
option family           ipv4

config rule
option src              wan
option proto            tcp
option dest_port        22
option target           ACCEPT
option family           ipv4

# Allow IPv4 ping
config rule
option src              wan
option proto            icmp
option icmp_type        echo-request
option family           ipv4
option target           ACCEPT

# Allow essential incoming IPv6 ICMP traffic
config rule
option src              'sixxs_wan'
option proto    icmp
list icmp_type          echo-request
list icmp_type          destination-unreachable
list icmp_type          packet-too-big
list icmp_type          time-exceeded
list icmp_type          bad-header
list icmp_type          unknown-header-type
option limit            1000/sec
option family           ipv6
option target           ACCEPT

# Allow essential forwarded IPv6 ICMP traffic
config rule
option src              'sixxs_wan'
option dest             *
option proto            icmp
list icmp_type          echo-request
list icmp_type          destination-unreachable
list icmp_type          packet-too-big
list icmp_type          time-exceeded
list icmp_type          bad-header
list icmp_type          unknown-header-type
option limit            1000/sec
option family           ipv6
option target           ACCEPT

#ssh ipv6
config rule
option src              'sixxs_wan'
option proto            tcp
option dest_port        22
option target           ACCEPT
option family           ipv6

#http/https ipv6
config rule
option src              'sixxs_wan'
option proto            tcp
option dest_port        80
option target           ACCEPT
option family           ipv6

config rule
option src              'sixxs_wan'
option proto            tcp
option dest_port        443
option target           ACCEPT
option family           ipv6


config rule
option src              wan
option proto            tcp
option dest_port        80
option target           ACCEPT
option family           ipv4

config rule
option src              wan
option proto            tcp
option dest_port        443
option target           ACCEPT
option family           ipv4


# include a file with users custom iptables rules
config include
option path /etc/firewall.user

Adres ma nieoczekiwany identyfikator interfejsu - czyli adresy tymczasowe ipv6 zmieniają się po każdym restarcie komputera
Przyczyną na windows jest to, iż na routerze lokalnym skonfigurowane jest anonsowanie prefiksu globalnego. Domyślnie w sposób automatyczny konfigurowany jest adres tymczasowy oparty na prefiksie globalnym.
Rozwiązaniem jest wyłączenie adresów tymczasowych, używając polecenia netsh interface ipv6 set privacy state=disabled

Pod windows vista i 7 może pomóc opcja: netsh interface ipv6 set global randomizeidentifiers=disabled


Konfiguracja radvd+dhcpv6 czyli przydzielanie adresów poprzez dhcpv6 a trasy domyślnej poprzez radvd.

Instalujemy wide-dhcpv6-server w openwrt

opkg install wide-dhcpv6-server

Oraz edytujemy plik /etc/dhcp6s.conf. Jeśli go nie ma to tworzymy go.

touch /etc/dhcp6s.conf

Zawartość pliku dhcp6s.conf winna wyglądać następująco:

option domain-name-servers 2001:470:20::2;
option domain-name "domena.dyndns.org";
#option ntp-servers 2001:6a0:16b:1111::1;

host rpc-vista {
duid 00:01:00:06:14:ad:f7:8f:00:1c:c4:c8:1e:28;
#address 2001:6a0:16b:1111::4 infinity;
address 2001:6a0:16b:1111::4 1800 7200;
};

host rpc-xp {
duid 00:01:00:01:12:b6:e7:fd:00:1e:ec:08:44:97;
#address 2001:6a0:16b:1111::5 infinity;
address 2001:6a0:16b:1111::5 1800 7200;
};


interface eth0 {
address-pool domena.dyndns.org 3600;
preference 10;
};

pool domena.dyndns.org {
range 2001:6a0:16b:1111 ::1000 to 2001:6a0:16b:1111::2000 ;
};

Plik /etc/config/radvd winien wyglądać następująco:

config 'interface'
option 'interface' 'lan'
option 'AdvSendAdvert' '1'
option 'AdvManagedFlag' '1'
option 'AdvOtherConfigFlag' '1'
option 'AdvLinkMTU' '1280'
option 'MinRtrAdvInterval' '3'
option 'MaxRtrAdvInterval' '10'
option 'ignore' '0'

config 'prefix'
option 'interface' 'lan'
option 'AdvOnLink' '1'
option 'AdvAutonomous' '0'
option 'prefix' '2001:6a0:16b:1111::/64'
option 'AdvRouterAddr' '1'
option 'AdvValidLifetime' '7200'
option 'AdvPreferredLifetime' '7200'
option 'ignore' '0'

config 'rdnss'
option 'interface' 'lan'
option 'addr' ''
option 'ignore' '1'


Po składnię odsyłam do dokumentacji radvd i wide-dhcp6-server.


Windows Vista i 7 tak naprawdę tutaj nic nie musimy konfigurować. Adres zostanie pobrany automatycznie z pozostałymi informacjami. Będzie skonfigurowany tylko adres przydzielony. Nie wygeneruje się automatycznie adres na podstawie MAC bo nie ma takiej potrzeby.


Jeszcze mała uwaga. Co to DUID ?. Otóż w ipv6 nie przewidziano przydzielania adresów poprzez MAC. Za to wymyślono coś takiego jak DUID. Jest to niepowtarzalny identyfikator generowany na podstawie czasu,typu interfejsu i adresu MAC (zakładam standardową metodę generowania DUID LLT - są krótsze identyfikatory ale tu patrz dokumentacja ipv6). Ponieważ DUID-LLT ma w sobie zawarty czas wygenerowania więc jest bardzo mało realne, ze wygenerowany numer kiedykolwiek się powtórzy.  Adres DUID jest generowany tylko raz na danej maszynie i jest TYLKO jeden dla wszystkich interfejsów. Pod windows7/vista DUID generowany jest na podstawie pierwszego interfejsu, który nawiązał połączenie. Potem pozostaje niezmienny przypisany do komputera na stałe. Nawet jeśli wymienimy kartę sieciową na inną nie zmieni się. W praktyce windows7/vista generują go i przechowują w rejestrze (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID) , zaś w innych systemach lub klientach dhcp (np.dibbler) przechowywany jest w pliku tekstowym (client-duid np. w windows C:\Program Files\dibbler\client-duid).

W systemie Windows 7 i VISTA odczytujemy go wydając komendę

ipconfig /all

Tam go znajdziesz.


W windows XP niestety nie ma wsparcia natywnego dla DHCPv6. Ale można sobie doinstalować program Dibbler (skompilowany prawie na wszystkie systemy). Usługa dhcpv6 dibbler będzie pracowała cały czas monitorując interfejsy i pobierając adresy dhcp wersji 6 i odpowiednio konfigurując windows. DUID generowany jest podczas pierwszego uruchomienia programu i odczytamy go z pliku "Client View Log File.txt". Oczywiście tak jak i poprzednio dibbler można konfigurować na różne sposoby - tu odsyłam do dokumentacji. Najprostsza konfiguracja klienta dhcpv6 dibbler na kliencie to pusty plik.

Pod linux albo instalujemy sobie clienta dibbler albo wide-dhcp6-client.


Generowanie/zmiana DUID:

Pod windows7/vista powinno wystarczyć usuniecie zmiennej Dhcpv6DUID (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID). Windows sam wygeneruje od nowa identyfikator DUID.W dibbler czy wide-dhcp6-client wystarczy usunąć plik z wygenerowanym identyfikatorem DUID (np.w dibbler client-duid). Piszę bo może się zdażyć, iż ktoś będzie chciał klonować komputery wtedy te metody będą konieczne do zmiany identyfikatora, który NIGDY NIE może się powtarzać.


Ps.

Jest możliwość tak skonfigurowania dhcpv6 server, że adresy nadal będą się generowały po adresie MAC (EUI-64), trasy nadaje radvd a dhcpv6 podaje tylko domenę, dns, ntp, nis. Zresztą jest naprawdę wiele możliwości konfiguracji ale tu znów odsyłam do dokumetacji.

Serwerów DHCPv6 w przeciwieństwie do ipv4(może być tylko jeden) może być więcej niż jeden. Klient może (w zależności od konfiguracji) wybrać serwer dhcp, ten który ma najwyższą ważność (opcja preference, maksymalna wartość to 255).



Wymagania kompilacji

W przypadku kiedy chcemy sami sobie z kompilować 8.09.2 zaznaczasz poniższe opcje:

ipv6->aiccu
ipv6->radvd

w zasadzie to wystarczy (po wybraniu dwóch powyższych automatycznie wybiorą się poniższe opcje) ale sprawdź czy poniższe opcje są zaznaczone bo są wymagane

Ipv6->ip6tables
Network->Time Synchronizacion->ntpclient
Kernel modules->Netfilter Extension->kmod-ip6tables
Kernel-modules->Network Support->kmod-ipv6
Kernel-modules->Network Support->kmod-gre
Kernel-modules->Network Support->kmod-sit
Kernel-modules->Network Support->kmod-tun




Podziel się tą informacja z innymi:
Poprawiony: czwartek, 29 marca 2012 20:22