Perekhod s OpenVPN op WireGuard Netzwierker an een L2-Netzwierk ze kombinéieren

Perekhod s OpenVPN op WireGuard Netzwierker an een L2-Netzwierk ze kombinéieren

Ech wéilt meng Erfahrung deelen fir Netzwierker an dräi geographesch Remote Appartementer ze kombinéieren, déi all Router mat OpenWRT als Paart benotzt, an ee gemeinsamt Netzwierk. Wann Dir eng Method auswielt fir Netzwierker tëscht L3 mat Subnet Routing an L2 mat Bridging ze kombinéieren, wann all Netzwierkknäppchen am selwechte Subnet wäerte sinn, gouf Präferenz fir déi zweet Method, déi méi schwéier ass ze konfiguréieren, awer méi grouss Méiglechkeeten ubitt, well de transparent Notzung vun Technologien war geplangt am Netz geschaf Wake-on-Lan an DLNA.

Deel 1: Hannergrond

De Protokoll, deen fir d'Ëmsetzung vun dëser Aufgab gewielt gouf, war ufanks OpenVPN, well, éischtens, et kann en Ofhuelungsapparat erstellen, deen ouni Problemer un d'Bréck bäigefüügt ka ginn, an zweetens, OpenVPN Et ënnerstëtzt TCP, wat och wichteg war, well keng vun den Appartementer eng dedizéiert IP-Adress hat. Ech konnt STUN net benotzen, well mäin Internetanbieter aus iergendengem Grond déi ukommend UDP-Verbindungen aus senge Netzwierker blockéiert. TCP huet et mir erlaabt, de VPN-Serverport iwwer SSH un de gemieteten VPS weiderzeleeden. Obwuel dës Approche e wesentlechen Overhead erstellt, well d'Donnéeën duebel verschlësselt sinn, wollt ech de VPS net a mäi privat Netzwierk integréieren, well et de Risiko bestoung, datt Drëttpersounen d'Kontroll driwwer kréien. Dofir war et héich ongewollt, sou en Apparat a mengem Heemnetz ze hunn, dofir hunn ech decidéiert, e wesentlechen Overhead fir d'Sécherheet ze bezuelen.

Fir de Port um Router weiderzeleeden, wou de Server geplangt war, ze installéiere sinn, hunn ech de Programm sshtunnel benotzt. Ech ginn net an d'Detailer vun senger Konfiguratioun an - et ass zimmlech einfach. Ech wäert just feststellen, datt säin Zweck war, den TCP-Port 1194 vum Router op de VPS weiderzeleeden. Duerno hunn ech de Server konfiguréiert. OpenVPN Um tap0-Apparat, deen un d'br-lan Bréck ugeschloss war. Nodeems ech d'Verbindung mam nei erstallte Server vu mengem Laptop getest hat, war et kloer, datt d'Iddi vum Port Forwarding funktionéiert hat, a mäi Laptop war Member vum Netzwierk vum Router ginn, och wann en net kierperlech en Deel dovun war.

Déi eenzeg Saach, déi nach ze maachen war, war d'IP-Adressen an de verschiddenen Appartementer ze verdeelen, sou datt se net a Konflikt trieden, an d'Routeren esou ze konfiguréieren. OpenVPN-Clienten.
Déi folgend Router IP Adressen an DHCP Server Range goufen ausgewielt:

  • 192.168.10.1 mat Gamme 192.168.10.2 - 192.168.10.80 fir de Server
  • 192.168.10.100 mat Gamme 192.168.10.101 - 192.168.10.149 fir de Router am Appartement Nr 2
  • 192.168.10.150 mat Gamme 192.168.10.151 - 192.168.10.199 fir de Router am Appartement Nr 3

Et war och néideg, dës Adressen de Client-Router zouzeweisen. OpenVPN-server, andeems déi folgend Zeil an seng Konfiguratioun bäigefüügt gëtt:

ifconfig-pool-persist /etc/openvpn/ipp.txt 0

a füügt déi folgend Zeilen an d' /etc/openvpn/ipp.txt Datei bäi:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

wou flat1_id an flat2_id d'Gerätennimm sinn, déi beim Erstelle vu Zertifikater fir d'Verbindung mat OpenVPN

