OpenVPN-ver­bin­ding met IPv4 en IPv6

OpenVPN-ver­bin­ding met IPv4 en IPv6

C’t Magazine - - Inhoud 9/2018 - Dušan Ži­va­di­n­o­vić

Als je ver­bin­ding met een fi­li­aal moet ma­ken of de pc's van klan­ten of me­de­wer­kers moet be­he­ren, ben je he­den ten da­ge aan­ge­we­zen op een mo­der­ne VPN-ver­bin­ding in­clu­sief IPv6. Rou­ters zijn daar in prin­ci­pe ge­schikt voor, maar de IPv6-ont­wik­ke­ling is nog niet bij al­le mo­del­len even goed door­ont­wik­keld. We la­ten met OpenVPN en een mi­ni-pc in de vorm van een Rasp­ber­ry Pi zien hoe een­vou­dig het kan.

Het ver­bin­den van re­mo­te lo­ca­ties met be­hulp van een Vir­tu­al Pri­va­te Net­work (VPN) gold ei­gen­lijk als een al­lang op­ge­lost pro­bleem. Je zorg­de ge­woon voor twee of meer rou­ters met een com­pa­ti­be­le VPN-im­ple­men­ta­tie en ver­bond de ap­pa­ra­ten daar­mee. Op die ma­nier kun je van het ene net­werk bij het an­de­re om bij­voor­beeld ge­deel­de map­pen te ope­nen of pc's te be­he­ren.

Maar veel VPN-rou­ters kun­nen al­leen tun­nels ma­ken via IPv4. IPv4 vol­staat ech­ter niet meer om­dat de adres­voor­raad wel zo'n beet­je op­ge­bruikt is, waar­door ka­bel­pro­vi­ders vaak mi­ni­maal al IPv6 on­der­steu­nen en IPv4 voor­na­me­lijk aan­bie­den bin­nen hun net­werk met be­hulp van ei­gen pri­vé­adres­sen (DS-Li­te-aan­slui­tin­gen).

Daar­om heb­ben DS-Li­te-aan­slui­tin­gen twee dui­de­lij­ke na­de­len: je kunt er geen in­ter­net­ser­vers via IPv4 mee toe­gan­ke­lijk ma­ken, dat kan al­leen via IPv6. Als je re­mo­te via VPN op het lo­ka­le net­werk ach­ter een DS-Li­te-aan­slui­ting wilt ko­men, dan heb je ook IPv6 no­dig. Bij veel wi­fi­hot­s­pots en bij mo­bie­le pro­vi­ders ont­breekt dat ech­ter (op dit mo­ment nog). Dan zou even­tu­eel een (be­taal­de) ga­te­way kun­nen hel­pen die het IPv4ver­keer om­leidt naar IPv6 en om­ge­keerd. Een goed voor­beeld daar­van is de Port­map­per-dienst van Sta­tic-Ac­cess.NET, die vijf eu­ro per jaar kost.

Het twee­de na­deel heeft te ma­ken met het uit­gaan­de IPv4-ver­keer bij DSLi­te-aan­slui­tin­gen: de ver­bin­ding naar bui­ten werkt met een Net­work Address

Trans­la­ti­on (NAT) van de pro­vi­der, en die wil IPv4-ses­sies nog wel eens af­slui­ten. Dan stort een IPv4-VPN-tun­nel in el­kaar en ook al­le daar­in lo­pen­de trans­fers zo­als down­lo­ads en re­mo­te be­heer en der­ge­lij­ke.

OpenVPN kan hel­pen te­gen de twee ge­noem­de na­de­len. Als ser­ver kan het IPv6-ver­bin­din­gen aan­ne­men die bij DS-Li­te-aan­slui­tin­gen bin­nen­ko­men en als client bouwt het ook uit­gaan­de IPv6ver­bin­din­gen op, bij­voor­beeld naar een ser­ver op een an­de­re DS-Li­te-aan­slui­ting of een Du­al-Stack-aan­slui­ting. An­ders dan een een­vou­di­ge VPN-rou­ter geeft OpenVPN via de tun­nel de voor­keur aan IPv4. Daar­door kun je van­uit een DS-Li­te-aan­slui­ting ook toe­gang krij­gen tot re­mo­te IPv4-sha­res of clients be­he­ren ach­ter een DS-Li­te-aan­slui­ting.

