IPv6 kasutamine OpenBSDga

Allikas: Kuutõrvaja

Sissejuhatus

OpenBSD tarkvara toetab IPv6 protokolli kasutamist. Paistab, et 2010 aastal on IPv6 võrguga ühendumiseks kaks populaarsemat viisi sellised

  • IPv6 liikluse tunneldameine üle IPv4 võrgu (nn IPv6-in-IPv4) usaldades kasutajale kasutada /64 võrgu (nt EENet, Elion)
  • nö ehe IPv6 ruuting

Käesolev tekst keskendub OpenBSD kasutamisele võrgusõlmes, mis osaleb ühel või teisel viisil IPv6 liikluse vahendamises

  • IPv6 tunneli üks ots asub võrgusõlmes, võrgusõlmele on seadistatud IPv6 aadress ja selle küljes on kliendile usaldatud /64 subnet seal asuvate IPv6 võrguseadistustega arvutitega
  • võrgusõlme läbi IPv4 pakettidesse kapseldatud IPv6 liiklus, kusjuures tunneli teine ots on nö tulemüüri taga (nt NATitud võrgusegmendis paiknevas töökohaarvutis)

Muu hulgas kaasneb IPv6 protokolli kasutamisega

  • võrguseadmete automaatse seadistamise võimalus
  • lõpeb NAT kasutamine (Network Address Translation)
  • lõpeb 'private address collisions'
  • parem multiedastus-ruuting (multicast routing)
  • parem anycast ruuting
  • lihtsam IP paketi päiste formaat
  • lihtsustatud ja efektiivsem ruuting
  • nö korralikult implementeeritud QoS (Quality of Service) ehk "flow labeling"
  • Built-in authentication and privacy support (IPSec)
  • Flexible options and extensions
  • lihtsam administreerimine (nt teatud juhtumitel lõpeb vajadus DHCP järele)
  • kasutada on oluliselt rohkem erinevaid IP aadresse, 2^32 vs 2^128

Aadresseerimine

IPv6 kasutab kolme tüüpi aadresse

  • unicast
  • multicast
  • anycast

IPv6 aadress esitamiseks on kasutada 128 bitti, mis tavaliselt on jagatud kaheksaks 16 bitisteks gruppideks, nt localhost'i aadress esitub

 0000:0000:0000:0000:0000:0000:0000:0001

ehk lühemalt

 ::1

Programm ipv6calc aitab aadresse arvutada

 $ ipv6calc --in ipv6addr --out ipv6addr --printfulluncompressed ::1                           
 0000:0000:0000:0000:0000:0000:0000:0001
  • Teenusepakkujatele usaldatakse kasutada tavaliselt 2001:xxx:xxxx:xxxx::/32 prefixiga aadresse
  • Teenusepakkujad müüvad edasi 2001:xxx:xxxx:xxxx::/48 prefixiga aadresse
  • Lõppkasutajatele usaldatakse 2001:xxx:xxxx:xxxx::/64 prefixiga aadresse

IPv6 kasutab kolme sorti aadresse

  • Link-local - subneti siseselt, aadress on tuletatud võrguseadme MAC aadressist
  • Site-local - administratiivse üksuse piirides kasutamiseks, 2010 aastaks on sellist tüüpi aadresside kasutamine lõpetatud
  • Global - avalikus võrgus kasutatavad ruuditavad aadressid

Link-local aadresside kasutamine

Link-local aadresse saab kasutada subneti sees töötavate arvutite omavahelisel suhtlemisel, kusjuures aadressi lõpus tuleb % märgi järel näidata millisest võrguseadet kasutatakse, nt

 $ ssh -l mart fe80::20e:cff:feb0:96b6%re0

Siin avaldub üks IPv6 kasutusele iseloomulik asjaolu, et kuivõrd samas subnetis töötavate arvutite vaheliseks suhtlemiseks tuletatakse nö IP kihi aadressid võrguseadmete MAC aadressidest automaatselt, siis ei ole võrguseadmeid vaja otseselt seadistada.

