Pv6 - projekt do TPS
Martin Polovinčák (pol268)
Stanislav Michalec (mic223)
Softwarové požadavky
Spuštění IPv6
Základy práce se zebrou
Zjištění IPv6 adres na rozhraní
Přiřazení IPv6 adresy na rozhraní
Odebrání IPv6 adresy z rozhraní
Zobrazení aktualních cest
Přidání statické cesty přes bránu
Odevbrání statické cesty přes bránu
Přidání statické cesty přes rozhraní
Odebrání statické cesty přes rozhraní
Zobrazení tunelů
Přidání tunelu
Odebrání tunelu
Nastavení IPv6 adresy v zebře
Konfigurace ripv6
Konfigurace ospfv6
Testování připojení
Příklad včetně ukázkových konfiguračních souborů
Odkazy
Softwarové požadavky
Pro provozování protokolu IPv6 potřebujeme minimálně jádro 2.4.x. Pro používání pokročilých funkcí (jako např. IPsec) je doporučeno použít projekt USAGI (www.linux-ipv6.org).
Na jejich webu jsou k dispozici:
- patche pro jádro
- zdrojové kódy jádra s provedenými patchi
- předkompilované jádra v rpm balících
Pro používání routovacích protokolů je třeba nainstalovat potřebný software, my jsme použili zebru (www.zebra.org). Je možné rovněž použít klon zebry, který se jmenuje quagga (www.quagga.net).
Spuštění IPv6
Jádro linuxu je třeba zkompilovat s podporou protokolu IPv6.
Zjistit, zda je jádro zkompilované s podporou protokolu IPv6, je možné tak, že zjistíte, zda existuje záznam: /proc/net/if_inet6
Je možné spustit test, který vypíše zda je v jádře zkompilovaná podpora IPv6:
# test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready"
Pokud je podpora IPv6 zkompilovaná jako modul, je třeba zavést podporu IPv6 pomocí příkazu:
# modprobe ipv6
Pokud chcete spouštěch modul IPv6 automaticky při startu systému, je třeba přidat následující řádek konfiguračního souboru zavaděče modulů, obvykle modules.conf nebo conf.modules:
alias net-pf-10 ipv6
Základy práce se zebrou
Pozn.: protože ZEBRA je označení jak balíku programů, tak konkrétního programu, použijeme následující syntaxe:
- ZEBRA je balík programů (zebra, ripngd, ospf6d atd.)
- zebra je konkrétní program, který je součástí balíku ZEBRA
ZEBRA obsahuje několik programů (zebra, ripngd, ospf6d atd.), každý z nich ovládá nějakou část konfigurace. Program zebra samotný umožňuje pouze zakladní funkce jako např. přiřazení adresy na rozhraní, program ripngd je pro RIPv6 a ospf6d je pro OSPFv6.
Programy ZEBRY se obvykle spouštějí jako démoni a to pomocí příkazů jako:
# zebra -d
# ripngd -d
# ospf6d -d
Pracovat se ZEBROU můžeme dvěma způsoby:
- úpravy konfiguračního souboru
- pomocí rozhraní podobného routerům firmy CISCO
Úpravy konfiguračního souboru
Při první práci se ZEBROU musíme vždy použít tento způsob, protože je třeba nastavit heslo pro přístup telnetem. Konfigurační soubory ZEBRY jsou obvykle v adresáři /etc/zebra (někdy taky v /usr/local/zebra).
Je třeba nastavit heslo pro všechny programy ZEBRY, se kterými budeme pracovat, tzn. upravit soubory jako zebra.conf, ripngd.conf, ospf6d.conf atd, do kterých musíme přidat řádek:
password heslo
Po uložení souboru je třeba zebru (ripngd, ospf6d) restartovat.
Pomocí rozhraní podobného routerům firmy CISCO
Po nastavení hesla pro přístup a po spuštění příslušných démonů se můžeme připojit na konfigurační rozhraní pomocí příkazu telnet, a to:
# telnet localhost 2601 - pro připojení na zebru
# telnet localhost 2603 - pro připojení na RIPv6
# telnet localhost 2606 - pro připojení na OSPFv6
Po zadání přislušného hesla můžeme se ZEBROU pracovat podobně jako s CISCO routerem.
Zjištění IPv6 adres na rozhraní
- pomocí příkazu ifconfig (pro rozhraní eth0):
# /sbin/ifconfig eth0 |grep "inet6 addr:"
- pomocí příkazu ip (pro rozhraní eth0):
# /sbin/ip -6 addr show dev eth0
Přidání IPv6 adresy na rozhraní
- pomocí ifconfig
# /sbin/ifconfig inet6 add /
například:
# /sbin/ifconfig eth0 inet6 add 3ffe:ffff:0:f101::1/64
- pomocí ip
# /sbin/ip -6 addr add / dev
například:
# /sbin/ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0
Odebrání IPv6 adresy z rozhraní
- pomocí ifconfig
# /sbin/ifconfig inet6 del /
například:
# /sbin/ifconfig eth0 inet6 del 3ffe:ffff:0:f101::1/64
- pomocí ip
# /sbin/ip -6 addr del / dev
například:
# /sbin/ip -6 addr del 3ffe:ffff:0:f101::1/64 dev eth0
Zobrazení aktualních cest
- pomocí route:
# /sbin/route -A inet6
- pomocí ip:
# /sbin/ip -6 route show [dev ]
Přidání statické cesty přes bránu
- pomocí route:
# /sbin/route -A inet6 add / gw
například:
# /sbin/route -A inet6 add 2000::/3 gw 3ffe:ffff:0:f101::1
- pomocí ip:
# /sbin/ip -6 route add / via
například:
# /sbin/ip -6 route add 2000::/3 via 3ffe:ffff:0:f101::1
Odebrání statické cesty přes bránu
- pomocí route:
# /sbin/route -A inet6 del / gw
například:
# /sbin/route -A inet6 del 2000::/3 gw 3ffe:ffff:0:f101::1
- pomocí ip:
# /sbin/ip -6 route del / via
například:
# /sbin/ip -6 route del 2000::/3 via 3ffe:ffff:0:f101::1
Přidání statické cesty přes rozhraní
- pomocí route:
# /sbin/route -A inet6 add / dev
například:
# /sbin/route -A inet6 add 2000::/3 dev eth0
- pomocí ip:
# /sbin/ip -6 route add / dev metric 1
například:
# /sbin/ip -6 route add 2000::/3 dev eth0 metric 1
pozn.: metrika 1 u příkazu ip je z důvodu kompatibility s route, protože implicitní metrika u ip je 1024
Odebrání statické cesty přes rozhraní
- pomocí route:
# /sbin/route -A inet6 del / dev
například:
# /sbin/route -A inet6 del 2000::/3 dev eth0
- pomocí ip:
# /sbin/ip -6 route del / dev
například:
# /sbin/ip -6 route del 2000::/3 dev eth0
Zobrazení tunelů
# /sbin/ip -6 tunnel show
Přidání tunelu
# /sbin/ip tunnel add mode sit ttl remote local
například:
# /sbin/ip tunnel add sit1 mode sit ttl 64 remote 192.168.0.2 local 192.168.0.1
# /sbin/ip link set dev sit1 up
Odebrání tunelu
# /sbin/ip tunnel del
například:
# /sbin/ip -6 route del dev sit1
# /sbin/ip link set sit1 down
# /sbin/ip tunnel del sit1
Nastavení IPv6 adresy v zebře
- v konfiguračním souboru:
přidáme následující řádky do souboru zebra.conf:
interface
ipv6 address /
například:
interface eth0
ipv6 address 3ffe:abcd:0123:4567::/64
- v konfiguračním rozhraní (připojení pomocí telnet localhost 2601):
ipv6 address /
např.:
configure terminal
interface eth0
ipv6 address 3ffe:abcd:0123:4567::/64
write memory
Konfigurace ripv6
- v konfiguračním souboru:
router ripng
network
redistribute connected
například:
router ripng
network eth0
network eth1
redistribute connected
- v konfiguračním rozhraní (připojení pomocí telnet localhost 2603):
configure terminal
router ripng
network
redistribute connected
například:
configure terminal
router ripng
network eth0
network eth1
redistribute connected
write memory
Konfigurace ospfv6
- v konfiguračním rozhraní (připojení pomocí telnet localhost 2606):
configure terminal
router ospf6
router-id
redistribute static route-map static-ospf6
interface area
Například:
configure terminal
router ospf6
router-id 0.0.0.1
redistribute static route-map static-ospf6
interface eth0 area 0.0.0.0
interface eth1 area 0.0.0.0
interface lo area 0.0.0.0
write memory
- v konfiguračním souboru:
router ospf6
router-id
redistribute static route-map static-ospf6
interface area
Například:
router ospf6
router-id 0.0.0.1
redistribute static route-map static-ospf6
interface eth0 area 0.0.0.0
interface eth1 area 0.0.0.0
interface lo area 0.0.0.0
Testování připojení
K otestování připojení můžeme použít program ping6 nebo traceroute6.
Spuštění ping6:
# ping6
Pokud chcete otestovat ping na linkovou lokální adresu (případně na multicastovou adresu), je třeba specifikovat odchozí rozhraní, tedy:
# ping6 [-I ]
Příklady:
# ping6 ::1
# ping6 -I eth0 fe80::20c:6eff:fe55:c600/64
# ping6 -I eth0 ff02::1
Pozn.: protože ping6 používá přístup k soketům (na nízké úrovní), je třeba při jeho používání mít právo roota.
Spuštění traceroute6:
# traceroute6 www.6bone.net
Příklad včetně ukázkových konfiguračních souborů
Routování probíhalo na dvou typech sítí. V první bylo použito klasické IPv6 linky mezi routovacími stroji. Tato linka tvořila samostatný segment sítě aaaa::/64.
V druhé byl použit místo klasické IPv6 linky tunel. Mezi routovacími stroji neexistovalo IPv6 spojení, byly spojeny pouze IPv4 linkou. Tunel, který byl vytvořen, umožnil komunikaci pomocí protokolu IPv6 přes IPv4. Routovací software o IPv4 neví, pro něj je z pohledu IPv6 vidět pouze zmiňovaný tunel. Ten byl nakonfigurován takto:
- na RA:
# ip tunnel add sit1 mode sit ttl 64 remote 192.168.0.2 local 192.168.0.1
# ip link set dev sit1 up
- na RB:
# ip tunnel add sit1 mode sit ttl 64 remote 192.168.0.1 local 192.168.0.2
# ip link set dev sit1 up
Nastavení IPv6 adresy na PC A:
# ifconfig eth0 add 5555::2/64
Nastavení IPv6 adresy na PC B:
# ifconfig eth0 add 6666::2/64
Příklady konfiguračních souborů jsou pro oba případy téměř stejné, jsou zde zobrazeny pouze konfigurační soubory pro případ s tunelem (rozdíl je, že v prvním případě by se v konfiguračních souborech použilo místo rozhraní sit1 rozhraní eth1)
- pro RA:
zebra.conf
ripngd.conf
ospf6d.conf
- pro RB:
zebra.conf
ripngd.conf
ospf6d.conf
Otestování konfigurace
Spojení bylo testováno pomocí programu ping6. Program byl spouštěn takto:
# ping6 -I 5555::1 6666::1
Výstup měl následující tvar:
PING 6666::1(6666::1) 56 data bytes
64 bytes from 5555::1: icmp_seq=0 ttl=64 time=0.041 ms
64 bytes from 5555::1: icmp_seq=1 ttl=64 time=0.044 ms
--- ::1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1014ms
rtt min/avg/max/mdev = 0.041/0.042/0.044/0.006 ms, pipe 2
Poslání ICMPv6 zprávy typu Echo request z 5555::1 na 6666::1 a přijetí ICMPv6 zprávy typu Echo reply jasně prokázalo, že routování mezi sítěmi 5555::/64 a 6666::/64 funguje bezchybně.
Odkazy
Zdrojové kódy jádra Linux: ftp://ftp.kernel.org
Projekt USAGI: http://www.linux-ipv6.org
ZEBRA: http://www.zebra.org
QUAGGA: http://www.quagga.net
Linux IPv6 HowTo: http://tldp.org/HOWTO/Linux+IPv6-HOWTO/