Migrazzjoni minn OpenVPN għal WireGuard biex tikkonsolida n-netwerks f'netwerk L2 wieħed

Migrazzjoni minn OpenVPN għal WireGuard biex tikkonsolida n-netwerks f'netwerk L2 wieħed

Nixtieq naqsam l-esperjenza tiegħi li ngħaqqad netwerks fi tliet appartamenti ġeografikament imbiegħda, li kull wieħed minnhom juża routers b'OpenWRT bħala portal, f'netwerk komuni wieħed. Meta tagħżel metodu biex tgħaqqad netwerks bejn L3 b'rotot tas-subnet u L2 b'pont, meta n-nodi tan-netwerk kollha jkunu fl-istess subnet, ingħatat preferenza lit-tieni metodu, li huwa aktar diffiċli biex jiġi kkonfigurat, iżda jipprovdi aktar opportunitajiet, peress li huwa trasparenti użu ta 'teknoloġiji kien ippjanat fin-netwerk maħluqa Wake-on-Lan u DLNA.

Parti 1: Sfond

OpenVPN inizjalment intgħażel bħala l-protokoll għall-implimentazzjoni ta 'dan il-kompitu, peress li, l-ewwelnett, jista' joħloq apparat tal-vit li jista 'jiżdied mal-pont mingħajr problemi, u t-tieni, OpenVPN jappoġġja l-operat fuq il-protokoll TCP, li kien importanti wkoll, minħabba li l-ebda wieħed mill-appartamenti ma kellu indirizz IP iddedikat, u ma stajtx nuża STUN, għax għal xi raġuni l-ISP tiegħi jimblokka l-konnessjonijiet UDP deħlin min-netwerks tagħhom, filwaqt li l-protokoll TCP ippermettuli ngħaddi l-port tas-server VPN fuq VPS mikrija bl-użu ta 'SSH. Iva, dan l-approċċ jagħti tagħbija kbira, peress li d-dejta hija kkodifikata darbtejn, iżda ma ridtx nintroduċi l-VPS fin-netwerk privat tiegħi, peress li kien għad hemm riskju li partijiet terzi jiksbu kontroll fuqha, għalhekk, li jkollhom tali apparat fuq in-netwerk tad-dar kien estremament mhux mixtieq u ġie deċiż li tħallas għas-sigurtà b'overhead kbir.

Biex tgħaddi l-port fuq ir-router li fuqu kien ippjanat li jintuża s-server, intuża l-programm sshtunnel. Mhux se niddeskrivi l-intricacies tal-konfigurazzjoni tagħha - dan isir pjuttost faċilment, ninnota biss li l-kompitu tiegħu kien li jgħaddi TCP port 1194 mir-router lill-VPS. Sussegwentement, is-server OpenVPN ġie kkonfigurat fuq l-apparat tap0, li kien imqabbad mal-pont br-lan. Wara li ċċekkja l-konnessjoni mas-server maħluq ġdid mill-laptop, deher ċar li l-idea ta 'trażmissjoni tal-port iġġustifikata ruħha u l-laptop tiegħi sar membru tan-netwerk tar-router, għalkemm ma kienx fiżikament fih.

Il-kwistjoni baqgħet żgħira: kien meħtieġ li jitqassmu indirizzi IP f'appartamenti differenti sabiex ma jkunux f'kunflitt u kkonfigurati r-routers bħala klijenti OpenVPN.
Intgħażlu l-indirizzi IP tar-router u l-firxiet tas-server DHCP li ġejjin:

  • 192.168.10.1 bil-firxa 192.168.10.2 - 192.168.10.80 għas-server
  • 192.168.10.100 bil-firxa 192.168.10.101 - 192.168.10.149 għal router fl-appartament Nru 2
  • 192.168.10.150 bil-firxa 192.168.10.151 - 192.168.10.199 għal router fl-appartament Nru 3

Kien meħtieġ ukoll li jiġu assenjati eżattament dawn l-indirizzi lir-routers tal-klijenti tas-server OpenVPN billi żżid il-linja mal-konfigurazzjoni tagħha:

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

u żżid il-linji li ġejjin mal-fajl /etc/openvpn/ipp.txt:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

fejn flat1_id u flat2_id huma l-ismijiet tat-tagħmir speċifikati meta jiġu ġġenerati ċertifikati għall-konnessjoni ma' OpenVPN

Sussegwentement, il-klijenti OpenVPN ġew ikkonfigurati fuq ir-routers, l-apparati tap0 fuq it-tnejn ġew miżjuda mal-pont br-lan. F'dan l-istadju, kollox deher li kien fl-ordni, peress li t-tliet netwerks jaraw lil xulxin u jaħdmu kollha kemm huma. Madankollu, irriżulta dettall mhux pjaċevoli ħafna: xi drabi l-apparati jistgħu jiksbu indirizz IP mhux mir-router tagħhom, bil-konsegwenzi kollha li jirriżultaw. Għal xi raġuni, ir-router f'wieħed mill-appartamenti ma kellux ħin biex jirrispondi għal DHCPDISCOVER fil-ħin u l-apparat irċieva l-indirizz ħażin. Irrealizzajt li għandi bżonn niffiltra talbiet bħal dawn f'tap0 fuq kull wieħed mir-routers, iżda kif irriżulta, iptables ma jistgħux jaħdmu ma 'apparat jekk huwa parti minn pont u ebtables għandhom jiġu salvati tiegħi. B'dispjaċir tiegħi, ma kienx fil-firmware tiegħi u kelli nibni mill-ġdid l-immaġini għal kull apparat. Billi għamilt dan u żżid dawn il-linji ma' /etc/rc.local ta' kull router, il-problema ġiet solvuta:

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

Din il-konfigurazzjoni damet għal tliet snin.

Parti 2: Introduzzjoni ta 'WireGuard

Riċentement, l-Internet qed jitkellem dejjem aktar dwar WireGuard, jammira s-sempliċità tal-konfigurazzjoni tiegħu, veloċità għolja ta 'trasferiment, ping baxx b'sigurtà komparabbli. It-tfittxija għal aktar informazzjoni dwarha għamilha ċara li la xogħol bħala membru tal-pont u lanqas xogħol fuq il-protokoll TCP mhu appoġġjat minnha, li ġagħlitni naħseb li għad m'hemmx alternattivi għal OpenVPN għalija. Allura poġġejt insir naf lil WireGuard.

Ftit jiem ilu, l-aħbar inxterdet permezz ta 'riżorsi b'xi mod jew ieħor relatati mal-IT li WireGuard finalment se jiġi inkluż fil-kernel tal-Linux, li jibda bil-verżjoni 5.6. Artikli tal-aħbarijiet, bħal dejjem, faħħru lil WireGuard. Erġajt dħalt fit-tfittxija għal modi biex tissostitwixxi l-OpenVPN antik tajjeb. Din id-darba drajt dan l-artikolu. Tkellmet dwar il-ħolqien ta 'mina Ethernet fuq L3 bl-użu ta' GRE. Dan l-artiklu tani tama. Baqgħet mhux ċara x'għandek tagħmel bil-protokoll UDP. It-tiftix wassalni għal artikli dwar l-użu ta 'socat flimkien ma' mina SSH biex jgħaddi port UDP, madankollu, innutaw li dan l-approċċ jaħdem biss f'modalità ta 'konnessjoni waħda, li jfisser li klijenti multipli VPN ikun impossibbli. Ħarġejt bl-idea li nwaqqaf server VPN fuq VPS, u waqqaf GRE għall-klijenti, iżda kif irriżulta, GRE ma jappoġġjax il-kriptaġġ, li jwassal għall-fatt li jekk partijiet terzi jiksbu aċċess għas-server , it-traffiku kollu bejn in-netwerks tiegħi huwa f'idejhom li ma jaqbilli xejn.

Għal darb'oħra, id-deċiżjoni ttieħdet favur encryption żejda, bl-użu ta' VPN fuq VPN skont l-iskema li ġejja:

Saff XNUMX VPN:
VPS huwa server bl-indirizz intern 192.168.30.1
SM huwa klijent VPS b'indirizz intern 192.168.30.2
MK2 huwa klijent VPS b'indirizz intern 192.168.30.3
MK3 huwa klijent VPS b'indirizz intern 192.168.30.4

Saff XNUMX VPN:
SM huwa server bl-indirizz estern 192.168.30.2 u intern 192.168.31.1
MK2 huwa klijent SM bl-indirizz 192.168.30.2 u għandu IP intern ta’ 192.168.31.2
MK3 huwa klijent SM bl-indirizz 192.168.30.2 u għandu IP intern ta’ 192.168.31.3

* SM - router-server fl-appartament 1, MK2 - router fl-appartament 2, MK3 - router fl-appartament 3
* Il-konfigurazzjonijiet tal-apparat huma ppubblikati fl-ispoiler fl-aħħar tal-artiklu.

U għalhekk, pings bejn in-nodi tan-netwerk 192.168.31.0/24 go, wasal iż-żmien li ngħaddu għat-twaqqif tal-mina GRE. Qabel dan, sabiex ma jitlifx l-aċċess għar-routers, ta’ min iwaqqaf mini SSH biex jgħaddi l-port 22 lill-VPS, sabiex, pereżempju, router mill-appartament 10022 ikun disponibbli fuq il-port 2 tal-VPS, u router mill-appartament 11122 se jkun disponibbli fuq il-port 3 tal-VPS.router mill-appartament XNUMX. L-aħjar huwa li jiġi kkonfigurat it-twassil bl-istess sshtunnel, peress li jirrestawra l-mina f'każ li taqa '.

Il-mina hija kkonfigurata, tista 'tikkonnettja ma' SSH permezz tal-port mibgħut:

ssh root@МОЙ_VPS -p 10022

Sussegwentement, iddiżattiva OpenVPN:

/etc/init.d/openvpn stop

Issa ejja nwaqqfu mina GRE fuq ir-router mill-appartament 2:

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

U żid l-interface maħluqa mal-pont:

brctl addif br-lan grelan0

Ejja nwettqu proċedura simili fuq is-server router:

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

U, ukoll, żid l-interface maħluqa mal-pont:

brctl addif br-lan grelan0

li jibda minn dan il-mument, il-pings jibdew imorru b'suċċess fin-netwerk il-ġdid u jien, b'sodisfazzjon, immur nixrob il-kafè. Imbagħad, biex tara kif jaħdem in-netwerk fuq in-naħa l-oħra tal-wajer, nipprova SSH f'wieħed mill-kompjuters fl-appartament 2, iżda l-klijent ssh jiffriża mingħajr ma jqanqalni għal password. Nipprova nqabbad ma' dan il-kompjuter permezz tat-telnet fuq il-port 22 u nara linja li minnha tista' tifhem li l-konnessjoni qed tiġi stabbilita, is-server SSH qed jirrispondi, iżda għal xi raġuni ma joffrix li nidħol.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

Qed nipprova nikkonnettja magħha permezz tal-VNC u nara skrin iswed. Jiena nikkonvinċi lili nnifsi li l-kwistjoni tinsab fil-kompjuter remot, għaliex nista 'faċilment nikkonnettja mar-router minn dan l-appartament billi tuża l-indirizz intern. Madankollu, niddeċiedi li SSH f'dan il-kompjuter permezz tar-router u ninsab sorpriż li nsib li l-konnessjoni tirnexxi u l-kompjuter remot jaħdem tajjeb iżda jonqos milli jikkonnettja mal-kompjuter tiegħi lanqas.

Nieħu l-apparat grelan0 mill-pont u nibda OpenVPN fuq ir-router fl-appartament 2 u kun żgur li n-netwerk qed jaħdem sew mill-ġdid u l-konnessjonijiet ma jkunux qed jonqsu. Fittex niltaqa' ma' forums fejn in-nies jilmentaw dwar l-istess problemi, fejn huma avżati biex jgħollu l-MTU. Mhux kmieni qal milli jsir. Madankollu, sakemm l-MTU ġie ssettjat għal valur kbir biżżejjed ta '7000 għal apparati gretap, jew waqgħu konnessjonijiet TCP jew trażmissjonijiet bil-mod ġew osservati. Minħabba l-MTU għoli għal gretap, l-MTUs għall-konnessjonijiet WireGuard tal-ewwel u t-tieni livelli ġew stabbiliti għal 8000 u 7500, rispettivament.

Għamilt setup simili fuq ir-router mill-appartament 3, bl-unika differenza tkun li t-tieni interface gretap bl-isem grelan1 ġiet miżjuda mas-server router, li ġiet miżjuda wkoll mal-pont br-lan.

Kollox qed jaħdem. Issa tista 'tpoġġi l-assemblaġġ tal-gretap f'awtoload. Għal din:

Poġġi dawn il-linji f'/etc/rc.local fuq ir-router fl-appartament 2:

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

Żid dan ma' /etc/rc.local fuq ir-router fl-appartament 3:

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

U fuq is-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

Wara li reboot il-klijent routers, sibt li għal xi raġuni ma qablux mas-server. Konnessjoni mal-SSH tagħhom (fortunatament, qabel kont kkonfigurat sshtunnel għal dan), ġie skopert li WireGuard għal xi raġuni joħloq rotta għall-endpoint, filwaqt li ma kienx korrett. Allura, għal 192.168.30.2, it-tabella tar-rotta kienet speċifikata fit-tabella tar-rotta permezz tal-interface pppoe-wan, jiġifieri permezz tal-Internet, għalkemm ir-rotta lejha kellha tkun diretta permezz tal-interface wg0. Wara li tħassret din ir-rotta, il-konnessjoni ġiet restawrata. Ma stajt insib struzzjonijiet imkien dwar kif iġiegħel lil WireGuard ma joħloqx dawn ir-rotot. Barra minn hekk, lanqas biss fhimt jekk din hijiex karatteristika ta 'OpenWRT, jew ta' WireGuard innifsu. Mingħajr ma kelli nittratta din il-problema għal żmien twil, sempliċement żidt maż-żewġ routers fi script looped minn tajmer, linja li ħassar din ir-rotta:

route del 192.168.30.2

Qosor

Għadni ma ksibtx rifjut sħiħ ta 'OpenVPN, peress li xi drabi jkolli bżonn nikkonnettja ma' netwerk ġdid minn laptop jew telefon, u t-twaqqif ta 'apparat gretap fuqhom huwa ġeneralment impossibbli, iżda minkejja dan, sibt vantaġġ fit-trasferiment tad-dejta. veloċità bejn appartamenti u, pereżempju, l-użu ta 'VNC m'għadux inkonvenjenti. Ping naqas ftit, iżda sar aktar stabbli:

Meta tuża 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

Meta tuża 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

Huwa affettwat l-aktar minn ping għoli għal VPS li huwa bejn wieħed u ieħor 61.5ms

Madankollu, il-veloċità żdiedet b'mod sinifikanti. Allura, f'appartament b'router-server, għandi veloċità ta 'konnessjoni tal-Internet ta' 30 Mbps, u f'appartamenti oħra, 5 Mbps. Fl-istess ħin, waqt li nuża OpenVPN, ma stajtx nikseb rata ta 'trasferiment tad-dejta bejn in-netwerks ta' aktar minn 3,8 Mbps skont iperf, filwaqt li WireGuard "ippumpjaha" sa l-istess 5 Mbps.

Konfigurazzjoni WireGuard fuq 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

Konfigurazzjoni WireGuard fuq MS (miżjuda ma' /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'

Konfigurazzjoni WireGuard fuq MK2 (miżjuda ma' /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'

Konfigurazzjoni WireGuard fuq MK3 (miżjuda ma' /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'

Fil-konfigurazzjonijiet deskritti għat-tieni livell VPN, nispeċifika l-port 51821 lill-klijenti WireGuard.Fit-teorija, dan mhux meħtieġ, peress li l-klijent se jistabbilixxi konnessjoni minn kwalunkwe port mhux privileġġjat b'xejn, iżda għamiltha sabiex il-konnessjonijiet deħlin kollha jista 'jiġi miċħud fuq l-interfaces wg0 tar-routers kollha, ħlief konnessjonijiet UDP deħlin fuq il-port 51821.

Nittama li l-artiklu jkun utli għal xi ħadd.

PS Ukoll, nixtieq naqsam l-iskrittura tiegħi li tibgħatli notifika PUSH lit-telefon tiegħi fl-applikazzjoni WirePusher meta jidher apparat ġdid fuq in-netwerk tiegħi. Hawnhekk hawn link għall-iskript: github.com/r0ck3r/device_discover.

UPDATE: Konfigurazzjoni tas-server u tal-klijenti OpenVPN

Server OpenVPN

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

Klijent OpenVPN

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

Jien użajt easy-rsa biex niġġenera ċertifikati.

Sors: www.habr.com

Żid kumment