Openvpn Site2Site
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
- erst danach!
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