WireGuard-Tunnel zu FunkFeuer: Unterschied zwischen den Versionen

Aus FunkFeuer Wiki
Zur Navigation springen Zur Suche springen
K (Es ist doch schon 2021 :-))
(21 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
|name=WireGuard Tunnel für Nodes
|name=WireGuard Tunnel für Nodes
|startdate=2021/01/05
|startdate=2021/01/05
|state=Planung/Ideenfindung
|state=Testing
|desc=
|desc=
}}
}}
= TODO: WireGuard Tunnel zu Funkfeuer =
= TODO: WireGuard-Tunnel zu FunkFeuer =


falls du Interesse hast diese Idee zu einem Projekt und hoffentlich zu einem lauffähigen Produkt für die 0xFF Gemeinschaft zu machen mach mit und teile deine Ideen und Vorstellungen.
Falls du Interesse hast, diese Idee zu einem Projekt und hoffentlich zu einem lauffähigen Produkt für die 0xFF-Gemeinschaft zu machen, mach mit und teile deine Ideen und Vorstellungen.


--> #0xFF-WireGuardTunnel:matrix.org
--> https://matrix.to/#/%230xFF-WireGuardTunnel%3Amatrix.org // #0xFF-WireGuardTunnel:matrix.org


== Ziel ==
== Ziel ==


* Es soll möglich sein über WireGuard die Funktionalität des jetztigen OpenVPN Zugangs abzubilden
* Es soll möglich sein, über WireGuard die Funktionalität des jetzigen OpenVPN-Zugangs abzubilden.
* Es soll eine möglichst vollautomatische Konfig über das Frontend machbar sein.
* Es soll eine möglichst vollautomatische Konfig über das Frontend machbar sein.
* Es soll IPv4 und IPv6 möglich sein.
* Es soll IPv4 und IPv6 möglich sein.
Zeile 20: Zeile 20:
== Vorteile ==
== Vorteile ==


* Verschlüsselung des Tunnels bei niedriger CPU Last
* Verschlüsselung des Tunnels bei niedriger CPU-Last
* Tunnel ist Stateless
* Tunnel ist stateless
* Software deutlich kleiner als OpenVPN
* Software deutlich kleiner als OpenVPN
* Konfig sehr einfach
* Konfig sehr einfach
* NAT Traversal, NO Client PortForwarding
=== MeshMesh ===
* Knoten könnten auch via Web sich vermeshen --> Redundanz


== Nachteile ==
== Nachteile ==


* für OLSRv1 muss eine Layer2 Tunneltechnik durch den Tunnel gebaut werden da WireGuard nur Layer3 macht
* für OLSRv1 muss eine Layer2-Tunneltechnik durch den Tunnel gebaut werden, da WireGuard nur Layer3 macht
 
== Link-Sammlung ==
 
* EdgeRouter WireGuard - https://github.com/WireGuard/wireguard-vyatta-ubnt
* MTU Calc - https://baturin.org/tools/encapcalc/
* OLSR Debian - https://repos.freiesnetz.at/
 
= Variante 1 - WG mit VXLAN =
 
== Info ==
Remote Node kann via Wireguard verbinden und via SiteLocal ipv6 fd00 Adresse ein VXLAN aufbauen, dieses steckt in der bridge auf der OLSR läuft.
 
(SiteLocal könnte mit echter 0xFF IPv6 ersetzt werden, mir fällt jedoch kein Nutzen ein - atadxart)
 
* Wireguard Verbindung Node Public Key --> im Frontend hinterlegbar.
* SiteLocal IPv6 lässt sich zb aus NODE ID und Device ID aus dem Frontend errechnen.
* Wireguard ist zur Laufzeit konfigurierbar ohne laufende Tunnel zu stören.
* VXLAN ebenfalls zur Laufzeit konfigurierbar.
* IPv4 Sparsamkeit da nur eine IPv4 für alle Remote Nodes nötig
* Der IPv?/UDP-Wireguard/IPv6-VXLAN/IPv4 Stack ist recht dick doch da Wireguard multithread fähig ist darf mehr Durchsatz erwartet werden.
(ggü OpenVPN)
* Security - Daten Verschlüsselung, und durch Public/Private Key ist auch eine Authentifizierung gegenseitig gegeben.
 
--> Automatisierung somit vollständig möglich ohne Admin Eingriff am Tunnel-Server
 
=== TODO ===
 
Getestet ist es noch nicht, grundsätzlich müsste ein redundantes Tunnelserver Setup machbar sein.
 
atadxart - (werde ich noch nachliefern)
 
=== Netzaufbau ===
<pre>
 
 
      #------------<Tunnelserver> ----------OLSR---------- <Node1>
