C3D2VPN
Es gibt ein ChaosVPN mit OpenVPN, BGP, ... Details unter wiki.diac24.net. Interessenten bei toidinamai melden!
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
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...
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
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
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
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!"
TODO
Was hier fehlt:
- prefix-lists zum Filtern von Routen