OpenVPN mit Debian/Ubuntu: Unterschied zwischen den Versionen

Aus FunkFeuer Wiki
Zur Navigation springen Zur Suche springen
 
(15 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
Voraussetzungen:
Voraussetzungen:
* Aktuelles Debian Stable oder Ubuntu LTS
* Aktuelles Debian Stable oder Ubuntu LTS
* Pakete für OpenVPN, OLSR (und OLSRv2), bridge-utils
* Funkfeuer-Login
* Funkfeuer-Login
* Funkfeuer-IPv4-Adresse für das Tunneldevice respektive die Bridge aus [[https://portal.funkfeuer.at REDEEMER/FRONTEND/PORTAL]]
* Funkfeuer-IPv4-Adresse für das Tunneldevice respektive die Bridge aus [[https://portal.funkfeuer.at/wien REDEEMER/FRONTEND/PORTAL]]
* Einen Taschenrechner, der Dezimalzahlen in Hexadezimalzahlen umrechnen kann („programmiertechnischer Modus“)
* Einen Taschenrechner, der Dezimalzahlen in Hexadezimalzahlen umrechnen kann („programmiertechnischer Modus“)
* Die Funkfeuer NodeID des Knotens, dem der Tunnel zugeordnet wird. Wenn Du im Redeemer/Portal eingeloggt bist, und auf „Nodes“ und den richtigen Namen des Nodes klickst, siehst Du die NodeID in der URL in Deinem Browsers entweder so:
* Die Funkfeuer NodeID des Knotens, dem der Tunnel zugeordnet wird. Wenn Du im Redeemer/Portal eingeloggt bist, und auf „Nodes“ und den richtigen Namen des Nodes klickst, siehst Du die NodeID in der URL in Deinem Browsers entweder so:
Zeile 12: Zeile 13:




  * apt-get install openvpn openvpn-blacklist olsrd olsrd-plugins
  * apt-get install openvpn openvpn-blacklist olsrd olsrd-plugins bridge-utils ebtables


Angenommen, Dein Debian oder Ubuntu-Rechner besitzt eine Ethernetschnittstelle eth0 (oder wie das heute eher der Fall ist, en[X]s[Y]), die in derselben Broadcastdomain wie das Provider-Modem liegt, dann wirst Du /etc/network/interfaces editieren und dort zunächst eine statische Route zum Tunnelserver anlegen wollen. Im selben Arbeitsschritt könntest Du auch festlegen, dass der Tunnel unmittelbar nach dem Start der Netzwerkschnittstelle aufgebaut wird. Es ist darüber hinaus zweckmäßig, OLSR auf einer Bridge laufen zu lassen, um sich etwaige OLSR-Neustarts zu ersparen. Wir legen also auch gleich eine Bridge an und weisen ihr die Funkfeuer-IPs für IPv4 und IPv6 (aber nur für 2a02:60::/40) zu. 192.168.1.1 ist in diesem Beispiel das Providermodem als Defaultgateway. Warum setzen wir aber eine Hostroute zu 78.41.115.228/32? Ganz einfach: Olsr wird die Default-Route überschreiben. In aller Regel passiert dies mit einer Metrik von 2 und sollte nicht stören. Dennoch kommt es manchmal dazu, dass bei Fehlen der Hostroute der Tunnel quasi über sich selbst laufen soll - das funktioniert freilich nicht. Wenn Du aber auch eine Funkschnittstelle mit OLSR hast, dann läufst Du Gefahr, dass der Tunnel zu Funkfeuer über das Funkfeuer-Mesh aufgebaut würde, was absolut keinen Sinn ergibt. Daher die Hostroute.
Angenommen, Dein Debian oder Ubuntu-Rechner besitzt eine Ethernetschnittstelle eth0 (oder wie das heute eher der Fall ist, en[X]s[Y]), die in derselben Broadcastdomain wie das Provider-Modem liegt, dann wirst Du /etc/network/interfaces editieren und dort zunächst eine statische Route zum Tunnelserver anlegen wollen. Im selben Arbeitsschritt könntest Du auch festlegen, dass der Tunnel unmittelbar nach dem Start der Netzwerkschnittstelle aufgebaut wird. Es ist darüber hinaus zweckmäßig, OLSR auf einer Bridge laufen zu lassen, um sich etwaige OLSR-Neustarts zu ersparen. Wir legen also auch gleich eine Bridge an und weisen ihr die Funkfeuer-IPs für IPv4 und IPv6 (aber nur für 2a02:60::/40) zu. 192.168.1.1 ist in diesem Beispiel das Providermodem als Defaultgateway. Warum setzen wir aber eine Hostroute zu 78.41.118.150/32 oder 78.41.115.16/32? Ganz einfach: Olsr wird die Default-Route überschreiben. In aller Regel passiert dies mit einer Metrik von 2 und sollte nicht stören. Dennoch kommt es manchmal dazu, dass bei Fehlen der Hostroute der Tunnel quasi über sich selbst laufen soll - das funktioniert freilich nicht. Wenn Du aber auch eine Funkschnittstelle mit OLSR hast, dann läufst Du Gefahr, dass der Tunnel zu Funkfeuer über das Funkfeuer-Mesh aufgebaut würde, was absolut keinen Sinn ergibt. Daher die Hostroute.


/etc/network/interfaces:
/etc/network/interfaces:
  iface eth0 inet static
  iface eth0 inet static
     ...
     ...
     up /sbin/ip r a 78.41.115.228/32 dev eth0 via 192.168.1.1 metric 0
     up /sbin/ip r a 78.41.115.16/32 dev eth0 via 192.168.1.1 metric 0
     up /etc/init.d/openvpn restart
     up /etc/init.d/openvpn restart


auto br-ff
  iface br-ff inet static
  iface br-ff inet static
     bridge_fd 0
     bridge_fd 0
Zeile 39: Zeile 41:
     post-up ip link set dev br-ff promisc on
     post-up ip link set dev br-ff promisc on


Auf Distributionen mit systemd würde die Konfiguration üblicherweise in /etc/openvpn/funkfeuer.conf liegen und der Key in /etc/openvpn/funkfeuer.secret. Der Tunnel wird automatisch gestartet, wenn das systemd-snippet dafür aktiviert wird:


Die Konfiguration von OpenVPN liegt bei Debian und Ubuntu üblicherweise in /etc/openvpn, wobei das Startup-Skript die Datei /etc/default/openvpn zu seiner Initialisierung heranzieht.
systemctl enable openvpn@funkfeuer
 
Starten kann man den Dienst mit
service openvpn@funkfeuer start
 
 
Das Startup-Skript älterer Distributionen zieht die Datei /etc/default/openvpn zu seiner Initialisierung heran. Da müsst das Folgende gemacht werden:


/etc/default/openvpn:
/etc/default/openvpn:
Zeile 49: Zeile 59:
  AUTOSTART="funkfeuer"
  AUTOSTART="funkfeuer"


Somit erwartet OpenVPN seine Konfiguration in /etc/openvpn/funkfeuer.conf.
Die /etc/openvpn/funkfeuer.conf sollte in aller Regel so aussehen:


/etc/openvpn/funkfeuer.conf:
  dev            tap0
  dev            tap0
  proto          udp
  proto          udp
  remote          78.41.115.228
  remote          78.41.115.16
  # Die Portnummer XXXX wird Dir zugewiesen
  # Die Portnummer XXXX wird Dir von den Tunnelserver-Administratoren zugewiesen, trag sie in der folgenden Zeile anstelle von 50XX ein.
  port            XXXX
  port            50XX
  daemon          tap0
  daemon          tap0
  persist-tun
  persist-tun
Zeile 62: Zeile 71:
  down-pre
  down-pre
  up-restart
  up-restart
comp-lzo
  script-security 2
  script-security 2
  nobind
  nobind
Zeile 76: Zeile 84:
  down              /etc/openvpn/funkfeuer-updown.sh
  down              /etc/openvpn/funkfeuer-updown.sh
  secret            /etc/openvpn/funkfeuer.secret
  secret            /etc/openvpn/funkfeuer.secret
auth none
auth-cache none
cipher none
tun-mtu 1500
mssfix
Und je nach Deinen Gegebenheiten hinsichtlich der MTU (Formel: ermittelte MTU z.B. 1500 Byte - 20 Byte IP-Header - 8 Byte UDP-Header - 4 Byte, wenn Kompression)
#DSL mit PPPoE (1492 - 20 - 8 = 1464)
fragment 1464
#mit Kompression * (1464 - 4 = 1460)
fragment 1460
#DSL mit DHCP, Glasfaseranschluss, etc
fragment 1472
#mit Kompression
fragment 1468
'*) Soweit Dein Tunnel Kompression freigeschaltet bekommen hat, die Kompressionsart
# Headerkomprimierung
compress
# lzo -Komprimierung
compress lzo
# lz4-v2 -Komprimierung
compress lz4-v2
In älteren Konfigurationen kann es sein, dass einige Zeilen anders sind: funkfeuer.conf:
  auth SHA256
  auth SHA256
  cipher none
  cipher none
Zeile 92: Zeile 130:
  "down")
  "down")
         /sbin/brctl delif $br $dev
         /sbin/brctl delif $br $dev
        /sbin/ebtables -D FORWARD --logical-in ${br} -i ${dev} -j DROP
         /sbin/ip link set link dev $dev down
         /sbin/ip link set link dev $dev down
  ;;
  ;;
Zeile 98: Zeile 137:
  "up")
  "up")
         /sbin/brctl addif $br $dev
         /sbin/brctl addif $br $dev
        /sbin/ebtables -I FORWARD --logical-in ${br} -i ${dev} -j DROP
         /sbin/ip link set dev $br promisc on
         /sbin/ip link set dev $br promisc on
         /sbin/ip link set link dev $dev up
         /sbin/ip link set link dev $dev up
Zeile 111: Zeile 151:
  chmod +x /etc/openvpn/funkfeuer-updown.sh
  chmod +x /etc/openvpn/funkfeuer-updown.sh


In der OpenVPN-Konfiguration haben wir den statischen Schlüssel mit /etc/openvpn/funkfeuer.secret angegeben. Exemplarisch schaut das so aus - aber den „echten Key“ bekommt ein Jeder individuell zugeteilt:
In der OpenVPN-Konfiguration haben wir den statischen Schlüssel mit /etc/openvpn/funkfeuer.secret angegeben. Exemplarisch schaut das so aus - aber den „echten Key“ bekommt ein Jeder individuell zugeteilt (bitte bei Erich P. anfordern):




Zeile 209: Zeile 249:
  }
  }


