IPv6

Z HKfree wiki
Verze z 15. 3. 2021, 11:29, kterou vytvořil VojtaLhota (diskuse | příspěvky) (Update příděl pro hkfree /32 vs. /29. Odkaz na adresní plán na confluence.)
Skočit na navigaci Skočit na vyhledávání

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,
  • kazda oblast dostane prefix /40, příděly subnetů /40 řeší Kendy ripe@hkfree.org a evidujou se v tabulce https://ripe.hkfree.org

Adresní plán ZDE.

  • 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,
  • adresy aplikacnich serveru se prideluji z rozsahu 2a01:168::/48,
  • Klientské zařízení s podporou IPv6,
  • Test IPv6.

Jak pridelit IPv6 adresu/rozsah (pro spravce)

1) Vezmu si cislo sve oblasti (samozrejme jen pokud jsem spravce) toto prevedu do hexa (tzn. 1->1, 16->10, 31->1f atd.)

$ printf "%x\n" CISLOOBLASTI
XX

2) Toto cislo vlozim do 2a01:168:XX00::/40 a tak ziskam rozsah pro celou oblast

  • Priklad:
 mam oblast 160 tudiz cislo oblasti je a0 a mam vsesmer, LAN a 2x sektor, dale je na LAN jedna uzivatelska sit za routerem, takze site, ktere pouziji budou 
    • pro vsesmer 2a01:168:a000:0000::/64 - zkracene 2a01:168:a000::/64
      • pro uzivatelskou podsit na LAN 2a01:168:a000:0101::/64 - zkracene 2a01:168:a000:101:/64
    • pro sektor 1 2a01:168:a000:0200::/64 - zkracene 2a01:168:a000:200:/64
    • pro sektor 2 2a01:168:a000:0300::/64 - zkracene 2a01:168:a000:300:/64


3) Zapnu si modul ipv6, tedy upravim /etc/modules (zalezi na distribuci) kde vepíšu ipv6 nebo dočasně povolím ručně příkazem modprobe ipv6. Od Debianu 6 je IPv6 v systému automaticky zapnuté, do konfigurace musíme zasáhnou jenom v případě když chceme IPv6 podporu vypnout, což lze udělat při každém bootu v /proc nebo v /etc/sysctl.conf kde je už připravena položka "net.ipv6.conf.all.disable_ipv6=1" =1 znamená že disable_ipv6=true tuto položku stačí jenom odkomentovat a udělat reboot.

V OpenSUSE stačí v programu YaST v sekci konfigurace síťových karet zaškrtnout volbu 'povolit IPv6' (vyžaduje restart, ruční nahození modulu nestačí!)


4) Pridam na kazdem interface routeru nejakou IPv6 adresu (idealne dobre zapamatovatelnou) pomoci ip addr add <IPv6Adresa/maska> dev <zarizeni>

Příklad ip -6 addr add 2a01:168:12::1/64 dev eth0

nebo upravím v /etc/network/interfaces (Debian)

auto eth0
      iface eth0 inet static
          address 10.107.6.49
          netmask 255.255.255.240
          broadcast 10.107.6.63
      # nastaveni IPv6
      iface eth0 inet6 static
          address 2001:168:6::1
          netmask 64

Pozor pokud mám nastavené vlan položku vlan-raw-device vlanXXX píšu v zápisu pro každé rozhraní jenom jednou, podobně jako při zápisu alias IP např. vlan200:1

pro OpenSUSE stačí přidat řádek do /etc/sysconfig/network/ifcfg-eth0 (místo eth0 zadejte název požadovaného rozhranní)

IPADDR_IPv6='2001:168:6::1/64'


5) Povolim forwardovani IPv6 pomoci

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

V OpenSuSE poté nastavím v souboru /etc/sysconfig/sysctl proměnnou IPV6_FORWARD na "yes"

IPV6_FORWARD="yes"


6) Dale rozjedu na routeru IPv6 a ospf6d - nakonfiguruji podobne jako ve vzorovych konfiguracich prilozenych na konci a spustim


7) Hotovo :)


