C3D2VPN

Aus C3D2
Version vom 12. Februar 2006, 00:24 Uhr von Astro (Diskussion | Beiträge) (Tunneln: Dem Tunnel eine IPv6-Adresse verpassen)

Wechseln zu: Navigation, Suche

Es gibt ein ChaosVPN mit OpenVPN, BGP, ... Details unter wiki.diac24.net. Interessenten bei toidinamai melden!

Mitmachen

Vorbereitung

  1. Gucken, welcher Rechner der eigene Router sein soll
  2. Folgende Programme sollten dort installiert sein:
    • OpenVPN zum Tunneln (tuntap-Support im Betriebssystem wird benötigt)
    • Quagga mit zebra und bgpd
  3. 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)
  4. 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

Jetzt unser Netzwerk, das wir von uns selbst advertisen wollen:

network 172.22.104.0/24


TODO

Was hier fehlt:

  • prefix-lists zum Filtern
  • bgpd über IPv6 link-locals