IPv6 installálása OpenWrt routerre
Melyik OpenWrt verzió használható?
Az OpenWrt White Russian RC6-os verziója támogatja az itt leírt beállításokat.
Milyen RFC-ket támogat az OpenWrt IPv6?
- Szokásos IPv6 funkcionalitás Linux
- plusz:
- Configured tunnels RFC 2893
- 6to4 RFC 3056
Milyen csomagokat kell telepíteni?
1.kötelező csomagok
Ezeket mindenképpen fel kell telepíteni ahhoz, hogy a routeren IPv6-ot használhassunk
- kernel modul ipv6 támogatáshoz:
ipkg install kmod-ipv6
- IPv6 routing szoftver - Az interfészek és routing táblák konfigurálásához fel kell telepítenünk az új iputils csomagot, valamint a route advertising daemon is kell, ahhoz, hogy az alhálózat fele terjesszük az IPv6 útvonalakat.
ipkg install radvd ipkg install ip
2.opcionális csomagok
- IPv6 tűzfal használatához a kmod-ip6tables csomagot kell telepíteni.
ipkg install kmod-ip6tables
- IPv6 tűzfal konfigurálásához az ip6tables csomagot kell telepíteni.
ipkg install ip6tables
IPv6 beállítása OpenWrt-t futtató routeren
1.Az IPv6 modul indítása automatikusan megtörténik a router újraindításakor a '/etc/modules.d/20-ipv6' által. Újraindítás nélkül is lehetséges a kernel modul kernelbe töltése az 'insmod ipv6' paranccsal. Ezek után a router már IPv6 képes. Ezt ellenőrizhetjük az 'ifconfig' paranccsal, mellyel kideríthetjük, hogy a „::1/128”-as inet6 cím hozzá lett kötve a loopback interfészhez.
- # ifconfig lo
- lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:116 errors:0 dropped:0 overruns:0 frame:0 TX packets:116 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:10395 (10.1 KiB) TX bytes:10395 (1 0.1 KiB)
- lo Link encap:Local Loopback
2.Opcionálisan be lehet tölteni a tűzfal moduljait is:
- insmod ip6_tables insmod ip6_table_filter
Az indításkori betöltéshez a /etc/modules.d/20-ipv6-hoz vagy /etc/modules-hoz a következőt adjuk hozzá:
- ip6_tables ip6_table_filter
A betöltés megtörténtének ellenőrzéséhez az 'ip6_tables' show parancs használható
- # ip6tables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
3.A tűzfal beállításainál a szkripthez hozzá kell adni a következőket annak érdekében, hogy a tűzfal átengedje az IPv4-be ágyazott IPv6 csomagokat: iptables -A INPUT -p 41 -i $WAN -j ACCEPT Ha a router egyben hálózati címfordító is (NAT), akkor a következő sorokat is hozzá kell adni, hogy a NAT táblába ne kerüljön bele a 41-es protokoll (ami az IPv6 az IPv4-ben protokollja, neve: 6in4). Ha ezt nem tesszük, akkor az IPv6 alagút egy idő múlva leáll.
- iptables -t nat -D POSTROUTING -o $WAN -j MASQUERADE iptables -t nat -A POSTROUTING --protocol ! 41 -o $WAN -j MASQUERADE
Ezt a megfelelő helyre kell írni a tűzfal szkriptjében. Rögtön az előző parancs elé, vagy után.
IPv6 Internetkapcsolat beállítása
- Két lehetőség közül lehet választani, az egyik a 6to4 (bárhol működik), a másik lehetőség akkor áll fenn, ha egy Point of Presence közelében vagyunk, ez pedig a SixXS alagút. 6to4 kapcsolat beállítása közvetlen Internetkapcsolat esetén Ez a lehetőség akkor működik, ha a router WAN portja egy DHCP-vel vagy statikusan osztott Ipv4 címet kap. A 6to4 alagút boot időbeli automatikus indításához a következő szkriptet az '/etc/init.d/S42tun6to4' fájlba kell írni:
#!/bin/sh
# 6to4 alagut
# a publikus ipv4 cím lekerdezese ipv4=ip -4 addr | awk '/^[0-9]+[:] vlan1[:]/ {l=NR+1} /inet (([0-9]{1,3}\.){3}[0-9]{1,3})\// {if (NR == l) split($2,a,"/")} END {print a[1]}'
# ha az ipv4 cím nem valtozik azaz fix, akkor az „ipv4=82.54.194.11” is irhato
# az ipv6 prefixet az ipv4 cimbol hatarozzuk meg ipv6prefix=echo $ipv4 | awk -F. '{ printf "2002:%02x%02x:%02x%02x", $1, $2, $3, $4 }'
# a lokalis halozat, barmilyen 4 jegyu szam ipv6subnet=1234
# A 6to 4 kozvetito router, csak nehany van itt felsorolva, ajanlott az anycast hasznalata, amennyiben lehetseges # lasd: http://www.kfu.com/~nsayer/6to4/#list vagy google
# anycast: relay6to4=192.88.99.1
# uni-leipzig.de: #relay6to4=139.18.25.33
# 6to4.ipv6.bt.com #relay6to4=194.73.82.244
# microsoft #relay6to4=131.107.33.60
# japan kddilab.6to4.jp #relay6to4=192.26.91.178
case "$1" in
- start)
- echo "Creating tunnel interface..." ip tunnel add tun6to4 mode sit ttl 64 remote any local $ipv4 echo "Setting tunnel interface up..." ip link set dev tun6to4 up echo "Assigning ${ipv6prefix}::1/16 address to tunnel interface..." ip -6 addr add ${ipv6prefix}::1/16 dev tun6to4 echo "Adding route to IPv6 internet on tunnel interface via relay..." ip -6 route add 2000::/3 via ::${relay6to4} dev tun6to4 metric 1 # the following lines do not seem to be necessary # a kovetkezo sorok nem szuksegesek #ip -6 addr add ${ipv6prefix}:${ipv6subnet}::3/64 dev vlan1 #ip -6 route del ${ipv6prefix}:${ipv6subnet}::/64 dev vlan1 echo "Assigning ${ipv6prefix}:${ipv6subnet}::1/64 address to br0 (local lan interface)..." ip -6 addr add ${ipv6prefix}:${ipv6subnet}::1/64 dev br0 echo "Done." ;;
- #echo "Removing WAN (external) interface IPv6 address..." #ip -6 addr del ${ipv6prefix}:${ipv6subnet}::3/64 dev vlan1 echo "Removing br0 (internal lan) interface IPv6 address..." ip -6 addr del ${ipv6prefix}:${ipv6subnet}::1/64 dev br0 echo "Removing routes to 6to4 tunnel interface..." ip -6 route flush dev tun6to4 echo "Setting tunnel interface down..." ip link set dev tun6to4 down echo "Removing tunnel interface..." ip tunnel del tun6to4 echo "Done." ;;
- echo "=== 1. Stopping ===" /etc/init.d/S42tun6to4 stop echo "=== 2. Starting ===" /etc/init.d/S42tun6to4 start echo "=== 3. Done ===" ;;
- )
- echo "Usage: /etc/init.d/S42tun6to4 {start|stop|restart}" ;;
esac 6to4 kapcsolat beállítása PPP kapcsolat esetén
- Az itt leírt beállításokat akkor kell alkalmazni, ha az Internetszolgáltatóhoz PPP-n (általában PPPoE-n) keresztül kapcsolódunk. Amikor a PPP interfész működésbe lép, a PPP deamon meghívja a '/etc/ppp/ip-up' szkriptet, amikor leáll az interfész, automatikusan hívja a '/etc/ppp/ip-down' szkriptet. Ezek a szkriptek a '/etc/hotplug.d/iface/*'-beli szkripteket hívják a megfelelő paraméterekkel. Az IPv6 támogatásához a '/etc/hotplug.d/iface=10-ipv6' szkriptet kell írnunk a következő módon:
. /etc/functions.sh NAME=ipv6 COMMAND=/usr/sbin/ip [ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && {
[ -x $COMMAND ] && {
- IFNAME=$(nvram get ${INTERFACE}_ifname) IPV4=$(ip addr show $IFNAME | grep inet | cut -f6 -d' ') IPV6PREFIX=$(echo $IPV4 | awk -F. '{ printf "2002:%02x%02x:%02x%02x", $1, $2, $3, $4 }') ip tunnel add tun6to4 mode sit ttl 64 remote any local $IPV4 ip link set dev tun6to4 up ip -6 addr add ${IPV6PREFIX}::1/16 dev tun6to4 ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 ip -6 addr add ${IPV6PREFIX}:5678::1/64 dev br0
} &
}
[ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ] && {
[ -x $COMMAND ] && {
- IFNAME=$(nvram get ${INTERFACE}_ifname) IPV4=$(ip addr show $IFNAME | grep inet | cut -f6 -d' ') IPV6PREFIX=$(echo $IPV4 | awk -F. '{ printf "2002:%02x%02x:%02x%02x", $1, $2, $3, $4 }') ip -6 addr del ${IPV6PREFIX}:5678::1/64 dev br0 ip -6 route flush dev tun6to4 ip link set dev tun6to4 down ip tunnel del tun6to4
} &
}
- Figyelem! A radvd.conf fájlban prefixként 0:0:0:5678::/64-et kell használni. Az 5678-as alhálózat ebben az esetben kötelező.
A 6to4 protokollról
A 6to4 egy olyan protokoll, ami az IPv6-os csomagokat Ipv4-be ágyazza, és a csomagok így továbbítódnak. A protokollal IPv6-os hálózatok (szigetek) köthetőek össze az IPv4-es hálózatban. Bővebb információ: a http://www.kfu.com/~nsayer/6to4/ címen olvasható angolul. Ezen a címen olvasható egy fontos funkció, mellyel egyszerűen lehet találni relay agent-et. Az RFC3068-ban szerepel egy anycast IPv6 cím, mely segítségével megtalálható a legközelebbi relay agent. A legközelebbi relay agent használatával a jobb teljesítmény érhető el. További információk a fenti oldalon olvashatóak. A fenti '6to4 kapcsolat beállítása közvetlen internetkapcsolat esetén' részeben, a szkriptben lévő 192.88.99.1 cím is egy olyan cím, amely a legközelebbi megfelelő routerhez irányít. Ezt azonban nem minden ISP kezeli megfelelően. Internetkapcsolat statikus alagút segítségével
Megjegyzés: ennek a szkriptnek bármely alagút brókerrel működnie kell. Jelen esetben a SixXs alagút brókert használjuk.
#!/bin/sh
LOCALIP=Your IPv4 Endpoint POPIP=POP IPv4 Endpoint LOCTUN=Your IPv6 Endpoint REMTUN=SixXS IPv6 Endpoint
case $1 in start)
- echo -n "Starting SixXS.Net IPv6 tunnel: " ip tunnel add sixxs mode sit local $LOCALIP remote $POPIP ip link set sixxs up ip link set mtu 1280 dev sixxs ip tunnel change sixxs ttl 64 ip -6 addr add $LOCTUN/64 dev sixxs ip -6 ro add default via $REMTUN dev sixxs echo "Done." ;;
stop)
- echo -n "Stopping SixXS.Net IPv6 tunnel: " ip link set sixxs down ip tunnel del sixxs echo "Done." ;;
restart)
- $0 stop $0 start ;;
*)
- echo "Usage: $0 {start | stop | restart}" ;;
esac exit 0
- A helyes műdödés érdekében az „ip tunnel add sixxs” sorhoz hozzá kell adni a „ttl 64” szöveget. Enélkül is működik a kapcsolat, de a traceroot-ok lassúak. A traceroot6 parancs ezenkívül minden egyes közbülső hop-nál elvétette a „(* * *)”-ot ???. Az itt közölt beállításokkal minden rendben működik. Internetkapcsolat dinamikus SixXS.net alagút segítségével Dinamikus alagút használatához fel kell telepítenünk az 'aiccu' csomagot az 'ipkg install aiccu' parancs segítségével. Ezután a '/etc/aiccu.conf' fájlt kell szerkesztenünk. A konfigurációs fájlba be kell illesztenünk a login nevünket és jelszavunkat, konfigurálni kell az 'ipv4_interface'-t (általában vlan1). Ezenkívül kommentezzük ki a „tunnel_id” sort, amennyiben csak egyetlen alagúttal dolgozunk.
# AICCU konfiguracio
# login informacio username <your nichandle/username> password <your password>
# hasznalt interfeszek nevei ipv4_interface vlan1 ipv6_interface sixxs
# a hasznalt tunnel_id # (csak akkor szukseges, ha tobb tunnel_id van a listaban) tunnel_id <your tunnel id>
# jelenitse-e meg az informaciokat a kepernyon verbose false
# daemonként fusson-e daemonize true
# automatikusan induljon-e automatic true
- A SixXS dokumentációjában az szerepel, hogy a gépünket (routerünket) szinkronizáljuk valamely NTP (Network Time Protocol) szerverhez, mert ha az időbélyegek közötti különbség 102 másodperc fölé emelkedik a heartbeat eldobódik. Arra is figyelmeztet, hogy a megfelelő időzóna beállítsása szükséges. A sziknronizálás megoldható egy ntp kliens feltelepítésével (indításkori szinkronizáció). Az idő elcsúszás karbantartásához openntpd-t telepíthetünk. Ezek után elindíthatjuk a sixxs klienst: aiccu start
Amennyiben ez nem működne, úgy a 'logread' paranccsal járhatunk utána, hogy valójában mi is történik.
IPv6 beállítása a LAN-on
- Ebben a pontban feltételezzük, hogy rendelkezünk egy működő IPv6 kapcsolattal, és minden probléma nélkül meg tudjuk pingelni a ping6 programmal a www.kame.net-et. Ez egy olyan oldal, amit ha IPv6-on keresztül tekintünk meg, akkor mást látunk, mint ha IPv4-en keresztül érjük el. Innen tudhatjuk, hogy IPv6 kapcsolatunk él. Ha SixXS vagy más alagút brókert használunk, akkor csak a ::1 (a Point of Presence) és a ::2 (a saját végpontunk) használható, a többi nem kerül forgalomirányításra. Emiatt előbb létre kell hozni és engedélyezni egy alhálózatot, mielőtt használatba vennénk a route adviser daemon-t. Egészen pontosan arról van szó, hogy az alagút brókernél kérni kell egy alhálózatot és azt engedélyeztetni kell. A fent említett SixXS-en kívül a Hurricane Electric is egy ilyen alagút bróker. Tegyük fel, hogy van egy 2001:db8:0:f101::/64-es alhálózatunk. A következő sorokat írjuk be a '/etc/radvd.conf' fájlba, mellyel engedélyezzük alhálózatunk meghirdetését:
# For more examples, see the radvd documentation. # további informaciok a radvd dokumentaciojaban talalhatoak
interface br0 {
AdvSendAdvert on; prefix 2001:db8:0:f101::/64 {
AdvOnLink on; AdvAutonomous on;
};
- Ezek után a 2001:db8:0:f101::1 címet hozzákötjük a br0-hoz az alábbi paranccsal: ip -6 addr add 2001:db8:0:f101::1/64 dev br0
Ha azt szeretnénk, hogy ez a változtatás a következő indításkor is megmaradjon, adjuk a parancsot hozzá a '/etc/init.d/S40network' szkripthez. A /64-es alhálózatunk br0 fele történőtovábbítása automatikusan végrehajtódik az S51radvd-ben.
- A '/etc/init.d/S51radvd' fájlba be kell tenni egy route-ot, ami biztosítja a helyes működést akkor is ha az aiccu-t használjuk: ip -6 route add 2001:db8:0:f101::1/64 dev br0
Ha ezeket végrehajtottuk, akkor készen állunk arra, hogy a következő paranccsal elindítsuk az route advertising daemon-t:
- /etc/init.d/S51radvd start
A daemon tevékenységét a radvdump programmal ellenőrizhetjük.
IPv6 használata WindowsXP renszeren
Lehetőség van arra is, hogy Windows XP-nket IPv6 használatára állítsuk be. Ez a dokumentum elsősorban az OpenWrt beállításáról szól, így ezt itt most nem tárgyaljuk. További információ a http://wiki.openwrt.org/ címen olvasható a HowTo részben az IPv6 cím alatt.
Debugolási tanácsok
Néhány tanács olvasható az OpenWrt honlapján. A következő parancsokat ajánlják: ip addr show ip route show ip -6 route show
Kérdések
- Kérdés Hogyan lehet egy IPv6 6to4 címet hirdetni abban az esetben, ha a cím alapjául szolgáló IPv4 cím DHCP-vel kerül kiosztálsra. Pontosabban: hogyan automatizálható az IPv6 cím megújítása, ha a DHCP-vel osztott IPv4 cím változik? Válasz A radvd.conf fájlt a következőre kell alakítani: prefix 0:0:0:f101::/48 {
AdvOnLink on; AdvAutonomous on; Base6to4Interface ppp0; # Very short lifetimes for dynamic addresses
AdvValidLifetime 300; AdvPreferredLifetime 120;
A prefix első 3 részét 0-ra kell átírni, azaz a 2001:db8:0:f101::/48-ból 0:0:0:f101::/48 lesz. Ezután a Base6to4Interface ppp0; sort kell beilleszteni, ahol a ppp0 a WAN interfész neve. Az AdvValidLifetime és AdvPreferredLifetime értékét egy kis számra kell állítani azért, hogy az IPv4 cím változása után rövid idővel frissüljön a hirdetett IPv6 cím.
- Kérdés Milyen kapcsolatban áll az IPv4 és IPv6 cím? Válasz A kapcsolat a második IPv6 oldalon leírtaknak felel meg. Röviden: az IPv4 cím minden egyes darabját hexadecimális számmá konvertálják. Ezután a 6to4 cím alakja: 2002:hex1hex2:hex3hex4:0001::1. Ahol hex1,..,hex4 az átalakított IPv4 cím darabjai. A 2002 a 6to4 prefix, a végén egy 80 bitnyi címtartomány van felhasználásra.
Linkek
IPv6 - http://en.wikipedia.org/wiki/Ipv6 IPv6 - http://ezine.daemonnews.org/200101/6to4.html Hurricane Electric - http://tunnelbroker.net/ DD-WRT IPv6 - http://www.dd-wrt.com/wiki/index.php/IPv6 OpenWrt - http://wiki.openwrt.org/IPv6_howto OpenWrt - http://www.vsix.net/other/guide/openwrt/part3/openwrt_ipv6_network_setup.htm OpenWrt - http://www.vsix.net/other/guide/openwrt/part2/openwrt_ipv4_network_setup.htm