Voor een der­ge­lij­ke sce­na­rio vol­staat voor zo­wel de clients als voor de ser­ver een ge­wo­ne IPv4-OpenVPN-con­fi­gu­ra­tie met een paar ex­tra din­gen. Op clients vul je als doel het IPv6-adres van de ser­ver in (bij 're­mo­te'). Als de­zelf­de ser­ver ook via IPv4 be­reik­baar is, voeg je daar­voor een twee­de re­mo­te-item toe. Dat werkt bij Du­al-Stack-aan­slui­tin­gen, en bij vHosts en DS-Li­te gaat dat met een IPv4-IPv6­ga­te­way. Als het op­bou­wen van een tun­nel met IPv6 mis­lukt, pro­beert de client het ver­vol­gens met IPv4.

De ser­ver gaat bij dit een­vou­di­ge sce­na­rio voor het wer­ken met IPv6 uit van een sta­ti­sche pre­fix. Uit dat be­reik voer je een IPv6-adres in op de ser­ver­ma­chi­ne, zo­dat die daar van bui­ten­af mee be­reik­baar is. In de rou­ter is een port-for­ward (IPv4) en een poort­vrij­ga­ve (IPv6) voor OpenVPN no­dig.

Een sta­ti­sche pre­fix krijg je bij DSLen ka­bel­aan­slui­tin­gen meest­al met een za­ke­lijk abon­ne­ment. Je kunt ook in ei­gen re­gie een IPv6-tun­nel op­bou­wen bij bij­voor­beeld tun­nel-bro­ker.net.

IPv6-tun­nels zijn bij DS-Li­te-aan­slui­tin­gen ech­ter niet zin­vol. Bij een par­ti­cu­lie­re DS-Li­te-aan­slui­ting is het daar­om aan te ra­den de OpenVPN-ser­ver op een vir­tu­e­le host te in­stal­le­ren. Dan kun je zon­der ver­der wat te hoe­ven doen clients ach­ter DS-Li­te re­mo­te be­he­ren en via die clients ook het bij­be­ho­ren­de lo­ka­le net­werk. Vir­tu­e­le hosts zijn er bij­voor­beeld van di­gi­ta­l­ocean.com. Daar kost een 'drop­let' met 1 GB RAM, een vCPU, 25 GB aan op­slag­ruim­te en 1 TB aan da­t­avo­lu­me vijf dol­lar per maand. Dat is soms goed­ko­per dan de meer­prijs die je be­taalt voor een za­ke­lijk abon­ne­ment.

Voor het uit­pro­be­ren van de ser­ver heb je al ge­noeg aan een Rasp­ber­ry Pi. Als je OpenVPN voor dat sce­na­rio wilt in­stel­len (tun­nels via IPv6 en IPv4 om daar IPv4 over te trans­por­te­ren), dan kun je ver­der gaan bij het deel 'Kou­de start'.

IPv6 en IPv4 in al­le com­bi­na­ties