Global aadresside kasutamine

Nö tavalised avalikus võrgus kasutamiseks mõeldud ja ruuditavad aadressid.

Võrguseadistused

# cat /etc/hostname.em0
inet 192.168.111.94 255.255.255.248
inet6 2A01:88:0:22::2 64
# cat /etc/mygate
192.168.111.93
2A01:88:0:22::1

Skeem

                         ...
                          .
                         _|_
                        |   |  teenusepakkuja
                        |___|  seade - 2001:7d0:0:f000::1340
  192.168.101.242 - em0   |
                          |
                          |
    84.50.96.138 - fxp0  _|_
                        |   |  OpenBSD
                        |___|  gif0 - 2001:7d0:0:f000::1341
                  - em0   |
          --|-------------|-------------------|-----
           _|_      2001:7d0:0:f9a1::/64     _|_
          |   |                             |   |
          |___|                             |___|

kus

  • gif0 - virtuaalne seade, tunneli kliendi poolne ots
  • em0 - kliendi subnetipoole tulemüüri võrguseade, arvutite vaikelüüs
  • 2001:7d0:0:f9a1::/64 - kliendile usaldatud võrgusegment, st teenusepakkuja ruudib neid aadresse

Tunneli seadistamine

Tunneli seadistamiseks tuleb moodustada sellise sisuga /etc/hostname.gif0 seadistusfail, vastavalt konkreetse tunneli parameetreid kasutades

 # cat /etc/hostname.gif0
 tunnel 84.50.96.138 192.168.101.242
 !ifconfig gif0 inet6 2001:7d0:0:f000::1341 2001:7d0:0:f000::1340 prefixlen 128
 !route add -inet6 default 2001:7d0:0:f000::1340
 
 # sh /etc/netstart gif0

IPv6 ruutingu sisselülitamiseks tuleb öelda

 # sysctl -w net.inet6.ip6.forwarding=1

Paketifiltri seadistamine

IPv6 protokolli kasutamisel on oluline arvestada, et tulemüür vajab IPv6 protokolli jaoks sama hoolikat seadistamist nagu IPv4 puhul. Täiesti võimalik on kogemata korraldada, et IPv4 suhtes korrektselt seadistatud tulemüür lubab IPv6 liiklust läbi piiranguteta. Täiendav oht tuleneb asjaolust, et IPv6 puhul ei kasutata NATi, st kui nt kasutajale on usaldatud IPv6 /64 segmendi aadressid, siis seal võrgus asuvad seadmed on avalikust võrgust ruutingu mõttes otse ligipääsetavad.

Piiranguteta IPv6 liiklust lubaval juhtumil sobib kasutada selliseid ridu paketifiltri seadistusfailis

 pass quick on gif0 inet6
 pass quick on fxp0 proto ipv6

kus

  • gif0 - tunneli seade
  • fxp0 - füüsiline seade

Tunneli kasutamine

 # ping6 2001:7d0:0:f000::1340                                                              
 PING6(56=40+8+8 bytes) 2001:7d0:0:f000::1341 --> 2001:7d0:0:f000::1340
 16 bytes from 2001:7d0:0:f000::1340, icmp_seq=0 hlim=64 time=8.573 ms
 16 bytes from 2001:7d0:0:f000::1340, icmp_seq=1 hlim=64 time=8.208 ms

Tunneli seadmel

 # tcpdump -nei gif0 ip6       
 tcpdump: listening on gif0, link-type NULL
 01:09:46.308727 2001:7d0:0:f000::1341 > 2001:7d0:0:f000::1340: icmp6: echo request
 01:09:46.317070 2001:7d0:0:f000::1340 > 2001:7d0:0:f000::1341: icmp6: echo reply
 01:09:47.314576 2001:7d0:0:f000::1341 > 2001:7d0:0:f000::1340: icmp6: echo request
 01:09:47.323035 2001:7d0:0:f000::1340 > 2001:7d0:0:f000::1341: icmp6: echo reply

