Ik wil het netwerk wat we aanleggen op onze bijeenkomsten ook IPv6-geschikt maken, om te kunnen demonstreren hoe eenvoudig het is als het lokale netwerk het ondersteund. De uitdaging is zoals zo vaak niet om het lokale netwerk IPv6-geschikt te maken, maar om de IPv6 verbinding naar buiten te leggen.
De volgende onderdelen zijn nodig:
- Een IPv6 verbinding naar buiten
- Een lokale router die IPv6 kan routeren en op het netwerk IPv6 adressen kan uitdelen
En vooral: het moet automatisch werken. De apparatuur moet dusdanig geconfigureerd zijn dat ook als ik er niet ben de verbindingen vanzelf opkomen en er een werkende Internet verbinding is.
Hieronder beschrijf ik de gemaakte keuzes en de configuratie van een en ander.
Een IPv6 verbinding naar buiten
De verbinding naar buiten was de lastige opgave. De eigen aansluiting waar we zitten heeft nog geen IPv6, en mijn favoriete keuze:
hurricane electric tunnels werken alleen als je controle hebt over je eigen eindpunt en het IPv4 adres daarvan redelijk vast is. Nu zal dat IPv4 adres niet vaak wijzigen, maar er zit wel een NAT device tussen onze router en de buitenwereld waar we geen controle over hebben. De tunnel-aanbieder die hier beter tegen kan is
Sixxs maar daar is het juist weer lastig dat we de aansluiting eigenlijk maar een paar keer een dag gebruiken.
Oplossing: ik heb op een andere plek op Internet een IPv6-tunnel met hurricane electric met een vast eindpunt. Over dat eindpunt heb ik volledige controle (colo-server). Vanaf de pcgg router PC kan ik met openvpn een tunnel leggen naar die server, en zo een IPv6 verbinding opzetten. Hiervoor heb ik een prachtig voorbeeld gevonden op Howto: OpenVPN IPv6 Tunnel Broker Guide waarvan ik veel onderdelen over heb genomen.
In ieder geval wil ik werken met een encrypted tunnel met ssl certificaten zodat de router PC na installatie volautomatisch een tunnel kan opzetten zonder dat er passwords ingetikt hoeven te worden. Verderop beschrijf ik de openvpn configuratie aan beide kanten, maar eerst de configuratie om ipv6 ook echt actief te maken op het demo netwerk.
IPv6 configuratie op het demonetwerk
IPv6 autoconfiguratie voor PCs op het netwerk
Op de router PC, een PC die router is voor ons demo netwerk met debian linux gebruik ik daarvoor
radvd.
Uit
/etc/radvd.conf:
interface eth1
{
AdvSendAdvert on;
AdvHomeAgentFlag off;
prefix 2001:470:d3f8:1000::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};
IPv6 config op de router PC
Ik wil IPv6 forwarden, dus in
/etc/sysctl.conf:
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1
De IPv6 configuratie van de interface naar het client netwerk moet statisch, dus in
/etc/network/interfaces:
iface eth1 inet6 static
address 2001:470:d3f8:1000::1
netmask 64
IPv6 config op de server PC
Ik wil IPv6 forwarden, dus in
/etc/sysctl.conf:
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1
Een openvpn tunnel naar buiten
OpenVPN config voor de server
In
/etc/openvpn/apollo-metcalfe.conf:
# OpenVPN config file for server side apollo using SSL/TLS mode and RSA
# certificates / keys
#
# '#' or ';' may be used to delimit comments.
#
# task: tunneling IPv6 to a remote, dynamic ip site named 'metcalfe', the
# pcgg network router
#
# based on: openvpn(1), http://www.join.uni-muenster.de/Dokumente/Howtos/Howto_OpenVPN_Tunnelbroker.php?lang=en
# daemon is needed anyway, but to make the point: server runs as daemon
# process
daemon
# tun is the only supported way for ipv6. we have ipv6 address space enough
# anyway
dev tun
# make it forward ipv6 traffic
tun-ipv6
# I am the server side and I await a connection to verify via tls
tls-server
# script to run when the connection comes up
up /etc/openvpn/metcalfe.up
# log what we need to know
log-append /var/log/openvpn-metcalfe.log
# at verbosity level 3
verb 3
# default openvpn port
port 1194
# udp
proto udp
# configuration options to keep working through layers of NAT
persist-tun
ping 15
ping-restart 45
ping-timer-rem
persist-key
# crypto config
# we have one peer, and this is the name
tls-remote /C=NL/CN=metcalfe.pcgg.nl
# dh-hash, server
dh /etc/openvpn/ssl/dh1024.pem
ca /etc/openvpn/ssl/idefix.net-ca.crt
cert /etc/openvpn/ssl/apollo.crt
key /etc/openvpn/ssl/apollo.key
SSL voor de server
Ik gebruik m'n eigen certificate authority.
DH-hash voor de server:
# openssl dhparam -out dh1024.pem 1024
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
......................+.......................
Prive sleutel voor de server:
# openssl genrsa -des3 -out apollo.key 1024
Generating RSA private key, 1024 bit long modulus
...................................++++++
.............++++++
e is 65537 (0x10001)
Enter pass phrase for apollo.key:
Pass phrase verwijderen:
# openssl rsa -in apollo.key -out apollo.key.insecure
Enter pass phrase for apollo.key:
writing RSA key
# rm apollo.key
# mv apollo.key.insecure apollo.key
SSL ca ophalen
# wget http://idefix.net/idefix.net-ca.crt
--10:26:12-- http://idefix.net/idefix.net-ca.crt
=> `idefix.net-ca.crt'
Resolving idefix.net... 82.95.196.202, 2001:888:1011::694
Connecting to idefix.net|82.95.196.202|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,371 (1.3K) [application/x-x509-ca-cert]
100%[====================================>] 1,371 --.--K/s
10:26:12 (2.14 MB/s) - `idefix.net-ca.crt' saved [1371/1371]
En een request voor een certificate:
# openssl req -new -key apollo.key -out apollo.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [NL]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:apollo.idefix.net
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Ik sign de .csr op de certificate authority, en dan krijg ik een .crt:
# openssl x509 -in apollo.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 36 (0x24)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=NL, ST=Utrecht, L=Utrecht, O=idefix.net,
OU=Certificate Authority, CN=idefix.net CA/emailAddress=hostmaster@idefix.net
Validity
Not Before: May 14 08:55:26 2009 GMT
Not After : May 4 08:55:26 2011 GMT
Subject: C=NL, CN=apollo.idefix.net
OpenVPN config voor de router PC
Lijkt erg op die van de server:
# OpenVPN config file for client side metcalfe using SSL/TLS mode and RSA
# certificates / keys
#
# '#' or ';' may be used to delimit comments.
#
# task: tunneling IPv6 to a remote, dynamic ip site named 'metcalfe', the
# pcgg network router
#
# based on: openvpn(1), http://www.join.uni-muenster.de/Dokumente/Howtos/Howto_OpenVPN_Tunnelbroker.php?lang=en
# daemon is needed anyway, but to make the point: server runs as daemon
# process
daemon
# tun is the only supported way for ipv6. we have ipv6 address space enough
# anyway
dev tun
# make it forward ipv6 traffic
tun-ipv6
# I am the client side and I initiate a connection to verify via tls
tls-client
# I talk to apollo.idefix.net
remote apollo.idefix.net
# script to run when the connection comes up
up /etc/openvpn/pcgg-ipv6.up
# log what we need to know
log-append /var/log/openvpn-metcalfe.log
# at verbosity level 3
verb 3
# default openvpn port
port 1194
# udp
proto udp
# configuration options to keep working through layers of NAT
persist-tun
ping 15
ping-restart 45
ping-timer-rem
persist-key
# crypto config
ca /etc/openvpn/ssl/idefix.net-ca.crt
cert /etc/openvpn/ssl/metcalfe.crt
key /etc/openvpn/ssl/metcalfe.key
SSL voor de router PC
Eigenlijk heel erg hetzelfde als voor de server alleen hoeft er nu geen DH key gegenereerd te worden.
Prive sleutel voor de router PC genereren:
# openssl genrsa -des3 -out metcalfe.key 1024
Generating RSA private key, 1024 bit long modulus
...................................++++++
.............++++++
e is 65537 (0x10001)
Enter pass phrase for metcalfe.key:
Pass phrase verwijderen:
# openssl rsa -in metcalfe.key -out metcalfe.key.insecure
Enter pass phrase for metcalfe.key:
writing RSA key
# rm metcalfe.key
# mv metcalfe.key.insecure metcalfe.key
SSL ca ophalen
# wget http://idefix.net/idefix.net-ca.crt
--10:26:12-- http://idefix.net/idefix.net-ca.crt
=> `idefix.net-ca.crt'
Resolving idefix.net... 82.95.196.202, 2001:888:1011::694
Connecting to idefix.net|82.95.196.202|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,371 (1.3K) [application/x-x509-ca-cert]
100%[====================================>] 1,371 --.--K/s
10:26:12 (2.14 MB/s) - `idefix.net-ca.crt' saved [1371/1371]
En een request voor een certificate:
# openssl req -new -key metcalfe.key -out metcalfe.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [NL]:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:metcalfe.pcgg.nl
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Ik sign de .csr op de certificate authority, en dan krijg ik een .crt:
# openssl x509 -in metcalfe.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 37 (0x25)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=NL, ST=Utrecht, L=Utrecht, O=idefix.net,
OU=Certificate Authority, CN=idefix.net CA/emailAddress=hostmaster@idefix.net
Validity
Not Before: May 20 14:10:17 2009 GMT
Not After : May 10 14:10:17 2011 GMT
Subject: C=NL, CN=metcalfe.pcgg.nl
Omdat het certificaat waarmee de client aankomt gesigned is door de certificate authority die de server vertrouwd zal deze de naam en dus de connectie accepteren.
Op zaterdag 23 mei 2009 zal de hcc!pcgg netwerkgroep weer bij elkaar komen. Het thema is dit keer beveiligde certificaten en e-mail. 10:30 Zaal open en opbouw Onderwerpen: Certificaten en email, waarom zou je dat doen en hoe moet dat? (Henk van
Gevolgd: May 24, 20:40