#acl All:read <> = IPv6 installálása OpenWrt routerre = == Melyik OpenWrt verzió használható? == Az !OpenWrt White Russian RC5 és RC6-os verziója támogatja az itt leírt beállításokat. Hasonlóan lehet használni az X-wrt-t is. Későbbi változatok mint Kamikaze, Backfire szintén hasznélhatóak. == 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 1. kernel modul ipv6 támogatáshoz: {{{ ipkg install kmod-ipv6 }}} 1. 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 felé tudjunk IPv6 Router Advertisment üzeneteket tudjunk küldeni. {{{ ipkg install radvd ipkg install ip }}} === 2.opcionális csomagok === 1. IPv6 tűzfal használatához a kmod-ip6tables csomagot kell telepíteni. {{{ ipkg install kmod-ip6tables }}} 1. 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 IPv6 cím konfigurálva lett loopback interfészre. {{{ # 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 (10.1 KiB) }}} 1. 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 -L}}} 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 }}} 1. 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 tunnel protokollja). Ha ezt nem tesszük, akkor az IPv6 tunnel egy idő múlva leáll ha nincsen ipv6-os forgalom. {{{ 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 = Több lehetőség közül lehet választani, az egyik a [[6to4_for_ipv6|6to4]] (bárhol működik, ahol az Internet szolgáltató publikus IPv6 címeket oszt), a másik lehetőség akkor áll fenn, ha egy IPv6-al rendelkező pont közelében vagyunk ahol tudnak nekünk IPv6 tunnelt biztosítani. Ez lehet egy {http://www.sixxs.net SixXS} IPv6 tunnel is. [[openwrt_native_ipv6|Natív IPv6 beállítása OpenWrt alatt]] == 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 tunel bootols'kori automatikus indításához a következő szkriptet az {{{/etc/init.d/S42tun6to4}}} fájlba kell írni: {{{ #!/bin/sh # 6to4 tunnel # 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." ;; stop) #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." ;; restart) 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 PPPoE 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 meg a megfelelő paraméterekkel és környezeti változokkal. 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 (azaz azt a prefixeket amit a scriptben definiáltunk). A fenti konfigurációs script ifup részét érdemes kiegészíteni egy olyan paranccsal amely belerúg router advertisement daemonba amikor a ppp kapcsolat felépül és már tudjuk a 6to4 címet, hogy az aktuális prefix paramétereket tudja hirdetni a radvdv. {{{ }}} Bővebb információ a 6to4-ról [[6to4_for_ipv6|itt]] található A fenti 6to4 konfiguációk esetén alkalmazott 192.88.99.1 cím is egy olyan cím, amely a legközelebbi 6to4 relay routerhez irányít. == Internetkapcsolat statikus alagút segítségével == '''Megjegyzés''': ennek a szkriptnek bármely tunnelbrokerrel működnie kell. Jelen esetben a SixXs tunnelbrokert 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 {{{traceroute}}}-ok lassúak. A {{{traceroute6}}} 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 tunnel 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 tunnel-el dolgozunk. {{{ # AICCU konfiguracio # login informacio username 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 # 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 pl. 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 tunnelbroker 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 advisertisment daemon-t. Egészen pontosan arról van szó, hogy az tunnelbroker szolgáltatónál kérni kell egy alhálózatot és azt engedélyeztetni kell. 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. == LAN konfiguráció változó IPv4 címek esetében == Ez akkor szokott előfordul, ha pppoe vagg dhcp-vel állandóan változó IPv4 címünk van. 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. = Debugolási tanácsok = Néhány tanács olvasható az [[http://wiki.openwrt.org/IPv6_howto|OpenWrt]] honlapján. A következő parancsok ajánlottak: {{{ ip addr show ip route show ip -6 route show }}} = Linkek = * [[http://www.757.org/~joat/wiki/index.php/IPv6_on_the_WRT54G_via_OpenWRT|IPv6 on OpenWrt with Hurricane Electric]] * [[http://www.join.uni-muenster.de/TestTools/IPv6_Verbindungstests.php|JOIN IPv6 Test Page (ping, traceroute, tracepath)]] * [[http://www.litech.org/radvd/|Route Advertising Daemon Homepage]] * [[http://www.bieringer.de/linux/IPv6/index.html|Peter Bieringer's IPv6 HOWTO]] * [[http://www.dd-wrt.com/wiki/index.php/IPv6|DD-WRT IPv6 ]] * [[http://ezine.daemonnews.org/200101/6to4.html|*BSD 6to4 leiras]] * [[http://wiki.openwrt.org/IPv6_howto|IPv6 openwrt howto]] * [[http://www.vsix.net/other/guide/openwrt/part3/openwrt_ipv6_network_setup.htm|openwrt ipv6 setup koreaiul]]