Maar OpenVPN heeft nog meer mo­ge­lijk­he­den. De ser­ver tun­nelt niet al­leen IPv4, maar ook IPv6 (de clients com­mu­ni­ce­ren in de VPN via IPv6). Daar­bij maakt het dan niet uit of de tun­nel via IPv4 of via IPv6 op­ge­bouwd werd. En hij bouwt te­ge­lij­ker­tijd naar ver­schil­len­de clients IPv6- en IPv4-tun­nels op. Bij de gang­ba­re con­fi­gu­ra­ties krij­gen de clients in een OpenVPN-net­werk eerst al­leen maar IPv4-adres­sen. Je kunt ech­ter ook IPv6-adres­sen krij­gen. Die moe­ten tot nu toe dan wel sta­tisch zijn, want OpenVPN kent zelf aan de clients IPv6adres­sen toe uit een vast in­ge­steld adres­be­reik. Daar ko­men zo­wel adres­sen met een sta­ti­sche pre­fix als met Uni­que Lo­cal Adres­ses (ULA, adres­be­reik fd00;//8) voor in aan­mer­king. De vol­gen­de Mi­les­to­ne­ver­sie 2.5 kan wel­licht wel om­gaan met wis­se­len­de pre­fixen, maar wan­neer die ver­schijnt was op het mo­ment van schrij­ven nog niet dui­de­lijk.

Om IPv6 te tun­ne­len, zijn een paar ex­tra re­gels in de ser­ver­con­fi­gu­ra­tie vol­doen­de. Dat sce­na­rio zal voor gro­te be­drij­ven in­te­res­sant zijn om­dat het pro­to­col meer ruim­te voor sub­net­ten biedt. Als een pro­vi­der bij­voor­beeld een /56-pre­fix uit­deelt, is dat al vol­doen­de voor 256 sub­net­ten. Een /48-pre­fix biedt zelfs ruim­te voor 65.535 sub­net­wer­ken. En als je OpenVPN al­leen via IPv6 ge­bruikt, is het VPN-ver­keer in het reu­zen­gro­te IPv6-adres­be­reik nog am­per te vin­den. De IPv6-pa­ra­me­ters zijn wel ge­do­cu­men­teerd (zie de link on­der­aan), maar prak­ti­sche voor­beel­den die ook de rou­ter­con­fi­gu­ra­tie mee­ne­men zijn nog zeld­zaam.

Klei­ne adres­plan­ning

Of je OpenVPN al met IPv4 ge­bruikt of van vo­ren af aan be­gint, maakt in eer­ste in­stan­tie niet uit – voor het IPv6-trans­port moet je eerst het uit­de­len van IPv6-adres­sen plan­nen.

Be­paal of je in de tun­nel adres­sen uit de sta­ti­sche pre­fix of zelf ge­de­fi­ni­eer­de ULA's wilt ge­brui­ken. Met ULA's is de toe­gang van clients tot het lo­ka­le net­werk mak­ke­lij­ker in te stel­len.

Ken de ser­ver daar­van een IPv6adres toe waar­mee hij van­uit in­ter­net be­reik­baar is. Die maakt nor­maal ge­spro­ken deel uit van een sub­net in je lo­ka­le net­werk. Als voor­beeld ge­brui­ken we 2001:db8:aa00:ca­fe::1/48. Voeg des­ge­wenst het lo­ka­le IPv6-adres van de rou­ter als IPv6-ga­te­way toe (be­gint met fe80:). Bij Li­nux zet je die stap­pen bij­voor­beeld met de Net­work Ma­na­ger, bij Win­dows via 'In­stel­lin­gen / Net­werk en in­ter­net / Deel­op­ties' en op Macs bij de sys­teem­voor­keu­ren.

Geef in de rou­ter voor dat IPv6-adres de OpenVPN poort vrij (bij­voor­beeld TCP 1194). Af­han­ke­lijk van de rou­ter kun je de poort ge­za­men­lijk voor IPv4 en IPv6 ope­nen of elk apart voor de res­pec­tie­ve­lij­ke pro­to­col­len. Voor test­doel­ein­den is het twee­de aan te ra­den, om­dat je de OpenVPN-poor­ten dan in­dien ge­wenst apart kunt blok­ke­ren.

Test of de ser­ver­ma­chi­ne van bui­ten­af be­reik­baar is (met bij­voor­beeld ping6 -c3 2001:db8:aa00:ca­fe::1) . Bij som­mi­ge rou­ters moet je het ping6-ver­keer van een ma­chi­ne eerst toe­staan.

Cre­ëer op ba­sis van je pre­fix een IPv6-sub­net voor OpenVPN, bij­voor­beeld 2001:db8:aa00:ab­ba::/64. Leid daar­van het IPv6-adres af dat de ser­ver voor zijn tun­ne­lein­de moet ge­brui­ken, bij­voor­beeld 2001:db8:aa00:ab­ba::1. De clients krij­gen van de ser­ver IPv6-adres­sen uit het­zelf­de be­reik, bij­voor­beeld 2001:db8:aa00:ab­ba::1001 voor de eer­ste OpenVPN-IPv6-client.

Als je al een OpenVPN-ser­ver hebt, kun je het on­der­deel 'Kou­de start' over­slaan en door­gaan met 'IPv6 uit­brei­den'.

Kou­de start

OpenVPN is in­mid­dels lek­ker een­vou­dig te in­stal­le­ren. Om het uit te pro­be­ren, is een mi­ni­com­pu­ter zo­als een Rasp­ber­ry Pi al ge­noeg. Het in­stal­le­ren werkt op de­zelf­de ma­nier bij de hui­di­ge ver­sies van De­bi­an, Ubuntu en CentOS en be­staat uit twee re­gels: wget htt­ps://git.io/vpn -O

openvpn-in­stall.sh su­do bash openvpn-in­stall.sh

Bij de twee­de re­gel vraagt het script openvpn-in­stall.sh naar het open­ba­re IPv4adres van de ser­ver. Als die ach­ter een DS-Li­te-aan­slui­ting zit, neem je het door het script ach­ter­haal­de pri­vé-ip-adres over. Het daad­wer­ke­lijk be­reik­ba­re IPv6adres voeg je dan la­ter in. Als hij ach­ter een Du­al-Stack-aan­slui­ting staat, geef je het DNS- of het DynDNS-adres van de aan­slui­ting op.

Daar­na stel je het pro­to­col in (we ad­vi­se­ren TCP), het OpenVPN-poort­num­mer (stan­daard is dat 1194) en de Do­main Na­me Ser­ver. Geef voor DNS het ip-adres op dat daar in je lo­ka­le net­werk voor ge­bruikt wordt. Typ aan het eind een naam in die de eer­ste client zal gaan krij­gen – bij­voor­beeld client1. Af­han­ke­lijk van de per­for­man­ce van de pro­ces­sor kan de ser­ver al na een paar mi­nu­ten in­ge­steld zijn voor IPv4 (op een Rasp­ber­ry Pi van de eer­ste ge­ne­ra­tie duur­de dat ech­ter on­ge­veer een half uur). Na af­loop staat in de hui­di­ge di­rec­to­ry het con­fi­gu­ra­tie­be­stand client1. ovpn voor de eer­ste client. Die be­vat ook het ver­eis­te SSL-cer­ti­fi­caat.

Ei­gen­lijk zou al­les daar­mee klaar moe­ten zijn. Maar op som­mi­ge sys­te­men ge­bruikt de ser­ver geen IPv6, maar staat hij al­leen op bin­nen­ko­men­de IPv4-ver­bin­din­gen te wach­ten. Om dat te tes­ten, open je op de ser­ver­ma­chi­ne een ter­mi­nal en be­werk je het con­fi­gu­ra­tie­be­stand met

bij­voor­beeld na­no. Voeg in /etc/openvpn/ ser­ver.conf de re­gels log-ap­pend /var/ log/openvpn.log en sta­tus /var/log/openvpn-sta­tus.log toe. Sla de wij­zi­gin­gen op met Ctrl+X en Y. Maak de log­be­stan­den aan met

su­do touch /var/log/openvpn.log su­do touch /var/log/openvpn-sta­tus.log

Start de ser­ver om hem uit te pro­be­ren

su­do ser­vi­ce openvpn start

Als hij nu op IPv4-ver­bin­din­gen staat te wach­ten, komt in /var/log/openvpn.log 'Could not de­ter­mi­ne IPv4/IPv6 pro­to­col. Using AF_INET' te staan. Zet in dat ge­val lo­cal op het ex­ter­ne IPv6-adres. Dat doe je door in het be­stand /etc/openvpn/ser­ver. conf bij­voor­beeld het vol­gen­de als eer­ste re­gel toe te voe­gen:

lo­cal 2001:db8:aa00:ca­fe::1

Con­fi­gu­reer nu de pc die de eer­ste OpenVPN-client moet wor­den. Voor het op­bou­wen van een tun­nel via IPv6 aan de client­kant is min­stens OpenVPN 2.40 no­dig. Ou­de­re ver­sies gaan de fout in als je een ser­ver al­leen aan de hand van zijn IPv6adres wilt aan­spre­ken ('block-out­si­de-dns and can­not re­sol­ve host address, ipv6adress, no­de­na­me nor ser­v­na­me pro­vi­ded, or not known'). Als je OpenVPN al eer­der hebt ge­ïn­stal­leerd, moet je in elk ge­val de clients bij­wer­ken.

Als je nog geen OpenVPN-clients ge­bruikt: de soft­wa­re voor Win­dows en macOS is via de link rechts on­der­aan op de­ze pa­gi­na te down­lo­a­den. Bij Li­nux kun je het nor­maal ge­spro­ken in­stal­le­ren met het com­man­do apt-get. De ac­tu­e­le OpenVPN-ver­sie zit ech­ter nog niet in al­le re­po­si­to­ry's. Bij De­bi­an en Ubuntu krijg je de laat­ste ver­sie van OpenVPN door sim­pel­weg de re­po­si­to­ry van de ont­wik­ke­laars toe te voe­gen:

wget -O - htt­ps://swup­da­te.open.vpn. net/repos/re­po-pu­blic.gpg|apt-key add echo "deb http://build.openvpn.net/ de­bi­an/openvpn/sta­ble xe­ni­al main" > /etc/apt/sour­ces.list.d/openvpn-

ap­tre­po.list apt -y up­da­te && apt -y in­stall

openvpn ea­sy-rsa

Volg de des­be­tref­fen­de hand­lei­ding om het con­fi­gu­re­ren van een client goed uit te voe­ren. Na een her­start moet de client de VPN-ver­bin­ding met­een op­bou­wen en bij­voor­beeld het ICMP-ver­keer naar de ser­ver door­stu­ren (ping -c3 10.8.0.1), Voeg het IPv6-adres en het OpenVPNpoort­num­mer van de doel­ser­ver daar­na toe met een re­mo­te-re­gel – bij­voor­beeld re­mo­te 2001:db8:aa00:ca­fe::1 1194. Laat het IPv4-adres daar ge­woon staan in een re­gel er­on­der. Dan pro­beert je client eerst een tun­nel via IPv6 op te bou­wen, en daar­na pas via IPv4.

IPv6 uit­brei­den

Om IPv6 te tun­ne­len, vol­staat het om in de ser­ver­con­fi­gu­ra­tie zes ex­tra re­gels toe te voe­gen. Daar ge­bruik je het eer­der in­ge­stel­de IPv6-adres voor, als edi­tor ge­bruik je bij­voor­beeld na­no:

ser­ver-ipv6 2001:db8:aa00:ab­ba::/64 tun-ipv6 push tun-ipv6 if­con­fig-ipv6 2001:db8:aa00:ab­ba::1 2001:db8:aa00:ab­ba::2 push "rou­te-ipv6 2001:db8:aa00:beef::2/64"

Stel in plaats van 2001:db8:aa00:ab­ba::/64 het sub­net­be­reik in dat je voor je VPN be­dacht hebt. Geef in plaats van 2001:db8:aa00:ab­ba::1 en ::2 het tun­nel­adres van je ser­ver op. Ver­wij­der de bei­de re­gels die met "push Re­di­rect…" en "push DHCP…" be­gin­nen.

Scha­kel het door­stu­ren van IPv6 in:

sy­s­ctl -w net.ipv6.conf.all. 

for­war­ding=1

En start OpenVPN dan ver­vol­gens op­nieuw op met

su­do ser­vi­ce openvpn restart

Daar­mee is de ser­ver klaar om IPv6-tun­nels op te bou­wen en klaar voor het uit­de­len van IPv6-adres­sen in het VPN.

IPv4-cients kun je er net als voor­heen con­tact mee la­ten ma­ken. De ser­ver houdt dat bij in het log­be­stand /var/log/openvpn-sta­tus.log. Daar zet hij de na­men in van de clients en hun IPv4-bron­adres­sen. Voor­beeld:

client1,87.150.7.170,371107,369203,

Tue May 15 23:20:05 2018

De clients krij­gen nu ech­ter ook IPv6adres­sen van het VPN-sub­net (bij­voor­beeld 2001:db8:aa00:ab­ba::1007). Voor een test kun je ping6 met het tun­nelIPv6-adres van je ser­ver ge­brui­ken. In het voor­beeld ge­brui­ken we

ping6 -c3 2001:db8:aa00:ab­ba::1.

De clients moe­ten zich­zelf en de ser­ver ook via IPv4 kun­nen blij­ven be­rei­ken via ping -c3 10.8.0.1.

IPv6-toe­gang tot het lo­ka­le net­werk

Om er­voor te zor­gen dat de clients an­de­re ap­pa­ra­ten in het lo­ka­le net­werk via IPv6 en IPv4 kun­nen be­rei­ken, maak je in de rou­ter waar­ach­ter de ser­ver draait een sta­ti­sche IPv6- en IPv4-rou­te aan naar de OpenVPN-ser­ver.

Als je een Fritz­box ge­bruikt: de sta­ti­sche IPv6-rou­te stel je daar­bij in bij 'Ho­me Net­work / Ho­me Net­work Over­view / Net­work Set­tings / IPv6 Rou­tes'. Geef daar in het veld 'IPv6 net­work' het OpenVPN-sub­net op (in het voor­beeld is dat 2001:db8:aa00:ab­ba::) en de pre­fix­leng­te (hier /64). Voeg bij het veld Ga­te­way het link-lo­ka­le IPv6-adres van je ser­ver in, bij­voor­beeld fe80::1231:3213:1231:3213. Ac­ti­veer de rou­te en sla hem op. (nkr)

www.ct/nl/soft­link/1809126

Bij een Fritz­box-rou­ter kun je de OpenVPN-poor­ten voor IPv4 en IPv6 apart vrij­ge­ven. Han­dig voor test­doel­ein­den, want je kunt ze apart blok­ke­ren in­dien no­dig.

OpenVPN kan de clients ook IPv6-adres­sen toe­ken­nen. Dat kan voor gro­te net­wer­ken han­dig zijn om­dat IPv6 veel gro­te­re adres­be­rei­ken biedt dan IPv4. Om er­voor te zor­gen dat clients ap­pa­ra­ten in het lo­ka­le net­werk via IPv6 be­rei­ken, stel je sta­ti­sche IPv6-rou­tes in.

Newspapers in Dutch

Newspapers from Netherlands

© PressReader. All rights reserved.