Füüsilisel seadmel

 # tcpdump -nei fxp0 proto ipv6
 tcpdump: listening on fxp0, link-type EN10MB
 01:08:48.480402 00:50:8b:cd:11:6d 00:14:7f:f4:e3:6a 0800 90: 2001:7d0:0:f000::1341 > 2001:7d0:0:f000::1340: icmp6: echo request (encap)
 01:08:48.488495 00:14:7f:f4:e3:6a 00:00:5e:00:01:07 0800 90: 2001:7d0:0:f000::1340 > 2001:7d0:0:f000::1341: icmp6: echo reply (encap)
 01:08:49.480454 00:50:8b:cd:11:6d 00:14:7f:f4:e3:6a 0800 90: 2001:7d0:0:f000::1341 > 2001:7d0:0:f000::1340: icmp6: echo request (encap)
 01:08:49.488744 00:14:7f:f4:e3:6a 00:00:5e:00:01:07 0800 90: 2001:7d0:0:f000::1340 > 2001:7d0:0:f000::1341: icmp6: echo reply (encap)

Andmed IPv6 paketi kohta näevad Wiresharkis välja nii

Ipv6-1.gif

IPv6 ruuting

IPv6 ruuteris tuleb lubada IPv6 pakettide ruuting

 # sysctl -w net.inet6.ip6.forwarding=1

Lisaks sobib kasutada nt sellist rtadvd seadistusfaili

 default:\
            :chlim#64:raflags#0:rltime#1800:rtime#0:retrans#0:\
            :pinfoflags="la":vltime#2592000:pltime#604800:mtu#0:
 
 re0:\
            :addr="2001:7d0:0:f9a1::":prefixlen#64:tc=default:

ning käivitada, jättes protsessi esiplaanile

 # rtadvd -d re0

IPv6 nimesüsteem

Avalik domeeninimesüsteem on reeglina ühine IPv4 ja IPv6 võrkude jaoks. Nö tavalistele A kirjetele vastavad IPv6 võrgus AAAA kirjed

 $ dig www.ipv6.org aaaa
 ... 
 ;; QUESTION SECTION:
 ;www.ipv6.org.                  IN      AAAA
 
 ;; ANSWER SECTION:
 www.ipv6.org.           45      IN      CNAME   shake.stacken.kth.se.
 shake.stacken.kth.se.   1086    IN      AAAA    2001:6b0:1:ea:202:a5ff:fecd:13a6
 ...

Dual-stack arvutid st arvutid, millele on seadistatud IPv4 ja IPv6 aadressid reeglina kalduvad lahendama AAAA kirjeid ja kasutama eelistatult IPv6 võrku. Dual-stack arvutid saavad kasutada IPv4 võrgus töötavate nimeserverites kirjeldatud AAAA sissekandeid, mis näevad tsoonifailis välja nt selliselt

 ipv6.auul.pri.ee. IN AAAA 2001:7d0:0:f000::1341

Teenuste kasutamine IPv6 võrgus

Kui nimesüsteemis on nimel nii A kui AAAA kirje, siis kuigi põhimõtteliselt ei ole määratletud kumba rakendus peaks enne kasutama tundub, et AAAA kirjet kasutatakse esimesena. Praktiliselt kaasneb sellega, et kui teenuse IPv6 võrgu teenus parasjagu ei tööta ja kuigi IPv4 võrgus töötab, siis nt brauser saab timeouti.

Teenused IPv6 võrgus

Märkused

  • kuna puudub vajadus NAT teisenduste järele, siis protokoll seda võimalust ette ei näe
  • ARP asemel kasutatakse multiedastust
  • kui IPv6 tunneli ots asub NAT taga, siis sobib kasutada sellist paketifiltrit
 rdr on $if_ext inet proto ipv6 from 192.168.101.242 to 84.50.96.138 tag TO_IPV6 -> 192.168.10.53
 pass in quick on $if_ext proto ipv6 tagged TO_IPV6
 pass out quick on $if_int proto ipv6 tagged TO_IPV6

Kasulikud lisamaterjalid