Duerno goufen d'Router konfiguréiert OpenVPN- Clienten, tap0-Geräter op béide goufen op d'br-lan Bréck bäigefüügt. Zu dësem Zäitpunkt schéngt alles an der Rei ze sinn, well all dräi Netzwierker sech géigesäiteg gesinn a wéi eng Eenheet funktionéiere konnten. Allerdéngs ass en zimlech onangenehmen Detail opgedaucht: Heiansdo kruten d'Geräter eng IP-Adress vum falschen Router, mat all de Konsequenzen déi domat verbonne waren. Aus iergendengem Grond huet de Router an enger vun den Appartementer net rechtzäiteg op DHCPDISCOVER geäntwert, an den Apparat krut déi falsch Adress. Ech hunn erkannt, datt ech sou Ufroen an tap0 op all Router filtere muss, awer wéi sech erausgestallt huet, kënnen iptables net mat engem Apparat funktionéieren, wann en Deel vun enger Bréck ass, dofir musst ech ebtables benotzen. Leider huet meng Firmware dat net abegraff, dofir musst ech d'Image fir all Apparat nei opbauen. Nodeems ech dat gemaach an déi folgend Zeilen an /etc/rc.local op all Router bäigefüügt hat, war de Problem geléist:

ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

Dës Konfiguratioun huet dräi Joer gedauert.

Deel 2: Kennenléieren WireGuard

An der leschter Zäit gëtt am Internet ëmmer méi doriwwer geschwat, WireGuard..., a bewonnert seng einfach Konfiguratioun, héich Transfergeschwindegkeet, niddreg Ping a vergläichbar Sécherheet. Eng Sich no zousätzlechen Informatiounen doriwwer huet opgedeckt, datt et weder Bridge Member nach TCP Protokoll ënnerstëtzt, wat mech dozou bruecht huet ze gleewen, datt et keng Alternativ gëtt. OpenVPN fir mech ass et nach ëmmer net do. Also hunn ech et verréckelt, et kennenzeléieren WireGuard.

Virun e puer Deeg hunn sech Neiegkeeten iwwer Ressourcen am Zesummenhang mat IT op déi eng oder aner Manéier verbreet, datt WireGuard gëtt endlech am Kernel integréiert Linux, ugefaange mat der Versioun 5.6. Newsartikelen, wéi ëmmer, goufen gelueft. WireGuardEch hunn mech nach eng Kéier drop agesat, no Weeër ze sichen, fir dat Gutt Ales z'ersetzen OpenVPNDës Kéier sinn ech erwëscht dësen Artikel. Et geschwat iwwer d'Schafe vun engem Ethernet Tunnel iwwer L3 mat GRE. Dësen Artikel huet mir Hoffnung ginn. Et blouf onkloer wat mam UDP Protokoll maache soll. D'Sich huet mech zu Artikelen gefouert iwwer d'Benotzung vu Socat a Verbindung mat engem SSH-Tunnel fir en UDP-Port weiderzebréngen, awer se bemierken datt dës Approche nëmmen am eenzege Verbindungsmodus funktionnéiert, dat heescht, d'Aarbecht vu verschiddene VPN Clienten wier onméiglech. Ech sinn op d'Iddi komm fir e VPN Server op engem VPS z'installéieren an GRE fir Clienten opzestellen, awer wéi et sech erausstellt, ënnerstëtzt GRE keng Verschlësselung, wat zu der Tatsaach féiert datt wann Drëtt Parteien Zougang zum Server kréien , all Traffic tëscht mengen Netzwierker wäert an hiren Hänn sinn, wat mir guer net gepasst huet.

Nach eng Kéier gouf d'Entscheedung zugonschte vun der redundante Verschlësselung gemaach, andeems Dir VPN iwwer VPN benotzt mam folgende Schema:

Niveau XNUMX VPN:
VPS et ass Server mat intern Adress 192.168.30.1
MS et ass Client VPS mat intern Adress 192.168.30.2
MK2 et ass Client VPS mat intern Adress 192.168.30.3
MK3 et ass Client VPS mat intern Adress 192.168.30.4

Zweeten Niveau VPN:
MS et ass Server mat externer Adress 192.168.30.2 an intern 192.168.31.1
MK2 et ass Client MS mat der Adress 192.168.30.2 an huet eng intern IP 192.168.31.2
MK3 et ass Client MS mat der Adress 192.168.30.2 an huet eng intern IP 192.168.31.3

* MS - Router-Server am Appartement 1, MK2 - Router am Appartement 2, MK3 - Router am Appartement 3
* Apparat Konfiguratiounen sinn am Spoiler um Enn vum Artikel publizéiert.

An dofir laafen Pings tëscht Netzwierkknoten 192.168.31.0/24, et ass Zäit fir e GRE-Tunnel opzestellen. Virun dësem, fir den Zougang zu Router net ze verléieren, ass et derwäert SSH-Tunnel opzestellen fir den Hafen 22 op de VPS weiderzebréngen, sou datt zum Beispill de Router aus Appartement 10022 um Hafen 2 vum VPS zougänglech ass, an de Router aus Appartement 11122 wäert zougänglech sinn op port 3 Router vun Appartement XNUMX. Et ass am beschten d'Forwarding mat der selwechter sshtunnel ze konfiguréieren, well et den Tunnel restauréiert wann et klappt.

Den Tunnel ass konfiguréiert, Dir kënnt mat SSH iwwer de Forward Port verbannen:

ssh root@МОЙ_VPS -p 10022

Als nächst sollt Dir deaktivéieren OpenVPN:

/etc/init.d/openvpn stop

Loosst eis elo e GRE Tunnel um Router aus Appartement 2 opbauen:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up

A füügt déi erstallt Interface op d'Bréck:

brctl addif br-lan grelan0

Loosst eis eng ähnlech Prozedur um Server Router ausféieren:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up

A füügt och déi erstallt Interface op d'Bréck:

brctl addif br-lan grelan0

ab dësem Moment, Pings fänken erfollegräich an déi nei Reseau ze goen an ech, mat Zefriddenheet, goen Kaffi drénken. Dann, fir ze evaluéieren wéi d'Netzwierk um aneren Enn vun der Linn funktionnéiert, probéieren ech SSH an ee vun de Computeren an der Appartement 2, awer de ssh Client freet ouni e Passwuert ze froen. Ech probéieren mat dësem Computer iwwer Telnet um Hafen 22 ze verbannen an ech gesinn eng Linn aus där ech verstinn datt d'Verbindung etabléiert gëtt, den SSH Server reagéiert, awer aus iergendengem Grond freet et mech just net ze loggen an.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

Ech versichen et via VNC ze konnektéieren a gesinn eng schwaarz Écran. Ech iwwerzeegen mech, datt de Problem mam Remote Computer ass, well ech einfach mat der Router vun dëser Wunneng mat der intern Adress Verbindung kann. Wéi och ëmmer, ech entscheeden fir mam SSH vun dësem Computer duerch de Router ze verbannen an sinn iwwerrascht ze fannen datt d'Verbindung erfollegräich ass, an de Ferncomputer funktionnéiert ganz normal, awer et kann och net mat mengem Computer verbannen.

Ech huelen den grelan0 Apparat aus der Bréck eraus a starten en. OpenVPN Um Router an der Appartement 2 hunn ech bestätegt, datt den Netzwierk erëm richteg funktionéiert huet an d'Verbindungen net ënnerbrach goufen. Beim Sich sinn ech op Foren gestouss, wou d'Leit sech iwwer déiselwecht Problemer beschwéiert hunn, a wou hinne geroden gouf, d'MTU ze erhéijen. Net sou séier wéi gemaach. Bis d'MTU awer héich genuch agestallt war - 7000 fir Gretap-Geräter - hunn ech entweder ënnerbrach TCP-Verbindungen oder niddreg Transfergeschwindegkeeten erlieft. Wéinst der héijer MTU fir Gretap, d'MTU fir Verbindungen WireGuard Den éischten an den zweeten Niveau goufen op 8000 respektiv 7500 festgeluecht.

Ech hunn en ähnleche Setup um Router vum Appartement 3 duerchgefouert, mam eenzegen Ënnerscheed ass datt eng zweet Gretap-Interface mam Numm grelan1 op de Serverrouter bäigefüügt gouf, deen och op d'br-lan Bréck bäigefüügt gouf.

Alles funktionnéiert. Elo kënnt Dir d'gretap Versammlung an d'Start setzen. Dofir:

Ech hunn dës Linnen an /etc/rc.local um Router am Appartement 2 gesat:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

Dëst op /etc/rc.local um Router am Appartement 3 bäigefüügt:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

An um Server Router:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

ip link add grelan1 type gretap remote 192.168.31.3 local 192.168.31.1
ip link set dev grelan1 mtu 7000
ip link set grelan1 up
brctl addif br-lan grelan1

Nodeems ech d'Client-Routeren nei gestart hat, hunn ech festgestallt, datt se aus iergendengem Grond keng Verbindung mam Server haten. Nodeems ech mech mat hirem SSH verbonnen hat (glécklecherweis hat ech virdru schonn sshtunnel dofir konfiguréiert), hunn ech festgestallt, datt WireGuard Aus iergendengem Grond erstellt et eng Route fir den Endpunkt, awer si ass falsch. Zum Beispill, fir 192.168.30.2 huet d'Route-Tabell eng Route iwwer d'pppoe-wan Interface spezifizéiert, also iwwer den Internet, obwuel d'Route dohi iwwer d'wg0 Interface hätt solle goen. Nodeems dës Route geläscht gouf, gouf d'Verbindung restauréiert. Kann ech iergendwou Instruktioune fannen, wéi ech eng forcéiert Verbindung opsetzen kann? WireGuard Ech konnt et net vermeiden, dës Strecken ze kreéieren. Ausserdeem hunn ech net emol verstanen, ob dëst eng Funktioun vun OpenWRT oder vun der ... war. WireGuardOuni vill Zäit ze verbréngen fir de Problem erauszefannen, hunn ech einfach eng Zeil an den Timer-baséierte Skript op béide Routeren bäigefüügt, déi dës Route geläscht hunn:

route del 192.168.30.2

Ze summéieren

Komplett Ofleenung OpenVPN Ech hunn dat nach net erreecht, well ech mech heiansdo vun engem Laptop oder Telefon un en neit Netzwierk verbannen muss, an et ass normalerweis onméiglech, en Gretap-Apparat drop anzestellen. Trotzdeem hunn ech awer e Virdeel bei der Dateniwwerdroungsgeschwindegkeet tëscht Appartementer gewonnen, an d'Benotzung vu VNC ass zum Beispill elo ouni Problemer. De Ping ass liicht erofgaang, awer méi stabil ginn:

Wann Dir benotzt OpenVPN:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=133 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=125 ms

--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19006ms
rtt min/avg/max/mdev = 124.722/126.152/136.907/3.065 ms

Wann Dir benotzt WireGuard:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=124 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=124 ms
--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19003ms
rtt min/avg/max/mdev = 123.954/124.423/126.708/0.675 ms

Et ass méi beaflosst vum héije Ping op de VPS, wat ongeféier 61.5 ms ass

D'Geschwindegkeet ass awer däitlech eropgaang. Also, an der Wunneng mam Router-Server hunn ech eng Internetverbindungsgeschwindegkeet vun 30 Mbps, an an den aneren Appartementer sinn et 5 Mbps. Ausserdeem, wärend der Benotzung OpenVPN Ech konnt laut den iperf-Miessungen keng Dateniwwerdroungsgeschwindegkeet tëscht Netzwierker vu méi wéi 3,8 Mbps erreechen, wärend WireGuard huet et op déiselwecht 5 Mbit/Sekonn "gepompelt".

Configuratioun WireGuard op VPS[Interface]
Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>

[Peer]
Öffentleche Schlëssel = <VPN_1_MS_PUBLIC_KEY>
erlaabt IPs = 192.168.30.2/32

[Peer]
Öffentleche Schlëssel = <VPN_2_MK2_PUBLIC_KEY>
erlaabt IPs = 192.168.30.3/32

[Peer]
Öffentleche Schlëssel = <VPN_2_MK3_PUBLIC_KEY>
erlaabt IPs = 192.168.30.4/32

Configuratioun WireGuard op MS (bäigefüügt zu /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.2/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МС'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option route_allowed_ips '1'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - сервер
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option listen_port '51821'
        list addresses '192.168.31.1/24'
        option auto '1'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list allowed_ips '192.168.31.2'

config wireguard_wg1ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3

        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list allowed_ips '192.168.31.3'

Configuratioun WireGuard op MK2 (bäigefüügt zu /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.3/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК2'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list addresses '192.168.31.2/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

Configuratioun WireGuard op MK3 (bäigefüügt zu /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.4/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК3'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list addresses '192.168.31.3/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

An de beschriwwene Konfiguratioune fir den zweeten Niveau VPN weisen ech de Clienten WireGuard Port 51821. Dëst sollt net néideg sinn, well de Client eng Verbindung vun all fräien, onprivilegéierte Port opbaut, awer ech hunn et op dës Manéier gemaach, fir all ukommende Verbindungen op den wg0-Interfaces vun alle Routeren ze verweigeren, ausser ukommende UDP-Verbindungen op de Port 51821.

Ech hoffen, datt den Artikel fir een nëtzlech ass.

PS Och wëll ech mäi Skript deelen, deen mir eng PUSH Notifikatioun op mäin Telefon an der WirePusher Applikatioun schéckt wann en neien Apparat a mengem Netz erschéngt. Hei ass de Link zum Skript: github.com/r0ck3r/device_discover.

Nicolas Schmit: Configuratioun OpenVPN-Serveren a Clienten

OpenVPN-Server

client-to-client

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn-server.crt
dh /etc/openvpn/server/dh.pem
key /etc/openvpn/server/vpn-server.key

dev tap
ifconfig-pool-persist /etc/openvpn/ipp.txt 0
keepalive 10 60
proto tcp4
server-bridge 192.168.10.1 255.255.255.0 192.168.10.80 192.168.10.254
status /var/log/openvpn-status.log
verb 3
comp-lzo

OpenVPN-Client

client
tls-client
dev tap
proto tcp
remote VPS_IP 1194 # Change to your router's External IP
resolv-retry infinite
nobind

ca client/ca.crt
cert client/client.crt
key client/client.key
dh client/dh.pem

comp-lzo
persist-tun
persist-key
verb 3

Ech hunn easy-rsa benotzt fir Certificaten ze generéieren

Source: will.com

Kaaft zouverlässeg Hosting fir Site mat DDoS Schutz, VPS VDS Server 🔥 Kaaft zouverléissegt Websäithosting mat DDoS-Schutz, VPS VDS Server | ProHoster