
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
Il-protokoll magħżul biex jiġi implimentat dan il-kompitu kien inizjalment OpenVPN, għax, l-ewwelnett, jista' joħloq apparat tal-vit li jista' jiżdied mal-pont mingħajr ebda problema, u t-tieni nett, OpenVPN Jappoġġja TCP, li kien importanti wkoll, peress li l-ebda wieħed mill-appartamenti ma kellu indirizz IP dedikat. Ma stajtx nuża STUN għax l-ISP tiegħi, għal xi raġuni, jimblokka konnessjonijiet UDP li deħlin min-netwerks tiegħu. TCP ippermettieli nibgħat il-port tas-server VPN lill-VPS mikri permezz ta' SSH. Filwaqt li dan l-approċċ joħloq overhead sinifikanti, peress li d-dejta hija kriptata darbtejn, ma ridtx nintegra l-VPS fin-netwerk privat tiegħi, peress li kien hemm riskju li partijiet terzi jiksbu kontroll fuqu. Għalhekk, li jkolli apparat bħal dan fuq in-netwerk tad-dar tiegħi kien ferm mhux mixtieq, għalhekk iddeċidejt li nħallas overhead sinifikanti għas-sigurtà.
Biex nibgħat il-port fuq ir-router fejn kien ippjanat li jiġi skjerat is-server, użajt il-programm sshtunnel. Mhux se nidħol fid-dettalji tal-konfigurazzjoni tiegħu—huwa pjuttost faċli. Se ninnota biss li l-iskop tiegħu kien li jibgħat il-port TCP 1194 mir-router għall-VPS. Imbagħad, ikkonfigurajt is-server. OpenVPN Fuq l-apparat tap0, li kien imqabbad mal-pont br-lan. Wara li ttestjajt il-konnessjoni mas-server li għadni kif ħloqt mil-laptop tiegħi, deher ċar li l-idea tal-port forwarding kienet ħadmet, u l-laptop tiegħi kien sar membru tan-netwerk tar-router, anke jekk fiżikament ma kienx parti minnu.
L-unika ħaġa li kien fadal x'isir kienet li jitqassmu l-indirizzi IP f'appartamenti differenti sabiex ma jkunux f'kunflitt u li jiġu kkonfigurati r-routers kif xieraq. OpenVPN-klijenti.
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 dawn l-indirizzi jiġu assenjati lir-routers tal-klijenti. OpenVPN-server, billi żżid il-linja li ġejja mal-konfigurazzjoni tiegħu:
ifconfig-pool-persist /etc/openvpn/ipp.txt 0u żż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 tal-apparati speċifikati meta jinħolqu ċertifikati għall-konnessjoni ma' OpenVPN
Imbagħad, ir-routers ġew ikkonfigurati OpenVPN- klijenti, apparati tap0 fuq it-tnejn ġew miżjuda mal-pont br-lan. F'dan il-punt, kollox deher sew, peress li t-tliet netwerks setgħu jaraw lil xulxin u jiffunzjonaw bħala unità waħda. Madankollu, ħareġ dettall pjuttost spjaċevoli: xi kultant l-apparati kienu jirċievu indirizz IP mir-router żbaljat, bil-konsegwenzi kollha li jirriżultaw. Għal xi raġuni, ir-router f'wieħed mill-appartamenti naqas milli jwieġeb għal DHCPDISCOVER fil-ħin, u l-apparat irċieva l-indirizz żbaljat. Irrealizzajt li kelli niffiltra talbiet bħal dawn f'tap0 fuq kull router, iżda kif irriżulta, iptables ma jistax jaħdem ma' apparat jekk ikun parti minn pont, għalhekk kelli nuża ebtables. Sfortunatament, il-firmware tiegħi ma kienx jinkludih, għalhekk kelli nibni mill-ġdid l-immaġini għal kull apparat. Wara li għamilt dan u żidt il-linji li ġejjin ma' /etc/rc.local fuq 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: Insiru Nafu WireGuard
Dan l-aħħar, kien hemm aktar diskussjoni fuq l-Internet dwar WireGuard, nammira l-faċilità ta' konfigurazzjoni tiegħu, il-veloċità għolja tat-trasferiment, il-ping baxx, u s-sigurtà komparabbli. Tiftix għal informazzjoni addizzjonali dwaru żvela li ma jappoġġjax la l-appoġġ għall-protokoll tal-membru tal-pont u lanqas dak tat-TCP, u dan wassalni biex nemmen li ma kien hemm l-ebda alternattiva. OpenVPN għalija għadu mhux hemm. Għalhekk ipposponejt li nsir naf WireGuard.
Ftit jiem ilu, infirxet aħbar permezz ta’ riżorsi relatati mal-IT b’xi mod jew ieħor li WireGuard fl-aħħar se jiġi inkluż fil-kernel Linux, nibdew bil-verżjoni 5.6. L-artikli tal-aħbarijiet, bħal dejjem, ġew imfaħħra WireGuardGħal darb'oħra bdejt infittex modi kif nissostitwixxi l-qadim it-tajjeb OpenVPNDin id-darba ltqajt ma' . 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 10022Imbagħad għandek tiddiżattiva OpenVPN:
/etc/init.d/openvpn stopIssa 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.
Noħroġ l-apparat grelan0 mill-pont u nħaddmu. OpenVPN Fuq ir-router fl-appartament 2, ikkonfermajt li n-netwerk kien qed jaħdem sew mill-ġdid u l-konnessjonijiet ma kinux qed jaqgħu. Waqt li kont qed infittex, sibt forums fejn in-nies kienu qed jilmentaw dwar l-istess kwistjonijiet, u fejn kienu avżati biex jgħollu l-MTU. Malli ntqal, sar. Madankollu, sakemm l-MTU ma ġiex issettjat għoli biżżejjed—7000 għal apparati gretap—esperjenzajt jew konnessjonijiet TCP mitlufa jew veloċitajiet ta' trasferiment baxxi. Minħabba l-MTU għoli għal gretap, l-MTU għall-konnessjonijiet WireGuard L-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 erġajt bdejt ir-routers tal-klijenti, skoprejt li għal xi raġuni ma kinux qed jikkonnettjaw mas-server. Wara li kkonnettjajt mal-SSH tagħhom (fortunatament, kont diġà kkonfigurajt l-sshtunnel għal dan), skoprejt li WireGuard Għal xi raġuni, toħloq rotta għall-endpoint, iżda mhijiex korretta. Pereżempju, għal 192.168.30.2, it-tabella tar-rotta speċifikat 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ħassar din ir-rotta, il-konnessjoni ġiet irrestawrata. Nista' nsib struzzjonijiet x'imkien dwar kif nisforza WireGuard Ma stajtx nevita li noħloq dawn ir-rotot. Barra minn hekk, lanqas biss fhimt jekk din kinitx karatteristika ta' OpenWRT jew ta' WireGuardMingħajr ma qattajt ħafna ħin nifhem x'inhi l-problema, sempliċement żidt linja mal-iskritt tat-timer-loop fuq iż-żewġ routers li ħassret din ir-rotta:
route del 192.168.30.2
Qosor
Ċaħda sħiħa OpenVPN Għadni ma rnexxielix nagħmel dan, għax kultant ikolli bżonn nikkonnettja ma' netwerk ġdid minn laptop jew telefon, u ġeneralment ikun impossibbli li nissettja apparat gretap fuqhom. Madankollu, minkejja dan, ksibt vantaġġ fil-veloċità tat-trasferiment tad-dejta bejn l-appartamenti, u l-użu tal-VNC, pereżempju, issa huwa faċli ħafna. Il-ping naqas xi ftit iżda sar aktar stabbli:
Meta jintuża l- 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 jintuża l- 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. Għalhekk, fl-appartament bir-router-server, għandi veloċità ta' konnessjoni tal-internet ta' 30 Mbps, u fl-appartamenti l-oħra hija ta' 5 Mbps. Barra minn hekk, waqt l-użu OpenVPN Ma stajtx nilħaq veloċità ta' trasferiment tad-dejta bejn netwerks akbar minn 3,8 Mbps skont il-qari tal-iperf, waqt li WireGuard "ippumpjaha" għall-istess 5 Mbit/sek.
Konfigurazzjoni WireGuard fuq il-VPS[Interface]
Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>
[Sieħbi]
Ċavetta Pubblika = <VPN_1_MS_Ċavetta_Pubblika>
AllowedIPs = 192.168.30.2/32
[Sieħbi]
Ċavetta Pubblika = <VPN_2_MK2_Ċavetta_Pubblika>
AllowedIPs = 192.168.30.3/32
[Sieħbi]
Ċavetta Pubblika = <VPN_2_MK3_Ċavetta_Pubblika>
AllowedIPs = 192.168.30.4/32
Konfigurazzjoni WireGuard fuq MS (miżjud 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żjud 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żjud 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 tal-VPN, nindika lill-klijenti WireGuard Port 51821. Dan m'għandux ikun neċessarju, għax il-klijent se jistabbilixxi konnessjoni minn kwalunkwe port ħieles u mhux privileġġjat, imma jien għamiltha b'dan il-mod sabiex inkun nista' niċħad il-konnessjonijiet kollha li deħlin fuq l-interfaces wg0 tar-routers kollha, ħlief għall-konnessjonijiet UDP li deħlin għall-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: .
UPDATE: Konfigurazzjoni OpenVPN-servers u klijenti
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-lzoOpenVPN-klijent
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