[WG/VXLAN/OLSR]        |                                    |
      |            [WG/VXLAN/OLSR]                            |
  [Mikrotik]            |                                    |
                      <Remote Node> -----------OLSR----------#
</pre>
 
=== MTU ===
Ausgehend von 1500 nutzbarer MTU
 
(PPPoE da leider oft bei den DSL Verbindungen nötig)
 
https://baturin.org/tools/encapcalc/?protocols=PPPoE,IPv4,WireGuard,IPv6,VXLAN,Ethernet
 
20 bytes bleiben da über aber es könnte ja IPv6 native vorm Wireguard sein dann kommt es auf
 
https://baturin.org/tools/encapcalc/?protocols=PPPoE,IPv6,WireGuard,IPv6,VXLAN,Ethernet
 
somit max MTU 1342
 
== Tunnelserver ==
 
* Debian 11
* OLSR von https://repos.freiesnetz.at/
* wireguard
* ifupdown2
 
=== /etc/network/interfaces ===
<pre>
auto lo
iface lo inet loopback
 
#VIRTUAL Wireless link to Node 1
# OLSR interface
 
auto enp1s0
iface enp1s0
  address 10.1.0.1/32
 
#INTERNET
 
auto enp2s0
iface enp2s0 inet dhcp
 
#Bridge für VXLANS
#OLSR Interface
 
auto br0
iface br0
  pre-up /usr/bin/ip link add br0 type bridge
  address 10.1.1.1/32
  post-up /usr/bin/ip link set br0 mtu 1342
 
#WIREGUARD
#für alle Clients
 
auto wg-olsr
iface wg-olsr
  pre-up /usr/bin/ip link add wg-olsr type wireguard
  pre-up /usr/bin/wg setconf wg-olsr /etc/wireguard/wg-olsr.conf
 
  post-up /usr/bin/ip link set wg-olsr mtu 1420
 
#dieser part muss für jeden remote client ausgeführt werden
#Remote Node Config
  post-up /usr/bin/ip addr add fd00:00ff:0001:abba::1/64 dev wg-olsr
  post-up /usr/bin/ip link add vxlan1 type vxlan id 1 remote fd00:00ff:0001:abba::2 dstport 4789 dev wg-olsr
  post-up /usr/bin/ip link set vxlan1 up
  post-up /usr/bin/ip link set vxlan1 mtu 1342
  post-up /usr/bin/ip link set vxlan1 master br0
 
</pre>
 
=== /etc/olsrd/olsrd.conf ===
 
Hier nur die zusätzlichen Settings
<pre>
Interface "enp1s0"
{
      AutoDetectChanges      yes
      LinkQualityMult        default 1.0
      Weight                  0
}
 
Interface "br0"
{
      AutoDetectChanges      yes
      LinkQualityMult        default 1.0
      Weight                  0
}
</pre>
 
=== /etc/wireguard/wg-olsr.conf ===
<pre>
[Interface]
ListenPort = 51820
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXX
 
##Remote Node
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = fc00:ff:1:abba::2
PersistentKeepalive = 25
</pre>
 
== Remote Node ==
 
* Debian 11
* OLSR von https://repos.freiesnetz.at/
* wireguard
* ifupdown2
 
=== /etc/network/interfaces ===
<pre>
auto enp1s0
iface enp1s0 inet dhcp
 
auto enp7s0
iface enp7s0
  address 10.3.0.1/32
 
auto br0
iface br0
  pre-up /usr/bin/ip link add br0 type bridge
  address 10.3.1.1/32
  post-up /usr/bin/ip link set br0 mtu 1342
 
auto wg-olsr
iface wg-olsr
  pre-up /usr/bin/ip link add wg-olsr type wireguard
  pre-up /usr/bin/wg setconf wg-olsr /etc/wireguard/wg-olsr.conf
  address fd00:00ff:0001:abba::2/64
  post-up /usr/bin/ip link set wg-olsr mtu 1420
  post-up /usr/bin/ip link add vxlan1 type vxlan id 1 remote fd00:00ff:0001:abba::1 dstport 4789 dev wg-olsr
  post-up /usr/bin/ip link set vxlan1 up
  post-up /usr/bin/ip link set vxlan1 mtu 1342
  post-up /usr/bin/ip link set vxlan1 master br0
</pre>
 
=== /etc/olsrd/olsrd.conf ===
<pre>
Interface "enp7s0"
{
AutoDetectChanges yes
LinkQualityMulti default 1.0
Weight 0
}
 
Interface "br0"
{
AutoDetectChanges yes
LinkQualityMulti default 1.0
Weight 0
}
</pre>
 