Damit ist eigentlich die Arbeit getan.


Damit ist eigentlich die Arbeit getan. Für OLSR mit IPv6 gibt es noch ein paar Tricks zu wissen und noch etwas mehr Handarbeit.
=== 'the quick and dirty hack' für IPv6 ===
 
Für OLSR mit IPv6 gibt es noch ein paar Tricks zu wissen und noch etwas mehr Handarbeit.
Kopiere:
Kopiere:


*    /etc/default/olsrd nach /etc/default/olsrd6
*    /etc/default/olsrd nach /etc/default/olsrd6
**    Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6.
**    Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6.
mit vim wäre das so: vom input modus in den command modus wechseln (ESC) und in der command line folgendes eingeben:
%s/olsrd/olsrd6/g
12 ersetzungen sollten stattfinden.
%s/OLSRD/OLSRD6/g
selbiges gilt für die folgenden weiteren Dateien
*    /etc/init.d/olsrd nach /etc/init.d/olsrd6
*    /etc/init.d/olsrd nach /etc/init.d/olsrd6
**    Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6. Ersetze /usr/sbin/olsrd durch /etc/alternatives/olsrd6
**    Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6. Ersetze /usr/sbin/olsrd durch /etc/alternatives/olsrd6
*    Setz einen Link von /usr/sbin/olsrd nach /etc/alternatives/olsrd6. Das hat den Sinn, dass der Prozess auch olsrd6 heißt, wenn er läuft und Du ihn mit dem pgrep im Startskript suchen kannst.
*    Setz einen Link von /usr/sbin/olsrd nach /etc/alternatives/olsrd6.
 
