188 lines
7.1 KiB
Plaintext
188 lines
7.1 KiB
Plaintext
Es gibt ein ChaosVPN mit OpenVPN, BGP, ... Details unter [http://wiki.diac24.net/ wiki.diac24.net]. Interessenten bei [[Benutzer:toidinamai|toidinamai]] melden!
|
|
|
|
=Mitmachen=
|
|
|
|
==Vorbereitung==
|
|
|
|
# Gucken, welcher Rechner der eigene Router sein soll
|
|
# Folgende Programme sollten dort installiert sein:
|
|
#* [http://openvpn.net/ OpenVPN] zum Tunneln ('''''tun'''tap''-Support im Betriebssystem wird benötigt)
|
|
#* [http://quagga.net/ Quagga] mit ''zebra'' und ''bgpd''
|
|
# Netznummer von [[toidinamai]] (oder [[Benutzer:Astro|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:
|
|
<pre>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
|
|
</pre>
|
|
|
|
====Config des Partners====
|
|
<pre>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
|
|
</pre>
|
|
|
|
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====
|
|
<pre>hostname shniftimachine
|
|
password superstrenggeheimespasswort</pre>
|
|
|
|
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:
|
|
<pre>% 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> </pre>
|
|
|
|
===bgpd konfigurieren===
|
|
'''bgpd''' wird uns dienen, mit unseren ''Nachbarn'' Routen auszutauschen.
|
|
|
|
====Eine minimale /usr/local/etc/quagga/bgpd.conf====
|
|
Genau wie zebra:
|
|
<pre>hostname shniftimachine-BGP
|
|
password superstrenggeheimespasswort</pre>
|
|
|
|
Dann den Daemon starten:
|
|
bgpd -df /usr/local/etc/quagga/bgpd.conf
|
|
|
|
Dieser hat ebenfalls ein Telnet-Interface, diesmal auf Port '''2605'''.
|
|
<pre>% 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> </pre>
|
|
|
|
====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 64'''704'''
|
|
|
|
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 64'''616'''
|
|
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'''
|
|
|
|
==Das finale Skript==
|
|
<pre><nowiki>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!"
|
|
</nowiki></pre>
|
|
|
|
=TODO=
|
|
Was hier fehlt:
|
|
* prefix-lists zum Filtern von Routen
|