Warning: Es gibt keine Funktionsgarantie. Alles auf eigene Gefahr!

Ziel des ganzen ist eine Verbindung zu schaffen, welche es uns ermoeglicht an beliebiger Stelle im WWW, mit beliebigem Endgeraet in das Zielnetzwerk zu kommen.

Festlegung

  • JL-Server
  • ein Host mit öffentlicher IP
  • JL-Master
  • sitzt im Ziel-Netzwerk
  • benötigt nur ein Ethernet -Interface
  • JL-client
  • sitzt in einem beliebigem Netzwerk AUßer im Ziel-Netzwerk
  • benötigt 2 Ethernet -Interfaces
    • iface 1: Zugang zum WWW
    • iface 2: Tunnelt angeschlossene Geraete in Ziel-Netzwerk

JL-Server

apt install openvpn 	#OpenVPN installieren
cat << EOF > /etc/openvpn/server/jl-server.conf
port 1194
proto udp
dev tap

ca /etc/openvpn/server/jl-ca.crt
cert /etc/openvpn/server/jl-server.crt
key /etc/openvpn/server/jl-server.key
dh /etc/openvpn/server/jl-dh2048.pem
tls-auth jl-ta.key 0
client-to-client
topology subnet

cipher AES-256-CBC
keepalive 10 60

server-bridge 192.168.200.109 255.255.255.0 192.168.200.110 192.168.200.120
;ifconfig 192.168.200.109 255.255.255.0
EOF
systemctl enable openvpn-server@jl-server

Auf die Keys & Certs erstellung gehe ich hier nicht weiter ein und verweiße nur auf:
[https://wiki.ubuntuusers.de/OpenVPN/#Schluessel-und-Zertifikate-generieren]

JL-*

  • Auf allen VPN-Teilnehmern hinterlegen, außer dem OpenVPN-Server!!!
apt install openvpn bridge-utils	#OpenVPN installieren
  • Zertifikate & Skripte in /etc/openvpn/client/ hinterlegen

    • erst danach! chmod +x /etc/openvpn/client/jl-{master,client}-{up,down}.sh

JL-Master

# /etc/network/interface
 ##die naechsten 2 Zeilen auskommentieren
#allow-hotplug ens18
#iface ens18 inet dhcp

# folgende hinzufuegen
auto br0
iface br0 inet dhcp
	bridge_ports ens18
  up ip link set dev ens18 promisc on
cat << EOF > /etc/openvpn/client/jl-master.conf
client
dev tap0
proto udp
remote vpn.example.org 1194

resolv-retry infinite
nobind

;user nobody
;group nogroup

persist-key
persist-tun

ca jl-ca.crt
cert jl-master.crt
key jl-master.key

remote-cert-tls server
tls-auth jl-ta.key 1
cipher AES-256-CBC

#comp-lzo
verb 3
;mute 20
script-security 2
up jl-master-up.sh
down jl-master-down.sh
EOF

cat << EOF > /etc/openvpn/client/jl-master-up.sh
#!/bin/bash
br="br0"
tap="\$dev"

ip addr flush dev \$tap
brctl addif \$br \$tap
ip addr add \$ifconfig_local/\$ifconfig_netmask broadcast \$ifconfig_broadcast dev \$br
ip link set dev \$tap promisc on
EOF

cat << EOF > /etc/openvpn/client/jl-master-down.sh
#!/bin/bash
br="br0"
tap=\$dev

ip addr del \$ifconfig_local/\$ifconfig_netmask broadcast \$ifconfig_broadcast dev \$br
brctl delif \$br \$tap
EOF
systemctl enable openvpn-client@jl-master

JL-Client

systemctl enable openvpn-client@jl-client
cat << EOF > /etc/openvpn/client/jl-client.conf
client
dev tap0
proto udp
remote vpn.example.org 1194

resolv-retry infinite
nobind

;user nobody
;group nogroup

persist-key
persist-tun

ca jl-ca.crt
cert jl-client.crt
key jl-client.key

remote-cert-tls server
tls-auth jl-ta.key 1
cipher AES-256-CBC

#comp-lzo
verb 3
;mute 20
script-security 2
up jl-client-up.sh
down jl-client-down.sh
EOF

cat << EOF > /etc/openvpn/client/jl-client-up.sh
#!/bin/bash
br="br0"
tap=\$dev
eth="eth1"

# Bridge erstellen, Interfaces hinzufuegen
brctl addbr \$br
brctl addif \$br \$eth
brctl addif \$br \$tap

# Promics-Mode fuer Bridge-Interfaces
ip link set dev \$tap promisc on
ip link set dev \$eth promisc on
ip link set up dev \$br
ip link set up dev \$eth

# Ip setzen
ip addr flush dev \$tap
ip addr add \$ifconfig_local/\$ifconfig_netmask broadcast \$ifconfig_broadcast dev \$br
EOF

cat << EOF > /etc/openvpn/client/jl-client-down.sh
#!/bin/bash
br="br0"
tap="tap0"
eth="eth1"

# Bridge IP loeschen
ip link set down dev \$br
# Bridge loeschen
brctl delbr \$br
EOF
systemctl enable openvpn-client@jl-client.service

https://openvpn.net/community-resources/ethernet-bridging/