ln -s /usr/sbin/olsrd /etc/alternatives/olsrd6
 
Das hat den Sinn, dass der Prozess auch olsrd6 heißt, wenn er läuft und Du ihn mit dem pgrep im Startskript suchen kannst.
 
*    Leg /etc/olsrd/olsrd6.conf an - nachfolgend ein Beispiel.
*    Leg /etc/olsrd/olsrd6.conf an - nachfolgend ein Beispiel.


Zeile 279: Zeile 338:


Sollte OLSR nicht starten wollen, liegt es entweder an einem Tippfehler oder an einer falsch formatierten IPv6-Adresse (::/0 oder 0::/0 je nach Plugin...) oder daran, dass olsrd seine Plugins nicht finden kann oder die falsche Version findet, wenn Du ein Update mit selbstkompiliertem OLSR gemacht haben solltest. Aufmerksam lesen und eventuell die LoadPlugin-Zeilen mit absoluten Pfaden zu der jeweiligen ".so" setzen, hilft.
Sollte OLSR nicht starten wollen, liegt es entweder an einem Tippfehler oder an einer falsch formatierten IPv6-Adresse (::/0 oder 0::/0 je nach Plugin...) oder daran, dass olsrd seine Plugins nicht finden kann oder die falsche Version findet, wenn Du ein Update mit selbstkompiliertem OLSR gemacht haben solltest. Aufmerksam lesen und eventuell die LoadPlugin-Zeilen mit absoluten Pfaden zu der jeweiligen ".so" setzen, hilft.
Es ist auch möglich die plugin sektion ganz wegzulassen, damit eliminiert man evtl ein weiteres Problem.
diese können ja schrittweise bei funktionierender config nachträglich wieder eingefügt werden.