=== /etc/wireguard/wg-olsr.conf ===
<pre>
[Interface]
ListenPort = 51820
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
#tunnel server
[Peer]
Endpoint = tunnelserver:51820
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = fd00:ff:1:abba::1
PersistentKeepalive = 25
</pre>
 
== Mikrotik ==
WireGuard und VXLAN laufen --> Docker OLSR
 
Was geht nicht:
* IPv6 VXLAN, Mikrotik support fehlt, Workaround ZeroConf Ipv4
 
<pre>
# RouterOS 7.1.1
# model = RB960PGS
 
/interface wireguard
add listen-port=13231 mtu=1420 name=wg-olsr
/interface vxlan
add mtu=1342 name=vxlan-olsr port=4789 vni=2
/interface vxlan vteps
add interface=vxlan-olsr remote-ip=169.254.0.1
/interface wireguard peers
add allowed-address=169.254.0.1/32 endpoint-address=\
    TUNNELIP endpoint-port=51820 interface=wg-olsr persistent-keepalive=\
    25s public-key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX="
/ip address
add address=169.254.2.1/16 interface=wg-olsr network=169.254.0.0
/ip dhcp-client
add interface=sfp1
</pre>

Version vom 9. Februar 2022, 17:56 Uhr

WireGuard Tunnel für Nodes
Starttermin

05 Jan. 21

Status

Testing

Projekt


TODO: WireGuard-Tunnel zu FunkFeuer

Falls du Interesse hast, diese Idee zu einem Projekt und hoffentlich zu einem lauffähigen Produkt für die 0xFF-Gemeinschaft zu machen, mach mit und teile deine Ideen und Vorstellungen.

--> https://matrix.to/#/%230xFF-WireGuardTunnel%3Amatrix.org // #0xFF-WireGuardTunnel:matrix.org

Ziel

  • Es soll möglich sein, über WireGuard die Funktionalität des jetzigen OpenVPN-Zugangs abzubilden.
  • Es soll eine möglichst vollautomatische Konfig über das Frontend machbar sein.
  • Es soll IPv4 und IPv6 möglich sein.
  • ...

Vorteile

  • Verschlüsselung des Tunnels bei niedriger CPU-Last
  • Tunnel ist stateless
  • Software deutlich kleiner als OpenVPN
  • Konfig sehr einfach
  • NAT Traversal, NO Client PortForwarding

MeshMesh

  • Knoten könnten auch via Web sich vermeshen --> Redundanz

Nachteile

  • für OLSRv1 muss eine Layer2-Tunneltechnik durch den Tunnel gebaut werden, da WireGuard nur Layer3 macht

Link-Sammlung

Variante 1 - WG mit VXLAN

Info

Remote Node kann via Wireguard verbinden und via SiteLocal ipv6 fd00 Adresse ein VXLAN aufbauen, dieses steckt in der bridge auf der OLSR läuft.

(SiteLocal könnte mit echter 0xFF IPv6 ersetzt werden, mir fällt jedoch kein Nutzen ein - atadxart)

  • Wireguard Verbindung Node Public Key --> im Frontend hinterlegbar.
  • SiteLocal IPv6 lässt sich zb aus NODE ID und Device ID aus dem Frontend errechnen.
  • Wireguard ist zur Laufzeit konfigurierbar ohne laufende Tunnel zu stören.
  • VXLAN ebenfalls zur Laufzeit konfigurierbar.
  • IPv4 Sparsamkeit da nur eine IPv4 für alle Remote Nodes nötig
  • Der IPv?/UDP-Wireguard/IPv6-VXLAN/IPv4 Stack ist recht dick doch da Wireguard multithread fähig ist darf mehr Durchsatz erwartet werden.

(ggü OpenVPN)

  • Security - Daten Verschlüsselung, und durch Public/Private Key ist auch eine Authentifizierung gegenseitig gegeben.

--> Automatisierung somit vollständig möglich ohne Admin Eingriff am Tunnel-Server

TODO

Getestet ist es noch nicht, grundsätzlich müsste ein redundantes Tunnelserver Setup machbar sein.

atadxart - (werde ich noch nachliefern)

Netzaufbau



      #------------<Tunnelserver> ----------OLSR---------- <Node1>
 [WG/VXLAN/OLSR]         |                                    |
      |             [WG/VXLAN/OLSR]                            |
  [Mikrotik]             |                                    |
                       <Remote Node> -----------OLSR----------#

MTU

Ausgehend von 1500 nutzbarer MTU

(PPPoE da leider oft bei den DSL Verbindungen nötig)

https://baturin.org/tools/encapcalc/?protocols=PPPoE,IPv4,WireGuard,IPv6,VXLAN,Ethernet

