Thursday, 3 December 2009
Juletip 3: ARP vs NDP, IPv6 Neighbor Discovery Protocol
« Juletip 2: Ethernet og ARP | Main | Juletip 4: IPv4 gråzoner og magiske konstanter »Så er vi nået til den 3. december, har du købt dine julegaver? Jeg har ikke :-(
Idag vil jeg fortsætte på nogenlunde samme niveau som igår - blot med IPv6. Til dem der ikke kender IPv6 i forvejen så er det den nye internet protokol, og se så at komme igang! Start evt. med at slå det til på din arbejdsstation og du vil blive forbløffet over så meget der efterhånden bruger IPv6 - uden du ved det.
I flæng kan jeg eksempelvis nævne at mine Airport Express nægtede at spille musik på et tidspunkt, og det viste sig at de krævede noget IPv6 for at virke :-)
Så dagen idag handler om IPv6 Neighbor Discovery Protocol der forkortes til NDP og det tilhørende program ndp. Nu sidder jeg faktisk og hører musik, så hvordan sker det med IPv6 og mit stakkels Airport Express som kan streame musik, det som Apple kalder AirTunes.
Jo, først skal systemerne der vil kommunikere finde hinandens hardware adresser på netkortene. Det gennemgik vi igår med IP version 4 hvor man benytter ARP protokollen og for at repetere ser ARP ud på følgende måde fra kommandolinien: (fra Turbi - en OpenBSD ca. version 4.6 default install)
hlk@turbi:hlk$ arp -an ? (10.0.42.1) at 00:00:24:c8:b2:4c on vr0 ? (10.0.42.95) at 00:23:6c:9a:f5:2c on vr0
Godt så, ARP forbinder IP adressen 10.0.42.95 med en MAC adresse 00:23:6c:9a:f5:2c. IP adressen er forøvrigt tildelt med DHCP, fordi det er standard arbejdsstation på netværket. Nu er laptoppen med den pågældende adresse jo en moderne Mac OS X og derfor findes IPv6 og kan nemt indstilles med systemindstillingerne:
Super, det er til at forstå og der er klare paraleller mellem IPv4 og IPv6:
- Using DHCP svarer til Automatically, altså find selv ud af det med adresser - I DO NOT CARE
- IPv4 address: 10.0.42.95 er 32-bit adressen, IPv6 Adress: 2001:16d8:dd0f:cf0f:223:6cff:fe9a:f52c er så tilsvarende en automagisk 128-bit adresse
- Subnet maske: 255.255.255.0, det vi også kalder en /24 i CIDR notation svarer til /64 i IPv6 - og det er som hovedregel altid en /64 for subnets i IPv6
- Router: 10.0.42.1 er selvfølgelig IPv4, men sjovt nok står der en kryptisk adresse fe80:.... under IPv6 Router, forklaring?
Jo, med IPv6 er alle adresser 128-bit - super check, vi er med. Alle de almindelige netkort, her Wireless 802.11 og Ethernet har en MAC adresse som er 48-bit, det burde jeg nok have bemærket igår - men det er altså 48 bit. Ud af de 48 bit er den første halvdel det vi kalder Organizationally Unique Identifier. Eksempelvis er min OUI 00:23:6c og det svarer til Apple, slå det selv op hos IEEE.
Tricket med adresserne er så at man med IP version 6 har en IPv6 adresse, der er udledt af ens MAC adresse. Dette kaldes stateless autoconfiguration og er blandt andet beskrevet i RFC-4862 og andre RFC'er. Kort fortalt sker der følgende: MAC adressen 00:23:6c:9a:f5:2c omskrives til en EUI-64 ved at tilføje FFFE og der tilføjes link-local prefix fe80, og vendes en enkelt bit, det bliver til 02. Resultatet er helt præcist at min maskine ALTID på netkortet en1 har IPv6 adressen fe80: + 02(bit der er vendt)23:6c: + ff:fe + 9a:f52c, altså fe80::223:6cff:fe9a:f52c. Man angiver derfor af nødvendighed scope for denne adresse ved at tilføje %en1. På kommandolinien ser det således ud:
hlk@bigfoot:hlk$ ifconfig en1 en1: flags=8863mtu 1500 inet6 fe80::223:6cff:fe9a:f52c%en1 prefixlen 64 scopeid 0x5 inet 10.0.42.95 netmask 0xffffff00 broadcast 10.0.42.255 inet6 2001:16d8:dd0f:cf0f:223:6cff:fe9a:f52c prefixlen 64 autoconf ether 00:23:6c:9a:f5:2c media: autoselect status: active supported media: autoselect
NDP
Nu er emnet jo NDP idag, og hvad er det så? Jo, NDP har sammen funktion som ARP, at binde IP adresser sammen med MAC adresser. Funktionelt er det således det samme og kommandoen jeg bruger er lavet med de samme options, så udover lidt mere striks opsætning og mere information er det jo ligetil med IPv6 og NDP:
hlk@turbi:hlk$ arp -an ? (10.0.42.1) at 00:00:24:c8:b2:4c on vr0 ? (10.0.42.95) at 00:23:6c:9a:f5:2c on vr0 hlk@turbi:hlk$ ndp -an Neighbor Linklayer Address Netif Expire S Flags 2001:16d8:dd0f:cf0f:240:63ff:fec9:f311 0:40:63:c9:f3:11 vr0 permanent R fe80::200:24ff:fec8:b24c%vr0 0:0:24:c8:b2:4c vr0 1s D R fe80::223:6cff:fe9a:f52c%vr0 0:23:6c:9a:f5:2c vr0 39s R fe80::240:63ff:fec9:f311%vr0 0:40:63:c9:f3:11 vr0 permanent R fe80::1%lo0 (incomplete) lo0 permanent R
Hvad så med pakkerne der sendes? Jo, de minder meget om ARP. Når en maskine skal snakke IPv6 sender den en NDP Neighbor solicitation og forventer en Neighbor advertisement. På dette screen dump ser man eksempelvis pakkerne mellem min maskine og et Airport Express - og bemærk at her sendes pakkerne IKKE som broadcast. I praksis sendes pakker jo i broadcast på Ethernet, men IPv6 gør et stort nummer ud af IKKE at bruge broadcast. Dette screendump er derfor et eksempel på at to maskiner der rent faktisk kender hinanden blot kan sende direkte. Nedenfor ses et andet eksempel hvor der sendes til ff02::1 der er en speciel adresse for ipv6-allnodes.
Det man ser på screen dump er således to maskiner der sender information om MAC adresser, MEN der er en yderligere pointe som er meget vigtig! IPv6 NDP foregår med IPv6/ICMPv6 pakker! Hvor vi tidligere i vores IPv4 firewalls ikke bekymrer os om ARP, eller skal tillade dette specifikt - så er det nødvendigt med IPv6 at tillade ICMPv6 typerne.
Vi ser således på screendump at ICMPv6 type 135 er Neighbor solicitation, og jeg kan afsløre at svaret hedder Neighbor advertisement og er type 136 - og du kan finde dem i manual siden for icmp6 på OpenBSD.
Et udklip af mit IPv6 firewall script på min Mac er derfor:
# Allow ICMPv6 destination unreach
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 1
# Allow NS/NA/toobig (don't filter it out)
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 2
# Allow timex Time exceeded
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 3
# Allow parameter problem
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 4
# IPv6 ICMP - echo request (128) and echo reply (129)
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 128,129
# IPv6 ICMP - router solicitation (133) and router advertisement (134)
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 133,134
# IPv6 ICMP - neighbour discovery solicitation (135) and advertisement (136)
$fwcmd6 add pass ipv6-icmp from any to any icmptypes 135,136
Godt, nu lovede jeg ovenfor et andet eksempel, der blev sendt til ff02::1 eksemplet giver mig ligeledes mulighed for at præsentere pcapr som er et web site dedikeret til pakker. Eksemplet er: http://www.pcapr.net/view/bwilkerson/2008/10/3/11/efb46f60-9803-012b-b2a6-0016cb8cea27.cap.html - og det kræver at man registrerer sig, hvis man vil se detaljerne.
Websitet er et sjovt alternativ til selv at opsamle pakker og giver mulighed for at se på trafikken, næsten som om det var med en pakkesniffer som Wireshark - eller du kan hente capture filen og åbne den med Wireshark :-)
Det var hvad vi nåede idag, vi ses imorgen - og planen er ligesom idag at være nogenlunde midt på dagen med blog indlæggene, skal bare lige igang :-)
Posted by at CET 10:12 03/12/2009 in Toolbox entries
[Trackback URL for this entry]

