C3D2VPN
Achtung! Anachronistisch! |
---|
Dieser Artikel enthält keine relevanten Informationen zu den aktuellen Verhältnissen. Ferner handelt es sich um einen archivierten Artikel. |
obsolete
Es gibt ein ChaosVPN mit OpenVPN, BGP, ... Details unter wiki.diac24.net. Interessenten bei toidinamai melden!
Update: das Projekt wird von den coolen Bremern gerade unter http://dn42.net/ wiederbelebt.
Mitmachen
Vorbereitung
- Gucken, welcher Rechner der eigene Router sein soll
- Folgende Programme sollten dort installiert sein:
- Netznummer von toidinamai (oder Astro) holen
- ChaosVPN hat die Nummern 64..127 vom DIAC24-Projekt erhalten
- AS-Nummer ist dann 64600+n
- Eigenes Netz ist dann bspw. 172.22.n.0/24 (wir wollen sparsam sein)
- Ein oder zwei erste Tunnelpartner suchen (z.B. toidinamai oder in irc.spaceboyz.net #spaceboyz fragen)
Tunneln
Wenn zwei Teilnehmer nicht direkt verbunden sind, dann muss ein virtuelles Netzwerk über einen Tunnel hergestellt werden. Das geht zum Beispiel per GRE oder OpenVPN.
OpenVPN P2P
Schlüssel erzeugen
Einer erzeugt einen OpenVPN-Schlüssel, für den Tunnel zwischen Nummer 16 und 104 bspw.:
openvpn --genkey --secret dc16-dc104.key
Dieser muss dem Partner gegeben werden, denn beide verwenden für den Tunnel zwischen ihnen den selben Key.
Config anlegen
Das sind nur ungefähre Richtlinien:
mode p2p # Peer-to-peer-Modus remote shnifti.dyndns.org # Peer-Adresse, kann auch (Dyn)DNS sein wenn nicht statisch lport 2399 # Lokaler Port rport 2301 # Remote-Port proto udp # ...über UDP dev-type tun dev tun104 # Interfacename, darf unter Linux beliebig sein tun-ipv6 # Wir wollen IPv6 können comp-lzo # Komprimierung cd /usr/local/etc/openvpn # Hier finden wir den Key secret dc16-dc104.key # Name des Keys user nobody # Unter diesen Rechten soll OpenVPN laufen group nobody # ...dito persist-key # Bei Verbindungsabbruch Key nicht vergessen persist-tun # Bei Verbindungsabbruch Interface dalassen status /var/log/openvpn-status-dc104.log log-append /var/log/openvpn-dc104.log verb 1 # Verbosity ifconfig 172.22.16.1 172.22.104.1 # Adresseinstellung lokal-remote *im* Tunnel
Config des Partners
mode p2p # P2P Modus lport 2300 # Localer Port rport 2304 # Remote Port - Astros Port dev-type tun dev tun16 tun-ipv6 # IP Version 6 wird verwendet comp-lzo # Komprimierung cd /etc/openvpn # Ort des Keys secret vpn_astro.key # Name des Keys user guest # Rechte für Open Vpn group guest # guest persist-key # merkt sich den key bei Verbindungsabbruch persist-tun # lässt das Interface da bei Verbindungsabbruch status /var/log/openvp0n_status_astro.log log-append /var/log/openvpn_astro.log verb 1 # Verbosity ifconfig 172.22.104.1 172.22.16.1 # Adresseneinstellung local-remote im Tunnel
Jetzt steht die Verbindung. Nun muss noch dafür gesorgt werden, dass alle Netze allen bekannt gemacht werden...
OpenVPN SSL-Server
Eine Beispielkonfiguration findet sich im Artikel C3D2VPN/Cthulhu.
Dem Tunnel eine IPv6-Adresse verpassen
Während das unter *BSD schon automatisch geschieht, muss man das unter Linux manuell tun. Wichtig ist hierbei, dass die Adresse über Monate hin relativ konstant bleibt, da sie bei beiden Peers im bgpd eingetragen werden muss.
FreeBSD:
ifconfig tun16 inet6 fe80::dead:beef add
Linux:
ip -6 addr add fe80::dead:beef dev tun16
Wichtig: die Peers sollten pro Tunnel verschiedene Adressen verwenden.
fe80::-Adressen sind im übrigen Link-local, haben also nur für das jeweilige Interface Gültigkeit.
BGP-Peering
zebra konfigurieren
zebra bildet die Schnittstelle zwischen den Quagga-Routingdaemonen und dem Betriebssystem. Weiterhin kann man noch die (statische) Adresskonfiguration der Interfaces darüber machen, aber vielleicht will man das lieber von seiner Distribution gemacht haben.
Eine minimale /usr/local/etc/quagga/zebra.conf
hostname shniftimachine password superstrenggeheimespasswort
Testen
Dann den Daemon starten:
zebra -df /usr/local/etc/quagga/zebra.conf
Der Daemon öffnet einen Port, über den man ihn konfigurieren kann. Bei Gelegenheit wegfirewallen. Jetzt kann getestet werden:
% telnet localhost 2601 Trying ::1... Connected to localhost. Escape character is '^]'. Hello, this is Quagga (version 0.98.4). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: ISP> sh ISP> show int ISP> show interface tun99 Interface tun99 is up, line protocol detection is disabled index 12 metric 1 mtu 1500 <UP,POINTOPOINT,RUNNING,MULTICAST> inet6 fe80::250:bfff:fe41:5e57/64 pointopoint :: inet 172.22.16.1/32 pointopoint 172.22.99.1 input packets 371, bytes 59096, dropped 0, multicast packets 0 input errors 0 output packets 448, bytes 38804, multicast packets 4 output errors 0 collisions 0 ISP>
bgpd konfigurieren
bgpd wird uns dienen, mit unseren Nachbarn Routen auszutauschen.
Eine minimale /usr/local/etc/quagga/bgpd.conf
Genau wie zebra:
hostname shniftimachine-BGP password superstrenggeheimespasswort
Konfigurieren
Dann den Daemon starten:
bgpd -df /usr/local/etc/quagga/bgpd.conf
Dieser hat ebenfalls ein Telnet-Interface, diesmal auf Port 2605.
% telnet ::1 2605 Trying ::1... Connected to localhost. Escape character is '^]'. Hello, this is Quagga (version 0.98.4). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: ISP-bgp>
bgpd konfigurieren
Befinden wir uns nun einmal auf der Shell des bgpd, können wir loslegen.
Um Dinge zu ändern, müssen wir in den Enable mode kommen:
enable
Jetzt kommen wir zur Konfiguration:
configure terminal
Wir bauen unseren Router (deine Netzwerknummer n ist hier fett geschrieben, dringendst selbst anpassen!):
router bgp 64704
Jeder Router benötigt eine eindeutige Router-ID. Dieser Anforderung kommt die IP-Adresse nach:
bgp router-id 172.22.104.1
Jetzt unser Netzwerk, das wir von uns selbst advertisen wollen:
network 172.22.104.0/24
Nun konfigurieren wir den Nachbarn anhand seiner IPv6-Adresse auf dem Tunnel. Zuerst die AS-Nummer vom Peer:
neighbor fe80::cafe:babe remote-as 64616
Interface einstellen:
neighbor fe80::cafe:babe interface tun16
Eine weitere Option für's Verhalten:
neighbor fe80::cafe:babe soft-reconfiguration inbound
Eine Beschreibung zum Wiedererkennen (frei wählbar):
neighbor fe80::cafe:babe description Astro
Jetzt noch IPv6 ähnlich oben anschalten:
address-family ipv6 network 2001:6f8:13db:doof::/64 neighbor fe80::250:bfff:fe41:5e57 activate neighbor fe80::250:bfff:fe41:5e57 soft-reconfiguration inbound
Testen
Übersicht über neighbors:
blackhole# show bgp neighbors BGP neighbor is fe80::1337, remote AS 64708, local AS 64699, external link Description: nulli BGP version 4, remote router ID 172.22.108.1 BGP state = Established, up for 00:04:48 Last read 00:00:48, hold time is 180, keepalive interval is 60 seconds Neighbor capabilities: Route refresh: advertised and received(old & new) Address family IPv4 Unicast: advertised and received Address family IPv6 Unicast: advertised and received Received 26 messages, 1 notifications, 0 in queue Sent 436 messages, 1 notifications, 0 in queue Route refresh request: received 1, sent 0 Minimum time between advertisement runs is 30 seconds For address family: IPv4 Unicast Inbound soft reconfiguration allowed NEXT_HOP is always this router Community attribute sent to this neighbor(both) Inbound path policy configured Incoming update prefix filter list is *diac 0 accepted prefixes For address family: IPv6 Unicast Inbound soft reconfiguration allowed Community attribute sent to this neighbor(both) 0 accepted prefixes Connections established 3; dropped 2 Last reset 00:05:07, due to BGP Notification received Local host: fe80::2c0:26ff:fe88:3705, Local port: 63242 Foreign host: fe80::1337, Foreign port: 179 Nexthop: 172.22.99.1 Nexthop global: fe80::2c0:26ff:fe88:3705 Nexthop local: :: BGP connection: shared network Read thread: on Write thread: off
Übersicht über akzeptierte IPv4-Prefixes:
blackhole# show ip bgp BGP table version is 0, local router ID is 172.22.99.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.22.2.0/25 172.22.12.1 0 64612 64624 64602 i *> 172.22.12.0/24 172.22.12.1 0 0 64612 i *> 172.22.13.0/24 172.22.12.1 0 64612 64613 i *> 172.22.16.0/23 172.22.12.1 0 64612 64624 64616 i *> 172.22.20.0/23 172.22.12.1 0 64612 64624 64620 i *> 172.22.24.0/23 172.22.12.1 0 64612 64624 i *> 172.22.64.0/28 172.22.12.1 0 64612 64664 i *> 172.22.99.0/24 0.0.0.0 0 32768 i [...]
Übersicht über akzeptierte IPv6-Prefixes:
blackhole# show ipv6 bgp BGP table version is 0, local router ID is 172.22.99.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 2001:6f8:13db::/64 2001:6f8:13db::1 0 0 64612 i *> 2001:6f8:13db:2342::/64 2001:6f8:13db::1 0 64612 64664 i *> 2001:6f8:13db:686d::/64 2001:6f8:13db::1 0 64612 64613 i *> 2001:6f8:13db:686e::/64 2001:6f8:13db::1 0 64612 64613 i *> 2001:6f8:13db:6f76::/64 2001:6f8:13db::1 0 0 64612 i *> 2001:6f8:13db:a587::/64 2001:6f8:13db::1 0 0 64612 i *> 2001:6f8:13db:c3d2::/64 :: 0 32768 i [...]
Konfiguration speichern
write file
Testen
Routen auflisten unter Linux
IPv4
$ /sbin/ip r 217.160.179.1 dev eth0 scope link 172.23.32.1 dev dc32 proto kernel scope link src 172.22.24.1 172.22.12.1 dev dc12 proto kernel scope link src 172.22.24.1 172.22.16.1 via 172.22.25.1 dev sbz0 proto zebra metric 10 equalize 172.22.20.1 dev dc20 proto kernel scope link src 172.22.24.1 172.22.26.2 dev dc26 proto kernel scope link src 172.22.24.1 172.22.2.22 dev dc2b proto kernel scope link src 172.22.24.1 [...]
IPv6
$ /sbin/ip -6 r 2001:6f8:13db::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:2342::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:686d::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:686e::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:6f76::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:a587::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 2001:6f8:13db:c3d2::/64 via fe80::51a9:b338:f7b7:3801 dev dc12 proto zebra metric 1024 mtu 1460 advmss 1400 [...]
Routen auflisten unter *BSD
%netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 213.187.72.7 UGS 0 29886839 tun0 10.0.0.1 10.0.0.2 UH 0 17 tun108 127.0.0.1 127.0.0.1 UH 2 18391 lo0 172.16/12 127.0.0.1 UG1B 0 168 lo0 172.22.2/25 172.22.12.1 UG1 0 0 vpndc1 172.22.12/24 172.22.12.1 UG1 0 0 vpndc1 [...] Internet6: Destination Gateway Flags Netif Expire ::/96 ::1 UGRS lo0 ::1 ::1 UH lo0 ::ffff:0.0.0.0/96 ::1 UGRS lo0 2000::/3 vpndc12 U1 vpndc12 2001:6f8:13db::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:2342::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:686d::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:686e::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:6f76::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:a587::/64 fe80::51a9:b338:f7b7:3801%vpndc12 UG1 vpndc12 2001:6f8:13db:c3d2::/64 link#1 UC rl0 2001:6f8:13db:c3d2::1 00:c0:26:88:37:05 UHL lo0 [...]
Traceroute
Per IPv4 zu spaceboyz.net
% traceroute 172.22.24.1 traceroute to 172.22.24.1 (172.22.24.1), 64 hops max, 40 byte packets 1 blackhole.hq.c3d2.de (172.22.99.1) 27.120 ms 27.658 ms 25.498 ms 2 172.22.12.1 (172.22.12.1) 123.404 ms 117.183 ms 119.433 ms 3 172.22.24.1 (172.22.24.1) 130.592 ms 147.204 ms 147.839 ms
Per IPv6 zu spaceboyz.net
% traceroute6 spaceboyz.net traceroute6 to spaceboyz.net (2001:8d8:81:5c0::1) from 2001:6f8:13db:c3d2:290:4bff:fedc:634, 64 hops max, 12 byte packets 1 2001:6f8:13db:c3d2::1 10.172 ms 4.405 ms 12.979 ms 2 benkstein.net 97.529 ms 103.208 ms 98.485 ms 3 sbz.n24.diac24.net 115.576 ms 151.346 ms 115.855 ms
Das finale Skript
openvpn --config .../dc16.conf # Tunnel starten # evtl. vorhandene dynamische IPv6-Adressen entfernen ifconfig tun16 inet6 fe80::dead:beef add # statische IPv6-Adresse zebra -df .../zebra.conf # Daemonen bgpd -df .../bgpd.conf # starten echo "Here we go!"
Erweiterte BGP-Konfiguration
prefix-lists
Wir filtern eingehende Routen, damit uns nicht jeder Peer den eigenen Traffic umleiten kann (je einmal in der router- und in der address-family-Konfiguration):
neighbor fe80::f00 prefix-list vpn-in in
Diese Listen müssen auch noch angelegt werden, das geschieht in direkt im configure terminal. Beispielkonfiguration:
ip prefix-list vpn-in seq 10 permit 172.16.0.0/12 ge 16 ip prefix-list vpn-in seq 100 deny 0.0.0.0/0 le 32 ipv6 prefix-list vpn-in seq 10 permit 2000::/3 ge 16 ipv6 prefix-list vpn-in seq 100 deny ::/0 le 128
peer-groups
Bei vielen neighbors kann man sich einige Zeilen durch peer-groups (könnte man auch "Templates" nennen) sparen. Beispiel:
neighbor diac peer-group neighbor diac soft-reconfiguration inbound neighbor diac prefix-list diac-in in neighbor diac prefix-list diac-out out neighbor hq peer-group neighbor hq soft-reconfiguration inbound neighbor hq prefix-list diac-in in neighbor hq prefix-list diac-out out neighbor fe80::ac14:6e01 remote-as 64794 neighbor fe80::ac14:6e01 peer-group diac neighbor fe80::ac14:6e01 interface tun195 neighbor fe80::dead:beef remote-as 64714 neighbor fe80::dead:beef peer-group diac neighbor fe80::dead:beef interface tun114 neighbor fe80::20f:66ff:fec8:6964 remote-as 64699 neighbor fe80::20f:66ff:fec8:6964 peer-group hq neighbor fe80::20f:66ff:fec8:6964 interface rl0 neighbor fe80::280:48ff:fec2:f2b5 remote-as 64699 neighbor fe80::280:48ff:fec2:f2b5 peer-group hq neighbor fe80::280:48ff:fec2:f2b5 interface rl0 address-family ipv6 neighbor diac activate neighbor diac soft-reconfiguration inbound neighbor diac prefix-list diac-in in neighbor diac prefix-list diac-out out neighbor hq activate neighbor hq soft-reconfiguration inbound neighbor hq prefix-list diac-in in neighbor hq prefix-list diac-out out neighbor fe80::ac14:6e01 peer-group diac neighbor fe80::dead:beef peer-group diac neighbor fe80::20f:66ff:fec8:6964 peer-group hq neighbor fe80::280:48ff:fec2:f2b5 peer-group hq