Ein letzter Hinweis: OLSR wird noch nicht automatisch gestartet. Du kannst das in /etc/network/interfaces bei der Bridge br-ff mittels „up /etc/init.d/olsrd restart“ und „up /etc/init.d/olsrd6 restart“ tun, oder, Du legst die zwei Befehle in das OpenVPN-UP/DOWN-Skript. AutodetecChanges in OLSR sollte eigentlich dafür sorgen, dass der Bridge-Port immer erkannt wird, ohne, dass man den Dienst erneut starten muss.
Ein letzter Hinweis: OLSR wird noch nicht automatisch gestartet. Du kannst das in /etc/network/interfaces bei der Bridge br-ff mittels „up /etc/init.d/olsrd restart“ und „up /etc/init.d/olsrd6 restart“ tun, oder, Du legst die zwei Befehle in das OpenVPN-UP/DOWN-Skript. AutodetecChanges in OLSR sollte eigentlich dafür sorgen, dass der Bridge-Port immer erkannt wird, ohne, dass man den Dienst erneut starten muss.


Das war's. Dual-Stack OLSRv1 mit Tunnel läuft, sowie Du es gestartet hast.
Das war's. Dual-Stack OLSRv1 mit Tunnel läuft, sowie Du es gestartet hast.

Aktuelle Version vom 19. November 2020, 18:08 Uhr

Unter Debian installierst Du die Pakete für Openvpn und olsr.

Voraussetzungen:

  • Aktuelles Debian Stable oder Ubuntu LTS
  • Pakete für OpenVPN, OLSR (und OLSRv2), bridge-utils
  • Funkfeuer-Login
  • Funkfeuer-IPv4-Adresse für das Tunneldevice respektive die Bridge aus [REDEEMER/FRONTEND/PORTAL]
  • Einen Taschenrechner, der Dezimalzahlen in Hexadezimalzahlen umrechnen kann („programmiertechnischer Modus“)
  • Die Funkfeuer NodeID des Knotens, dem der Tunnel zugeordnet wird. Wenn Du im Redeemer/Portal eingeloggt bist, und auf „Nodes“ und den richtigen Namen des Nodes klickst, siehst Du die NodeID in der URL in Deinem Browsers entweder so:
    • „&id=9999“ oder so
    • „id_nodes=9999“.

Diese Zahl umgewandelt in „Hex“ brauchst Du später für Deine IPv6-Adresse.


* apt-get install openvpn openvpn-blacklist olsrd olsrd-plugins bridge-utils ebtables

Angenommen, Dein Debian oder Ubuntu-Rechner besitzt eine Ethernetschnittstelle eth0 (oder wie das heute eher der Fall ist, en[X]s[Y]), die in derselben Broadcastdomain wie das Provider-Modem liegt, dann wirst Du /etc/network/interfaces editieren und dort zunächst eine statische Route zum Tunnelserver anlegen wollen. Im selben Arbeitsschritt könntest Du auch festlegen, dass der Tunnel unmittelbar nach dem Start der Netzwerkschnittstelle aufgebaut wird. Es ist darüber hinaus zweckmäßig, OLSR auf einer Bridge laufen zu lassen, um sich etwaige OLSR-Neustarts zu ersparen. Wir legen also auch gleich eine Bridge an und weisen ihr die Funkfeuer-IPs für IPv4 und IPv6 (aber nur für 2a02:60::/40) zu. 192.168.1.1 ist in diesem Beispiel das Providermodem als Defaultgateway. Warum setzen wir aber eine Hostroute zu 78.41.118.150/32 oder 78.41.115.16/32? Ganz einfach: Olsr wird die Default-Route überschreiben. In aller Regel passiert dies mit einer Metrik von 2 und sollte nicht stören. Dennoch kommt es manchmal dazu, dass bei Fehlen der Hostroute der Tunnel quasi über sich selbst laufen soll - das funktioniert freilich nicht. Wenn Du aber auch eine Funkschnittstelle mit OLSR hast, dann läufst Du Gefahr, dass der Tunnel zu Funkfeuer über das Funkfeuer-Mesh aufgebaut würde, was absolut keinen Sinn ergibt. Daher die Hostroute.

/etc/network/interfaces:

iface eth0 inet static
   ...
   up /sbin/ip r a 78.41.115.16/32 dev eth0 via 192.168.1.1 metric 0
   up /etc/init.d/openvpn restart
auto br-ff 
iface br-ff inet static
   bridge_fd 0
   bridge_maxwait 0
   bridge_waitport 0
   bridge_stp no
   bridge_ports none
   address [REDEEMER-IP v4]
   netmask 255.255.255.255
# IPv6/OLSRv1 Schema 2a02:60:01[Node ID in Hexadezimaldarstellung, erstes Oktett]:[Node ID in Hex, zweites Oktett][Router ID (4 Bit)][Interface ID (4 Bit)]::[irgendwas]
# Nachfolgend für 9999 NodeID 9999(10) = 270F(16); Router 1, Interface 1 mit Adresse „feed“:
   post-up /sbin/ip -6 a a 2a02:60:127:0f11::feed/64 dev br-ff
# Wenn man die MAC-Adresse der Bridge definiert, wirkt sich das auf die IPv6 EUI64-Adresse beginnend mit fe80::/12 aus.
# Man kann sich eine zufällige MAC-Adresse [MAC Address Generator] (lowercase und ":"-Notation)  errechnen lassen.
   post-up ip link set dev br-ff address bc:75:33:6a:bf:cf
# Die Bridge soll allen Traffic annehmen.
   post-up ip link set dev br-ff promisc on

Auf Distributionen mit systemd würde die Konfiguration üblicherweise in /etc/openvpn/funkfeuer.conf liegen und der Key in /etc/openvpn/funkfeuer.secret. Der Tunnel wird automatisch gestartet, wenn das systemd-snippet dafür aktiviert wird:

systemctl enable openvpn@funkfeuer

Starten kann man den Dienst mit

service openvpn@funkfeuer start


Das Startup-Skript älterer Distributionen zieht die Datei /etc/default/openvpn zu seiner Initialisierung heran. Da müsst das Folgende gemacht werden:

/etc/default/openvpn:

#AUTOSTART="all" -> 
AUTOSTART="all" 

oder

#AUTOSTART="all" ->
AUTOSTART="funkfeuer"

Die /etc/openvpn/funkfeuer.conf sollte in aller Regel so aussehen:

dev             tap0
proto           udp
remote          78.41.115.16
# Die Portnummer XXXX wird Dir von den Tunnelserver-Administratoren zugewiesen, trag sie in der folgenden Zeile anstelle von 50XX ein.
port            50XX
daemon          tap0
persist-tun
up-delay
down-pre
up-restart
script-security 2
nobind
ping 10
ping-restart 60
ping-timer-rem
fast-io
sndbuf  524288
rcvbuf  524288
mute 2
verb 0
up                /etc/openvpn/funkfeuer-updown.sh
down              /etc/openvpn/funkfeuer-updown.sh
secret            /etc/openvpn/funkfeuer.secret
auth none
auth-cache none
cipher none
tun-mtu 1500
mssfix

Und je nach Deinen Gegebenheiten hinsichtlich der MTU (Formel: ermittelte MTU z.B. 1500 Byte - 20 Byte IP-Header - 8 Byte UDP-Header - 4 Byte, wenn Kompression)

#DSL mit PPPoE (1492 - 20 - 8 = 1464)
fragment 1464
#mit Kompression * (1464 - 4 = 1460) 
fragment 1460
#DSL mit DHCP, Glasfaseranschluss, etc
fragment 1472
#mit Kompression 
fragment 1468

'*) Soweit Dein Tunnel Kompression freigeschaltet bekommen hat, die Kompressionsart

# Headerkomprimierung
compress
# lzo -Komprimierung
compress lzo
# lz4-v2 -Komprimierung
compress lz4-v2


In älteren Konfigurationen kann es sein, dass einige Zeilen anders sind: funkfeuer.conf:

auth SHA256
cipher none

Diese Konfigurationsdatei benötigt also noch zwei weitere Dateien. Zum einen wäre das /etc/openvpn/funkfeuer-updown.sh. Dieses Skript wird von OpenVPN aufgerufen, sowie der Tunnel hergestellt oder beendet wird. OpenVPN übergibt diesem Skript Parameter, wie wir sie im Beispiel des Tunnelservers nützen. Für Deine Seite wird das nicht explizit erforderlich sein. Das Skript kann wie folgt aussehen:

/etc/openvpn/funkfeuer-updown.sh:

#!/bin/bash
# br-ff ist die Bridge aus /etc/network/interfaces
# $dev ist ein Parameter, den Openvpn übergibt. Hier zumeist „tap0“.
br="br-ff"
dev=$1
logger "openvpn: $(echo $@)"
logger "openvpn: $script_type"
case $script_type in
"down")
        /sbin/brctl delif $br $dev
        /sbin/ebtables -D FORWARD --logical-in ${br} -i ${dev} -j DROP
        /sbin/ip link set link dev $dev down
;;
"route-up")
;;
"up")
        /sbin/brctl addif $br $dev
        /sbin/ebtables -I FORWARD --logical-in ${br} -i ${dev} -j DROP
        /sbin/ip link set dev $br promisc on
        /sbin/ip link set link dev $dev up
        /sbin/ip link set link dev $br up
;;
esac
echo $(date) $script_type $br.$dev $script_type>> /tmp/br-vpn.log
exit 0


Das Skript muss ausführbar gemacht werden. chmod +x /etc/openvpn/funkfeuer-updown.sh

chmod +x /etc/openvpn/funkfeuer-updown.sh

In der OpenVPN-Konfiguration haben wir den statischen Schlüssel mit /etc/openvpn/funkfeuer.secret angegeben. Exemplarisch schaut das so aus - aber den „echten Key“ bekommt ein Jeder individuell zugeteilt (bitte bei Erich P. anfordern):


/etc/openvpn/funkfeuer.secret:

#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END OpenVPN Static key V1-----


Jetzt fehlt noch OLSR... Debian und Ubuntu verwenden /etc/init.d/olsrd als Startscript, das wiederum /etc/default/olsrd zu Initialisierung nutzt. Das Debian-Konzept geht noch von Adhoc-Netzen auf dem lokalen Gerät aus, kann also bis auf drei Zeilen ignoriert werden. Die Interface-Parameter lasse ich bewusst weg. Die Interfaces definiert man besser in der olsrd.conf, wo man individuelle Einstellungen tätigen kann (etwa unter anderem: ein per-Interface-Default-LQ-Multiplier, den Mode und die Gewichtung.)


/etc/default/olsrd:

START_OLSRD="YES"
DEBUGLEVEL=0
DAEMON_OPTS="-f /etc/olsrd/olsrd.conf -d $DEBUGLEVEL"


Es fehlt noch die OSLR-Konfigurationsdatei (Vorsicht: ich verwende ein selbstkompiliertes OLSR und habe die plugin-Libraries „LoadPlugin“ hardgecodet; wenn der Pfad nicht stimmt, startet OLSR nicht, plaudert aber wirklich nicht darüber, was es stört.) -

/etc/olsrd/olsrd.conf:

AllowNoInt                      yes
ClearScreen                     yes
DebugLevel                      0
FIBMetric                       "flat"
IpVersion                       4
LinkQualityAlgorithm            "etx_ff"
LinkQualityFishEye              1
LinkQualityLevel                2
MainIp                          [DIE MAIN-IP BEKOMMT IHR AUS DEM FUNKFEUER PORTAL, WENN IHR EIN GERÄT (DEVICE) ANLEGT]
MprCoverage                     1
Pollrate                        0.1
TcRedundancy                    2
TosValue                        16
UseHysteresis                   no
Willingness                     3
InterfaceDefaults
 {
       AutoDetectChanges       yes
       HelloInterval           5.0
       HelloValidityTime       100.0
       TcInterval              2.0
       TcValidityTime          300.0
       MidInterval             50.0
       MidValidityTime         300.0
       HnaInterval             50.0
       HnaValidityTime         300.0
       Ip4Broadcast            255.255.255.255
       Mode                    "mesh"
       LinkQualityMult         default 0.15
       Weight                  99
}
Interface "br-ff"
{
       AutoDetectChanges       yes
       LinkQualityMult         default 1.0
       Weight                  0
}
Hna4
{
       [SERVER-IP FALLS VORHANDEN - ZUWEISUNG VIA PORTAL]    255.255.255.255
}
LoadPlugin "olsrd_httpinfo.so.0.1"
{
 PlParam "Port" "81"
 PlParam "Net" "0.0.0.0 0.0.0.0"
 PlParam "resolve"     "false"
}
LoadPlugin "olsrd_txtinfo.so.1.1"
{
 PlParam "port"   "2006"
 PlParam "accept" "127.0.0.1"
}
LoadPlugin "olsrd_jsoninfo.so.1.1"
{
 PlParam "port"   "9090"
 PlParam "accept" "0.0.0.0"
 PlParam "UUIDFile" "/etc/olsrd/olsrd.uuid"
}

Damit ist eigentlich die Arbeit getan.

'the quick and dirty hack' für IPv6

Für OLSR mit IPv6 gibt es noch ein paar Tricks zu wissen und noch etwas mehr Handarbeit. Kopiere:

  • /etc/default/olsrd nach /etc/default/olsrd6
    • Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6.

mit vim wäre das so: vom input modus in den command modus wechseln (ESC) und in der command line folgendes eingeben:

%s/olsrd/olsrd6/g

12 ersetzungen sollten stattfinden.

%s/OLSRD/OLSRD6/g

selbiges gilt für die folgenden weiteren Dateien

  • /etc/init.d/olsrd nach /etc/init.d/olsrd6
    • Ersetz jedes Vorkommen von olsr(d) durch olsr(d)6. Ersetze /usr/sbin/olsrd durch /etc/alternatives/olsrd6
  • Setz einen Link von /usr/sbin/olsrd nach /etc/alternatives/olsrd6.

ln -s /usr/sbin/olsrd /etc/alternatives/olsrd6

Das hat den Sinn, dass der Prozess auch olsrd6 heißt, wenn er läuft und Du ihn mit dem pgrep im Startskript suchen kannst.

  • Leg /etc/olsrd/olsrd6.conf an - nachfolgend ein Beispiel.
AllowNoInt                      yes
ClearScreen                     yes
DebugLevel                      0
FIBMetric                       "flat"
IpVersion                       6
LinkQualityAlgorithm            "etx_ff"
LinkQualityFishEye              1
LinkQualityLevel                2
MprCoverage                     1
Pollrate                        0.1
TcRedundancy                    2
TosValue                        16
UseHysteresis                   no
UseNiit                         yes
Willingness                     3
InterfaceDefaults
{
       #Ip6MulticastGlobal     ff0e::1
       #Ip6MulticastSite       ff05::11
       IPv6Multicast           ff02::6d
       Weight                  99
       AutoDetectChanges       yes
       HelloInterval           50.0
       HelloValidityTime       100.0
       HnaInterval             50.0
       HnaValidityTime         300.0
       LinkQualityMult         default 0.33   
       MidInterval             50.0
       MidValidityTime         300.0
       Mode                    "mesh"
       TcInterval              2.0    
       TcValidityTime          300.0
       Weight                  99
}
Hna6
{
}
LoadPlugin "olsrd_httpinfo.so.0.1"
{
 PlParam "Net" "0::/0 2000::/3"
 PlParam "port"        "82"
}
LoadPlugin "olsrd_jsoninfo.so.1.1"
{
 PlParam "port"   "9090"
 PlParam "accept" "::"
 PlParam "UUIDFile" "/etc/olsrd/olsrd6.uuid"
 PlParam "ipv6only"           "true"
}
Interface "br-ff"
{
       AutoDetectChanges       yes
       LinkQualityMult         default 0.25   
       Mode                    "ether"
       Weight                  1
       IPv6Multicast           ff02::6d
}

Sollte OLSR nicht starten wollen, liegt es entweder an einem Tippfehler oder an einer falsch formatierten IPv6-Adresse (::/0 oder 0::/0 je nach Plugin...) oder daran, dass olsrd seine Plugins nicht finden kann oder die falsche Version findet, wenn Du ein Update mit selbstkompiliertem OLSR gemacht haben solltest. Aufmerksam lesen und eventuell die LoadPlugin-Zeilen mit absoluten Pfaden zu der jeweiligen ".so" setzen, hilft.

Es ist auch möglich die plugin sektion ganz wegzulassen, damit eliminiert man evtl ein weiteres Problem. diese können ja schrittweise bei funktionierender config nachträglich wieder eingefügt werden.

Ein letzter Hinweis: OLSR wird noch nicht automatisch gestartet. Du kannst das in /etc/network/interfaces bei der Bridge br-ff mittels „up /etc/init.d/olsrd restart“ und „up /etc/init.d/olsrd6 restart“ tun, oder, Du legst die zwei Befehle in das OpenVPN-UP/DOWN-Skript. AutodetecChanges in OLSR sollte eigentlich dafür sorgen, dass der Bridge-Port immer erkannt wird, ohne, dass man den Dienst erneut starten muss.

Das war's. Dual-Stack OLSRv1 mit Tunnel läuft, sowie Du es gestartet hast.