Techblog: Linksys WRT54GL vs IPv6
Jakiś czas temu pisałem o tym, jak zdobyć swój własny numer IPv6. Problem z takim numerem (pozyskanym poprzez zestawienie tunelu) w małych, domowych sieciach, polega na tym, iż A] w przypadku zmiennego adresu IP tunel trzeba ręcznie przestawić na nowy adres oraz B] trudno w ten sposób przydzielić numeru IPv6 wszystkim komputerom w sieci lokalnej. Nie stanowi to jednak problemu dla posiadaczy kultowego, jeśli nie nawet legendarnego routera Linksysa WRT54. Posiadasz go, pożądasz numerów IPv6 dla całej sieci i nie wiesz jak się za całość zabrać? Zatem zapraszam do lektury.
Zacznijmy od wymagań, które nie są wygórowane:
- router kompatybilny z DD-WRT,
- DD-WRT v24-sp1 (wszystko poza wersjami VPN, Micro i Mini),
- tunel IPv6 z Hurricane Electric.
Mając całość można zestawić całkiem stabilny tunel i wdrożyć IPv6 we własnej sieci. Przejdźmy do pierwszego punktu wdrożenia IPv6 w naszej sieci. Przystosujmy DD-WRT do działania z protokołem IPv6.
Przejdźmy do strony WWW odpowiedzialnej za konfigurację routera. W dziale Administration wybieramy kartę Management i wykonujemy zmiany w sekcji IPv6 Support:
- IPv6: Enable,
- Radvd enable: Enable,
- Radvd config:
interface br0 {
AdvSendAdvert on;
# Tutaj podajemy otrzymaną przez nas podsieć
prefix 2001:470:1f0b:51d::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
Teraz przechodzimy do działu Administration oraz karty Commands, w sekcji Startup dodajemy poniższy kod:
# ładowanie modułów wymaganych dla obsługi IPv6
insmod ipv6
insmod /jffs/lib/modules/2.4.34/ip6_tables.o
insmod /jffs/lib/modules/2.4.34/ip6table_filter.o
insmod /jffs/lib/modules/2.4.34/ip6t_multiport.o
# poniżej znajdują się dane otrzymane od HE, adres Linksysa w sieci lokalnej to 192.168.1.1
ip tunnel add he-ipv6 mode sit remote 216.66.80.30 local 192.168.1.1 ttl 64
ip link set he-ipv6 up
ip addr add 2001:0470:1f0a:51d::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip addr add 2001:470:1f0b:51d::1/64 dev br0
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
radvd -C /tmp/radvd.conf
Jeszcze tylko drobny dodatek do sekcji Firewall:
/usr/sbin/iptables -I INPUT 2 -p ipv6 -i vlan1 -j ACCEPT
Po restarcie powinniśmy uzyskać nie tylko tunel, którego końcem jest Linksys, ale również możliwość komunikacji w sieci przy pomocy automatycznie wygenerowanych numerów IPv6. Teraz należałoby zabezpieczyć się przed zmianą dynamicznie przydzielonego adresu IPv4, który jest wykorzystywany do zestawiania tunelu. Na całe szczęście, napisany przeze mnie skrypt wykorzystuje program wget, który jest dostępny w standardowej edycji DD-WRT.
Przechodzimy zatem do działu Administration oraz karty Commands i w sekcji Custom dodajemy poniższy kod:
ZMIENNA=`ifconfig | grep 'inet ' | tail -n 1 | cut -d' ' -f12 | sed s/addr://`
wget 'http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b='$ZMIENNA'&pass=TUTAJ_JEST_PASS&user_id=TUTAJ_JEST_USER_ID&tunnel_id=TUTAJ_ID_TUNELU' -O /dev/null
Niezbędne dane pozyskamy logując się na stronie HE (user_id oraz tunnel_id), a zmiennej pass nadajemy wartość będącą skrótem (MD5SUM) naszego hasła wykorzystywanego na stronach HE. Sam skrypt będzie po prostu informował (korzystając z IPv4) HE o zmianie nasze zewnętrznego IP, a zatem o zmianie położenia jednego z krańców tunelu. Aby miał on sens należy go wykonywać, co jakiś czas. W tym celu użyjemy Crona. Wystarczy przejść do działu Administration, wybrać kartę Management i wykonać zmiany w sekcji Cron:
- Cron: Enable,
- Aditional Cron jobs:
*/15 * * * * * sh /tmp/custom.sh &
Voila! Od teraz, po restarcie, całość powinna ładnie działać. Można się jeszcze dodatkowo pokusić o postawienie na routerze firewalla obsługującego IPv6, ale to historia na zupełnie nowy wpis. Natomiast do powyższego skryptu warto jeszcze dorzucić jeszcze aktualizację wpisów w FreeDNS.afraid.org - dzięki temu możemy stworzyć wpisy np. router.example.com, który zawsze będzie wskazywać poprawny adres IPv4 routera.
Całość stworzona dawno temu na bazie własnego doświadczenia oraz informacji dostępnych na DD-WRT Wiki.
PS. Jeżeli coś jest niezrozumiałego w powyższym tekście to piszcie śmiało! I nie przesadzajcie z długością własnych skryptów, są one zapisywane w NVRAM, a jeden z bugów w DD-WRT potrafi nadpisać bardziej istotne dane przy dłuższych skryptach. Lepiej wykonać SD-MOD routera i skrypty zapisywać na dysku, a w NVRAM jedynie odnośniki do nich.
Komentarze:
1. kravietz dnia 2009-02-01 o 20:03:46 powiedział(a):
Wydaje mi się że w polskich warunkach bardziej efektywny będzie tunel do SIXXS, które ma punkt dostępowy w Polsce (ICM).
2.
Zal dnia 2009-02-01 o 20:24:42 powiedział(a):
@kravietz: Zapewne byłoby to lepsze rozwiązanie, ale dostęp miałem jedynie do tunelu udostępnianego przez HE. Z tego, co pamiętam, to procedura przyznawania tuneli przez HE jest mniej wymagająca. Zwykła rejestracja vs prośba.
Ale mogę się mylić ;]
3. maciek dnia 2010-02-13 o 10:25:48 powiedział(a):
Tylko na DD-WRT można zrobić takie cuda? Kombinuję właśnie przy Tomato, i słaaabe efekty :s
4.
Zal dnia 2010-02-13 o 13:07:33 powiedział(a):
@maciek: Nie testowałem Tomato, więc ne będę się na ten temat wypowiadać.