20 bytes bleiben da über aber es könnte ja IPv6 native vorm Wireguard sein dann kommt es auf

https://baturin.org/tools/encapcalc/?protocols=PPPoE,IPv6,WireGuard,IPv6,VXLAN,Ethernet

somit max MTU 1342

Tunnelserver

/etc/network/interfaces

auto lo
iface lo inet loopback

#VIRTUAL Wireless link to Node 1
# OLSR interface

auto enp1s0
iface enp1s0
  address 10.1.0.1/32

#INTERNET

auto enp2s0
iface enp2s0 inet dhcp

#Bridge für VXLANS
#OLSR Interface

auto br0
iface br0
  pre-up /usr/bin/ip link add br0 type bridge
  address 10.1.1.1/32
  post-up /usr/bin/ip link set br0 mtu 1342

#WIREGUARD
#für alle Clients

auto wg-olsr
iface wg-olsr
  pre-up /usr/bin/ip link add wg-olsr type wireguard 
  pre-up /usr/bin/wg setconf wg-olsr /etc/wireguard/wg-olsr.conf
  
  post-up /usr/bin/ip link set wg-olsr mtu 1420

#dieser part muss für jeden remote client ausgeführt werden
#Remote Node Config
  post-up /usr/bin/ip addr add fd00:00ff:0001:abba::1/64 dev wg-olsr
  post-up /usr/bin/ip link add vxlan1 type vxlan id 1 remote fd00:00ff:0001:abba::2 dstport 4789 dev wg-olsr
  post-up /usr/bin/ip link set vxlan1 up
  post-up /usr/bin/ip link set vxlan1 mtu 1342
  post-up /usr/bin/ip link set vxlan1 master br0

/etc/olsrd/olsrd.conf

Hier nur die zusätzlichen Settings

Interface "enp1s0"
{
       AutoDetectChanges       yes
       LinkQualityMult         default 1.0
       Weight                  0
}

Interface "br0"
{
       AutoDetectChanges       yes
       LinkQualityMult         default 1.0
       Weight                  0
}

/etc/wireguard/wg-olsr.conf

[Interface]
ListenPort = 51820
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXX

##Remote Node
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = fc00:ff:1:abba::2
PersistentKeepalive = 25

Remote Node

/etc/network/interfaces

auto enp1s0
iface enp1s0 inet dhcp

auto enp7s0
iface enp7s0
  address 10.3.0.1/32 

auto br0
iface br0
  pre-up /usr/bin/ip link add br0 type bridge
  address 10.3.1.1/32
  post-up /usr/bin/ip link set br0 mtu 1342

auto wg-olsr
iface wg-olsr
  pre-up /usr/bin/ip link add wg-olsr type wireguard 
  pre-up /usr/bin/wg setconf wg-olsr /etc/wireguard/wg-olsr.conf
  address fd00:00ff:0001:abba::2/64
  post-up /usr/bin/ip link set wg-olsr mtu 1420
  post-up /usr/bin/ip link add vxlan1 type vxlan id 1 remote fd00:00ff:0001:abba::1 dstport 4789 dev wg-olsr
  post-up /usr/bin/ip link set vxlan1 up
  post-up /usr/bin/ip link set vxlan1 mtu 1342
  post-up /usr/bin/ip link set vxlan1 master br0

/etc/olsrd/olsrd.conf

Interface "enp7s0"
{
	AutoDetectChanges	yes
	LinkQualityMulti	default 1.0
	Weight			0
}

Interface "br0"
{
	AutoDetectChanges	yes
	LinkQualityMulti	default 1.0
	Weight			0
}

/etc/wireguard/wg-olsr.conf

[Interface]
ListenPort = 51820
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

#tunnel server
[Peer]
Endpoint = tunnelserver:51820
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = fd00:ff:1:abba::1
PersistentKeepalive = 25

Mikrotik

WireGuard und VXLAN laufen --> Docker OLSR

Was geht nicht:

  • IPv6 VXLAN, Mikrotik support fehlt, Workaround ZeroConf Ipv4
# RouterOS 7.1.1
# model = RB960PGS

/interface wireguard
add listen-port=13231 mtu=1420 name=wg-olsr
/interface vxlan
add mtu=1342 name=vxlan-olsr port=4789 vni=2
/interface vxlan vteps
add interface=vxlan-olsr remote-ip=169.254.0.1
/interface wireguard peers
add allowed-address=169.254.0.1/32 endpoint-address=\
    TUNNELIP endpoint-port=51820 interface=wg-olsr persistent-keepalive=\
    25s public-key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX="
/ip address
add address=169.254.2.1/16 interface=wg-olsr network=169.254.0.0
/ip dhcp-client
add interface=sfp1