IPv6
Obsah
- 1 Adresace
- 2 Adresní plán
- 2.1 oblast /40, tzn. xxx = 800 - fff (2048 oblastí).
- 2.2 podsíť v oblasti /48, tzn. pp = 00 - ff (256 sítí v oblasti).
- 2.3 jednotlivý člen (připojenec) /56, tzn. čč = 00 - ff (256 připojenců na podsíť, 65000 připojenců na oblast).
- 2.4 síť u člena (připojence) /64, tzn. 00 = 00 - ff (256 sítí na připojence).
- 3 Priklady konfigurace
Adresace
- prefix IPv6 pro celé HKfree je 2a01:168::/29 v kompletním zapisu: 2a01:168:0000:0000:0000:0000:0000:0000/29, zápis "::" znamená doplň celý zbytek adresy nulami,
- linkove adresy nejsou potreba - viz link scope, adresy se generují "automaticky" o páteřní IP se tím pádem vůbec nestaráme,
- pokud nejaky router lezi na rozhrani mezi 2 oblastmi a mel by mit ipv6 adresu, tak se pouzije cislo jedne z oblasti,
- Klientské zařízení s podporou IPv6,
- Test IPv6.
- Důležité adresy
- HKFree DNS servery: 2a01:168:0:10::f, 2a01:168:7:a00::245
Adresní plán
2a01:16x:xxpp:čč00:/56 ↑ ↑ ↑ ↑ ↑ připojenec/56 ↑ podsíť/48 oblast/40
oblast /40, tzn. xxx = 800 - fff (2048 oblastí).
Příděly xxx subnetů /40 řeší Kendy [1] a evidujou se v tabulce na ripe.hkfree.org.
například:
- 2a01:168:0800::/40 pro oblast A
- 2a01:168:9900::/40 pro oblast B
- 2a01:16b:ad00::/40 pro oblast C
Správce může pro oblast použít jakýkoliv rozsah (800 - fff) pokud je volný.
Q & A
Q1: Mám oblast 10.107.123.0/24, jakej rozsah použít pro IPv6?
A1: přepočítej 123 na hex (0x7b), rozsah bude 2a01:168:7b00::/40, ověř si v ripe.hkfree.org že je volný, a zaregistruj ho tam.
Q2: Mám v oblasti víc rozsahů 10.107.12, 10.107.205 a 10.107.237. Jakej rozsah použít pro IPv6?
A2: Vyber si jeden z nich a postupuj podle Q1
Q3: Můžu použít úplně jiný rozsah?
A3: Ano, pokud je volný, ověř si v ripe.hkfree.org.
podsíť v oblasti /48, tzn. pp = 00 - ff (256 sítí v oblasti).
Můžeš si oblast rozsubnetovat např. když máš více AP, nebo více routovaných sektorů.
Malá jednoduchá oblast, jeden router?
Prostě použij pp=00 a neřeš to. Například:
příděl 2a01:168:0800::/40 jedna podsíť 2a01:168:0800::/48
Větší složitější oblast, více routerů?
příděl 2a01:168:9900::/40 rozdělím na 2a01:168:9910::/48 router XY1, LAN 2a01:168:9911::/48 router XY1, AP sever 2a01:168:9912::/48 router XY1, AP jih 2a01:168:9920::/48 router XY2 2a01:168:9930::/48 router XY3 2a01:168:9940::/48 router XY4
logika pp subnetů je na správci oblasti
mělo by se to zakomponovat do userdb (github issue)
jednotlivý člen (připojenec) /56, tzn. čč = 00 - ff (256 připojenců na podsíť, 65000 připojenců na oblast).
např. 2a01:168:9910:0100::/56 první připojenec např. 2a01:168:9910:0200::/56 druhý připojenec např. 2a01:168:9910:c800::/56 dvoustý připojenec
Q: proč právě 56 bitů?
A: vedla se mohutná diskuse o kompromisu s ne-plýtváním (64 stačí pro většinu, nebo dejme 62, co třeba 60?) a univerzálností (co připojení komplikované sítě která potřebuje dělit na 20 subnetů). Dovolil jsem si na IPv6 fóru přebrat zkušenost ISP, kteří už šestku zavedli. Shodují se že 56 je správně.
síť u člena (připojence) /64, tzn. 00 = 00 - ff (256 sítí na připojence).
ve většině případů bude potřebovat pouze jeden subnet např. člen "1", domácnost: 2a01:168:9910:0100::/64 LAN+WiFi např. člen "2", hospoda: 2a01:168:9910:02aa::/64 LAN 2a01:168:9910:02bb::/64 (veřejná) WiFi pro hosty 2a01:168:9910:02cc::/64 (privátní) WiFi pro platební terminály
Priklady konfigurace
Zebra / FRR
ospf6d.conf
hostname HOSTNAME password free enable password XXXXXXX ! interface eth0 ipv6 ospf6 cost 10 ! router ospf6 router-id 10.107.X.Y redistribute connected interface eth0 area 0.0.0.0 interface eth1 area 0.0.0.0 !
zebra.conf
Zde pozor na router advertisement, pokud ho nevypnete (ipv6 nd suppress-ra) IPv6 aktivní zařízení na daném interface bude dostávat informace co je na interafce za routr a přes to zařízení se bude snažit lézt do sítě, je to obdoba DHCP serveru i když ne tak zřejmá, většinou potom následuje udivení jak je možné, že ten PC se zapnutým IPv6 dostane adresu a bránu když nemá nikde nic nastavené :)
hostname HOSTNAME password free enable password XXXXXXXXX service advanced-vty interface eth0 ipv6 nd suppress-ra ! muzu rict i jaky prefix budu oznamovat interface eth1 no ipv6 nd suppress-ra ipv6 nd ra-interval 10 ipv6 nd prefix 2a01:168:12:3400::/64 ! oznamuje pocitacum pripojenym k danemu segmentu, ze je zde dalsi router ! a ze si maji pridelit ipv6 adresu a nastavit tento router jako branu interface eth2 ipv6 nd suppress-ra ! !neoznamuje pocitacum pripojenym k segmentu, ze je zde dalsi router interface eth3 no ipv6 nd suppress-ra line vty
Dulezite nastaveni jadra!!
Pro funkcnost autkonfigurace/neprijmani cizich prefixu musí být jádro na routeru nastaveno následovně:
net.ipv6.conf.all.autoconf = 0 # vypne autokonfiguraci na tomto stroji net.ipv6.conf.all.accept_ra = 0 # vypne primani router advertismentu od jinych stroju - aneb routovani se resi pres OSPF net.ipv6.conf.all.accept_redirects = 0 # redirecty take nechcem net.ipv6.conf.all.forwarding = 1 # forwarding - jinak routovat nebudem net.ipv6.conf.all.router_solicitations = 0
Tohle jsem vůbec neřešil, všechno mám na 1 a funguje to :) (Locutus)
Distribuce 1 routy (Linux)
Tip od Ladi na distribuci pouze 1 IPv6 routy za AP.
ospf6d.conf:
router ospf6 router-id 10.107.3.1 redistribute static interface vlan132 area 0.0.0.0 interface vlan133 area 0.0.0.0 interface vlan134 area 0.0.0.0 interface vlan135 area 0.0.0.0
zebra.conf:
ipv6 route 2a01:168:3::/48 ::1 ipv6 forwarding
Zbytek
K precteni taky doporucuji clanek na wikipedii nebo na IPv6.cz
- Autokonfigurace
Pomoci router advertismentu
pomoci radvd /etc/radvd.conf
interface br0 { AdvSendAdvert on; prefix 2a01:168:XXXX:YYYY:/64 { AdvOnLink on; AdvAutonomous on; }; };
pomoci zebra.conf - viz vyse no ipv6 nd suppress-ra
interface eth0 no ipv6 nd suppress-ra ipv6 nd ra-interval 10 ipv6 nd ra-lifetime 120 ipv6 nd reachable-time 150 ipv6 nd other-config-flag ipv6 nd prefix 2a01:168:XXXX:YYYY::/64
pri spravnem nakonfigurovani siri na dany interface oznameni o pritomnosti routeru vcetne sveho prefixu. Z tohoto prefixu si klient vygeneruje svoji adresu na zaklade MAC adresy, windows si vygeneruji jeste druhou docasnou adresu (pro vyssi soukromi ? ;)) Resi pouze ziskani adresy a nastaveni routovani. (nenastavi se DNS - nevadi v pripade dual stack konfigurace, kdy DNS priradi DHCPv4)
vypnuti generovani 2. docasne adresy z sireneho prefixu pod woknama
netsh interface ipv6 set privacy state=disable
naopak zapnuti prirazeni docasne adresy v linuxu (nemusi cely svet znat nasi MAC adresu,ze?)
# cat /etc/sysctl.d/ipv6privacy.conf net.ipv6.conf.all.use_tempaddr=2 net.ipv6.conf.default.use_tempaddr=2 net.ipv6.conf.wlan0.use_tempaddr=2 net.ipv6.conf.eth0.use_tempaddr=2
DHCPv6
Resi prideleni adresy + adres dns serveru, domenoveho jmena apod. Neresi nastaveni routovani.
Dibbler dhcpv6 server + klient + relay pro linux a windows http://klub.com.pl/dhcpv6/
podle testu funguje server na linuxu v pohode. Klient pod windows se zda byt pomerne problematicky, nepovedlo se mi ho spustit jako sluzbu prestoze psal ze nastartoval. Z prikazoveho radku funguje celkem bezproblemove. Pri kombinaci s 1. typem autokonfigurace dochazi k tomu, ze Windows pouzivaji primarne docasnou adresu a ne tu ziskanou pres dhcp :(
Par sikovnych prikazu
Zobrazeni routovaci tabulky
ip -6 ro
Zobrazeni prirazenych ip adres
ip -6 addr
Pingnuti vseho ipv6-enabled hostu (tzn. vsech) na siti:
ping6 -I <interface> ff02::1
Pingnuti vsech ipv6-enabled routeru na siti:
ping6 -I <interface> ff02::2
Rozchození IPv6 na Mikrotiku s RouterOS
Příklad konfigurace AP LiSt, verze RouterOS 3.16, navic balik routing-test.npk (nutny pro OSPFv3). Pro RouterOS >v.4.x staci povolit balik ipv6.
Budu jako příklad uvádět svou oblast LiSt.
List má IP rozsah dle návodu na IPv6 adresní plán jako 2a01:168:4900::/40
- nastavil jsem si první adresu na interface, kde jsou klienti (u mě "bridge-sektory")
/ipv6 address add address=2a01:168:4900::1/64 advertise=yes disabled=no eui-64=no from-pool="" interface=Bridge-sektory no-dad=no
- další je nastavení OSPFv3důležitý, aby to běželo na interface, kde je linka (u mě "bridge-lhota", "birdge-krasnice"), nikoliv klientský interface
/routing ospf-v3 interface add area=backbone cost=20 dead-interval=40s disabled=no hello-interval=10s instance-id=0 interface=bridge-lhota network-type=default passive=no priority=1 retransmit-interval=5s transmit-delay=1s use-bfd=no
- dalším bylo nastavení instancesDůležitý, nastavit tam '
/routing ospf-v3 instance set [ find default=yes ] disabled=no distribute-default=never metric-bgp=auto metric-connected=20 metric-default=1 metric-other-ospf=auto metric-rip=20 metric-static=20 name=default redistribute-bgp=no redistribute-connected=as-type-1 redistribute-other-ospf=no redistribute-rip=no redistribute-static=as-type-1 router-id=10.107.73.1
redistribute static routes'
na hodnotu 'as type 1'
- Protože budeme dále delegovat každému členovi jeho vlastní rozsah a ten by lezl do OSPF, tak uděláme statickou routu v
/ipv6 route
na celý /40 rozsah, a ty drobný klientský pak odfiltrujem./ipv6 route add !bgp-as-path !bgp-atomic-aggregate !bgp-communities !bgp-local-pref !bgp-med !bgp-origin !bgp-prepend !check-gateway comment="souhrnna \"agregovana\" routa; viz tez routing/filters" disabled=no distance=1 dst-address=2a01:168:4900::/40 !route-tag type=unreachable
- a odfiltrujeme ty drobný rozsahy klientů
/routing filter
přidáme pravidlo co odfiltruje délku prefixu 49-128 a ty nepustí do OSPF/routing filter add action=discard !address-family !append-bgp-communities !append-route-targets !bgp-as-path !bgp-as-path-length !bgp-atomic-aggregate !bgp-communities !bgp-local-pref !bgp-med !bgp-origin !bgp-weight chain=ospf-out disabled=no !distance invert-match=no !locally-originated-bgp !match-chain !ospf-type !pref-src !prefix prefix-length=49-128 !protocol !route-comment !route-tag !route-targets !routing-mark !scope !set-bgp-communities !set-bgp-local-pref !set-bgp-med !set-bgp-prepend set-bgp-prepend-path="" !set-bgp-weight !set-check-gateway !set-disabled !set-distance !set-in-nexthop !set-in-nexthop-direct !set-in-nexthop-ipv6 !set-in-nexthop-linklocal !set-out-nexthop !set-out-nexthop-ipv6 !set-out-nexthop-linklocal !set-pref-src !set-route-comment !set-route-tag !set-route-targets !set-routing-mark !set-scope !set-site-of-origin !set-target-scope !set-type !set-use-te-nexthop !site-of-origin !target-scope
- a pustíme se do delegování subnetů pro klienty/členy. Nastavíme si
/ipv6 pool
jak velké subnety budeme členům delegovat (opět podle návrhu číslovacího plánu)takže jim z /48 rozsahu budu delegovat prefixy /56/ipv6 pool add name=pool1 prefix=2a01:168:4901::/48 prefix-length=56
- a pustíme DHCP server pro delegaci prefixů
/ipv6 dhcp-server
kde nastavíme poslouchací inteface od klientů (u mě "bridge-sektory")/ipv6 dhcp-server add address-pool=pool1 dhcp-option="" disabled=no interface=Bridge-sektory lease-time=1h name=server1 preference=255 rapid-commit=yes route-distance=1 use-radius=no
- v Neighbor discovery
/ipv6 nd
je ?nutné? vypnout "advertise DNS", bo to zlobí. Já ho ale nechal zapnutý. A přepnout interface z "all" na "bridge-sektory", tj. tam, kde jsou klienti/ipv6 nd add advertise-dns=yes advertise-mac-address=yes disabled=no hop-limit=64 interface=Bridge-sektory managed-address-configuration=no mtu=unspecified other-configuration=no ra-delay=3s ra-interval=3m20s-10m ra-lifetime=30m reachable-time=unspecified retransmit-interval=unspecified
- Aby to advertise DNS fungovalo dobře, přidal jsem do DNS konfigurace záznam o DNS serveru pro IPv6
/ip dns set allow-remote-requests=yes cache-max-ttl=1w cache-size=2048KiB max-concurrent-queries=100 max-concurrent-tcp-sessions=20 max-udp-packet-size=512 query-server-timeout=2s query-total-timeout=10s servers=10.107.4.100,10.107.4.129,2a01:168:0:10::f
- No a nakonec se hodí to zabezpečit lehkým firewallem
/ipv6 firewall filter add action=accept chain=input comment="link-local traffic OK" src-address=fe80::/10 add action=reject chain=input comment="No new ex-hkfree incoming connections on IPv6 (this router)" connection-state=new protocol=!icmpv6 reject-with=icmp-admin-prohibited src-address=!2a01:168::/29
- a teď by to mělo být připravené, aby to routovalo a poskytovalo členům prefixy.
DHCPv6
- Tato varianta se hodí v případě, že chceme mít kontrolu nad tím, co uživatelům přidělujeme za adresy. Další možné použití je v případě, že uživatel je připojen s pomocí zařízení od Ubiquity nebo jiného, které umí na straně klienta použít "prefix delegation"
- Dále pak tímto způsobem můžeme uživatelům předat informaci o DNS serveru, WINS serveru atp.
- Pro klientské zařízení se dá použít firmware upravený 8anem -> http://8an.praha12.net/wifi/ubnt/XM.v5.1.2.sdk.3998.100317.1835.bin. Další výhodou tohoto firmware je, že umí i RADIUS autentizaci.
- Pro použití DHCPv6 musíme posílat trochu jiné Router Advertismenty než při bezstavové konfiguraci (viz http://www.faqs.org/rfcs/rfc5175.html). A proto je třeba přidat do nastavení radvd.conf toto:
AdvManagedFlag on AdvOtherConfigFlag on
- Vhodný DHCP server je například https://www.isc.org/software/dhcp ve verzi minimálně 4.1
- http://packages.debian.org/experimental/isc-dhcp-server
- Pro ty co mají přístup na NFX wiki, tak doporučuji stránku: http://www.nfx.cz/wiki/index.php/AirOS_Prefix_Delegation
- Příklad konfigurace DHCPv6
interface eth1 { server-preference 255; renew-time 60; rebind-time 90; prefer-life-time 130; valid-life-time 200; allow rapid-commit; option dns_servers 2a01:168:0:10::f hkfree.org; link AAA { pool{ range 2a01:168:00XX:YYZZ::1 to 2a01:168:00XX:YYZZ::ffff/64; prefix 2a01:168:00XX:YYZZ::/64; }; }; };
Nastavení firewallu
Platí zásada nejdřív zakaž vše a poté povol jen to co potřebuješ.
Pokud nevím kde začít, tak aspoň zakázat přístup odjinud než z HKFree
ip6tables -A INPUT -s 2a01:168::/29 -j ACCEPT ip6tables -A INPUT -s ! 2a01:168::/29 -p tcp --syn -j DROP
Správce na routeru pravděpodobně bude chtít nechat povolené: TCP: port22 (SSH), port 2601 (zebra), port 2604 (ospfd), port 2606 (ospf6d), UDP: SNMP (http://wiki.hkfree.org/Slu%C5%BEby#Monitoring).
Tipy pro různé OS: