Wiesselt vun OpenVPN op WireGuard fir Netzwierker an ee L2 Netzwierk ze kombinéieren

Wiesselt vun OpenVPN op WireGuard fir Netzwierker an ee 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

OpenVPN gouf am Ufank als Protokoll gewielt fir dës Aufgab ëmzesetzen, well als éischt kann et e Tapapparat erstellen deen ouni Probleemer op d'Bréck bäigefüügt ka ginn, an zweetens OpenVPN ënnerstëtzt Operatioun iwwer den TCP Protokoll, wat och wichteg war, well keen vun den Appartementer haten eng speziell IP Adress, an ech konnt STUN net benotzen, well mäi Provider fir e puer Grond blockéiert Entréeën UDP Verbindungen aus hir Netzwierker, iwwerdeems de TCP Protokoll erlaabt mech der VPN Server port ze gelount VPS benotzt SSH weiderginn. Jo, dës Approche gëtt eng grouss Belaaschtung, well d'Donnéeën zweemol verschlësselt sinn, awer ech wollt net e VPS a mengem privaten Netzwierk aféieren, well et nach ëmmer e Risiko war datt Drëttpersounen d'Kontroll doriwwer kréien, also sou en Apparat hunn op meng doheem Reseau war extrem ongewollt an et war entscheet bezuelen fir Sécherheet mat enger grousser iwwerhead.

Fir den Hafen op de Router weiderzebréngen, op deem et geplangt war de Server z'installéieren, gouf de sshtunnel Programm benotzt. Ech wäert d'Intricacies vu senger Konfiguratioun net beschreiwen - et ass ganz einfach gemaach, ech bemierken just datt seng Aufgab war den TCP Hafen 1194 vum Router op de VPS weiderzebréngen. Als nächst gouf den OpenVPN Server um tap0 Apparat konfiguréiert, deen mat der br-lan Bréck verbonne war. Nodeems Dir d'Verbindung mam nei erstallten Server vum Laptop iwwerpréift huet, gouf et kloer datt d'Iddi vum Port Forwarding gerechtfäerdegt war a mäi Laptop gouf Member vum Router Netzwierk, obwuel et net kierperlech dran war.

Et war nëmmen eng kleng Saach iwwreg ze maachen: et war néideg IP Adressen a verschiddenen Appartementer ze verdeelen, sou datt se net konflikt sinn an d'Router als OpenVPN Clienten konfiguréieren.
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 fir genau dës Adressen un de Client Router vum OpenVPN Server ze ginn andeems d'Linn op seng Konfiguratioun bäigefüügt gouf:

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'Apparatnamen sinn, déi spezifizéiert sinn wann Dir Certificaten erstellt fir mat OpenVPN ze verbannen

Als nächst goufen OpenVPN Clienten op de Router konfiguréiert, tap0 Apparater op béide goufen op d'br-lan Bréck bäigefüügt. Op dëser Etapp schéngt alles gutt ze sinn well all dräi Netzwierker sech gesinn an als een funktionnéieren. Allerdéngs ass en net ganz angenehmen Detail erauskomm: heiansdo konnten Apparater eng IP Adress kréien, déi net vun hirem Router ass, mat all de Konsequenzen. Aus e puer Grënn huet de Router an engem vun den Appartementer keng Zäit fir DHCPDISCOVER an der Zäit ze reagéieren an den Apparat krut eng Adress déi net virgesi war. Ech hu gemierkt datt ech esou Ufroen an tap0 op jiddereng vun den Router muss filteren, awer wéi et erausgestallt huet, kënnen iptables net mam Apparat funktionnéieren wann et Deel vun enger Bréck ass an ebtables musse mir hëllefen. Zu menger Bedauernung war et net a menger Firmware an ech hu missen d'Biller fir all Apparat nei opbauen. Andeems Dir dëst maacht an dës Zeilen op /etc/rc.local vun all Router bäidréit, gouf 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: Aféierung WireGuard

Viru kuerzem hunn d'Leit um Internet ëmmer méi iwwer WireGuard ugefaang ze schwätzen, d'Einfachheet vu senger Konfiguratioun bewonneren, héich Iwwerdroungsgeschwindegkeet, niddereg Ping mat vergläichbarer Sécherheet. Sich no méi Informatioun doriwwer huet et kloer gemaach datt weder als Bréckmember schaffen nach iwwer den TCP-Protokoll schaffen dovun ënnerstëtzt gouf, wat mech geduecht huet datt et nach ëmmer keng Alternativen zu OpenVPN fir mech waren. Also hunn ech ofgeschloss WireGuard kennen ze léieren.

Virun e puer Deeg hunn d'Noriichten iwwer d'Ressourcen op eng oder aner Manéier am Zesummenhang mat IT verbreet datt WireGuard endlech an de Linux Kernel agefouert gëtt, ugefaange mat der Versioun 5.6. News Artikelen, wéi ëmmer, gelueft WireGuard. Ech sinn erëm an d'Sich no Weeër gestierzt fir de gudden alen OpenVPN ze ersetzen. Dës Kéier sinn ech gerannt 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 OpenVPN deaktivéieren:

/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 ewechzehuelen der grelan0 Apparat vun der Bréck a lafen OpenVPN op de Router am Appartement 2 a sécherstellen, datt d'Netz Wierker wéi erwaart erëm an d'Verbindungen sinn net erof. Duerch d'Sich kommen ech op Foren, wou d'Leit sech iwwer déiselwecht Problemer beschwéieren, wou se ugeroden ginn d'MTU z'erhéijen. Net méi séier gesot wéi gemaach. Wéi och ëmmer, bis d'MTU héich genuch gesat gouf - 7000 fir Gretap-Geräter, goufen entweder TCP-Verbindungen erofgefall oder niddereg Transferraten observéiert. Wéinst der héijer MTU fir Gretap goufen d'MTUs fir Layer 8000 a Layer 7500 WireGuard Verbindungen op XNUMX respektiv XNUMX gesat.

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 de Client Router nei gestart hunn, hunn ech entdeckt datt se aus irgendege Grënn net mam Server verbonne sinn. Nodeems ech mat hirem SSH verbonne sinn (glécklecherweis hat ech virdru sshtunnel fir dëst konfiguréiert), gouf entdeckt datt WireGuard aus irgendege Grënn e Wee fir den Endpunkt erstellt, awer et war falsch. Also, fir 192.168.30.2, huet d'Route-Tabelle e Wee duerch d'pppoe-wan-Interface uginn, dat heescht iwwer den Internet, obwuel de Wee dohinner sollt duerch d'wg0 Interface geréckelt ginn. Nodeems dës Streck geläscht gouf, gouf d'Verbindung restauréiert. Ech konnt net iwwerall Instruktiounen fannen wéi WireGuard ze zwéngen dës Strecken net ze kreéieren. Ausserdeem hunn ech net emol verstanen ob dëst eng Feature vum OpenWRT oder WireGuard selwer war. Ouni mat dësem Problem fir eng laang Zäit ze këmmeren, hunn ech einfach eng Zeil op béide Router an engem Zäitschrëft bäigefüügt, deen dës Streck geläscht huet:

route del 192.168.30.2

Ze summéieren

Ech hunn nach net e komplette Verzicht vun OpenVPN erreecht, well ech heiansdo muss mat engem neien Netzwierk vun engem Laptop oder Telefon verbannen, an e Gretap-Apparat op hinnen opzestellen ass allgemeng onméiglech, awer trotz dësem hunn ech e Virdeel an der Geschwindegkeet vun Daten Transfert tëscht Appartementer an, zum Beispill, benotzt VNC net méi onbequemen. Ping ass liicht erofgaang, awer gouf méi stabil:

Wann Dir OpenVPN benotzt:

[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 WireGuard benotzt:

[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

Allerdéngs ass d'Vitesse däitlech eropgaang. Also, an engem Appartement mat engem Server Router hunn ech eng Internetverbindungsgeschwindegkeet vun 30 Mbit / sec, an an aneren Appartementer ass et 5 Mbit / sec. Zur selwechter Zäit, wärend ech OpenVPN benotzt, konnt ech net eng Datenübertragungsgeschwindegkeet tëscht Netzwierker vu méi wéi 3,8 Mbit / sec no iperf Liesungen erreechen, wärend WireGuard et op déiselwecht 5 Mbit / sec "boost" huet.

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

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_1_МС>
AllowedIPs = 192.168.30.2/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2>
AllowedIPs = 192.168.30.3/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3>
AllowedIPs = 192.168.30.4/32

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

#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'

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

#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'

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

#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 beschriwwenen Konfiguratiounen fir zweete Niveau VPN weisen ech WireGuard Clienten op den Hafen 51821. An der Theorie ass dëst net néideg, well de Client eng Verbindung vun all fräien onprivilegéierten Hafen opbaut, awer ech hunn et esou gemaach datt et méiglech war ze verbidden all erakommen Verbindungen op de wg0 Schnëttplazen vun all Router ausser erakommen UDP Verbindungen op 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: Konfiguratioun vum OpenVPN Server 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

Setzt e Commentaire