Doporucuji si precist neco o IPv6 nez se do toho pustite.

Soucasny stav

  • IPv6 je funkční na igw, kde bezi ospf6d
  • Mame pridelen IPv6 prefix od RIPE
  • DNS servery - 2a01:168:0:10::f, 2a01:168:7:a00::245

Stará tabulka - tohle už neplatí. Od 5/2019 je nový adresní plán https://confluence.hkfree.org/x/XQmQB, alokace subnetů pro oblasti https://ripe.hkfree.org/#ipv6

Oblast Podpora na pateri Podpora u klientu IPv6 Adresa routeru
D-network Ano Ano (pouze klienti, kteri jsou na stejnem subnetu jako hlavni routr) 2a01:168:3::1
JNet Ano Ano 2a01:168:36::1
Slatina Ano Castecne 2a01:168:7::a00::1
Libuse Ano Neznamo 2a01:168:2::1
Piletice Ano Ne 2a01:168:31:700::1
Podulsany Ano Ano 2a01:168:a::1
Yzop Neznamo Neznamo Neznamo
Lhotka Neznamo Neznamo Neznamo
Postman Ano Ano 2a01:168:3c:1000::1
Plotiště Ano Neznamo 2a01:168:8::1
Kalinka Ano Neznamo 2a01:168:8:8000::1
Drtinova Ano Ano (IPV6 na všech subnetech k užvatelům vč. AP Dolíky) 2a01:168:003f:1000::1
Mandysova Ne Ano 2a01:168:35:40::107
Dolany Ano Ano 2a01:168:ad::1
Plch Ano Ano Doplnim
Benesova Ano Ano 2a01:168:10::1
Trebes Ano Ne 2a01:168:8c:1::1
Vecino Ano Castecne 2a01:168:50::1
Hive Ano Castecne 2a01:168:1f:1::1
Hvezda Ano Castecne 2a01:168:19::1
Horakova Ano Castecne 2a01:168:5b::1
Hydra Ano Ne 2a01:168:e::1
Zvonicka Ano Castecne 2a01:168:5a::1
Lesopark Ano Ano 2a01:168:59:1::1
Malšova Lhota Ano Ano 2a01:168:4c::1
Bydlo Ano Připravujeme 2a01:168:b1::1
Chlumec Ano Připravujeme 2a01:168:b3::1
Obědovice Připravuju Připravuju 2a01:168:b0::1
Purkyně Ano Pouze Páteř 2a01:168:88::1
Kocourkov Ano Pouze Páteř 2a01:168:25::1
Andre Ano Pouze Páteř 2a01:168:89::1
Hrubínova Ano Pouze Páteř 2a01:168:ed::1
Gebauerova Ano Pouze Páteř 2a01:168:e3:1::1
Lhota pod Libčany Ne Ne 2a01:168:f:1::1
Probluz Ano Ne 2a01:168:54::1
Strezetice Jezisek Ano NE 2a01:168:57:1::1
Nechanice Ano Ne 2a01:168:55::1

Priklady konfigurace zebry

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
    IPv6 - adresa
  • další je nastavení OSPFv3
    /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
    IPv6 - OSPF
    důležitý, aby to běželo na interface, kde je linka (u mě "bridge-lhota", "birdge-krasnice"), nikoliv klientský interface
  • dalším bylo nastavení instances
    /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
    IPv6 - OSPF instances
    Důležitý, nastavit tam '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
    IPv6 - route
  • 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
    IPv6 - filtr OSPF (1)
    IPv6 - filtr OSPF (2)
  • 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)
    /ipv6 pool add name=pool1 prefix=2a01:168:4901::/48 prefix-length=56
    takže jim z /48 rozsahu budu delegovat prefixy /56
    IPv6 - pool
  • 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
    IPv6 - DHCPv6
  • 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
    IPv6 - Neighbor discovery
  • 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
    IPv6 - DNS
  • 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
IPv6 - firewall (1)
IPv6 - firewall (2)
IPv6 - firewall (3)
IPv6 - firewall (4)
  • 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


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: