
Ez dixwazim ezmûna xwe ya berhevkirina toran di sê apartmanên erdnîgarî yên dûr de, ku her yek ji wan routerên OpenWRT-ê wekî dergehek bikar tîne, di yek tora hevpar de parve bikim. Dema ku rêbazek ji bo berhevkirina torên di navbera L3 bi rêvekirina jêrtorê û L2 bi pirê ve, gava ku hemî girêkên torê dê di heman jêrtorê de bi cih bibin, tercîh ji rêbaza duyemîn re hate dayîn, ku mîhengkirina wê dijwartir e, lê derfetên mezintir peyda dike, ji ber ku karanîna zelal a teknolojiyên di tora ku Wake-on-Lan û DLNA hatî afirandin de hate plan kirin.
Beş 1: Paşnav
Protokola ku ji bo pêkanîna vê peywirê di destpêkê de hatî hilbijartin ev bû: OpenVPN, ji ber ku, pêşî, ew dikare amûrek lêdanê biafirîne ku bêyî pirsgirêk li pirê were zêdekirin, û duyemîn, OpenVPN Ew TCP piştgirî dike, ku ev jî girîng bû, ji ber ku tu yek ji apartmanan navnîşana IP-ya taybetî tune bû. Ez nikarim STUN bikar bînim ji ber ku ISP-ya min, ji ber hin sedeman, girêdanên UDP-ya hatinî ji torên xwe asteng dike. TCP-ê rê da min ku porta servera VPN-ê bi karanîna SSH-ê ber bi VPS-ya kirêkirî ve bişînim. Her çend ev rêbaz serbarek girîng diafirîne jî, ji ber ku dane du caran şîfrekirî ne, min nexwest VPS-ê entegre bikim nav tora xwe ya taybet, ji ber ku xetera destxistina kontrola aliyên sêyemîn li ser wê hebû. Ji ber vê yekê, hebûna amûrek wusa li ser tora mala min pir nexwestî bû, ji ber vê yekê min biryar da ku ji bo ewlehiyê serbarek girîng bidim.
Ji bo şandina porta li ser routerê ku plan dikir server lê were bicihkirin, min bernameya sshtunnel bikar anî. Ez ê neçim nav hûrguliyên mîhengkirina wê - ew pir hêsan e. Ez ê tenê destnîşan bikim ku armanca wê ew bû ku porta TCP 1194 ji routerê ber bi VPS ve bişîne. Piştre, min server mîheng kir. OpenVPN Li ser cîhaza tap0, ku bi pira br-lan ve girêdayî bû. Piştî ceribandina girêdana bi servera nû çêkirî ji laptopa min, eşkere bû ku fikra şandina portê kar kiriye, û laptopa min bûye endamê tora routerê, her çend ew bi fîzîkî ne beşek jê be jî.
Tenê tiştê ku mabû ev bû ku navnîşanên IP-ê li apartmanên cûda belav bikin da ku ew nekevin nav pevçûnê û routerên wekî wan mîheng bikin. OpenVPN-muwekîlan.
Navnîşanên IP-ya routerê û rêzikên servera DHCP yên jêrîn hatin hilbijartin:
- 192.168.10.1 bi range 192.168.10.2 - 192.168.10.80 ji bo serverê
- 192.168.10.100 bi range 192.168.10.101 - 192.168.10.149 ji bo routerê li apartmana jimare 2
- 192.168.10.150 bi range 192.168.10.151 - 192.168.10.199 ji bo routerê li apartmana jimare 3
Her wiha pêwîst bû ku van navnîşanan ji bo routerên xerîdar werin destnîşankirin. OpenVPN-server, bi zêdekirina rêza jêrîn li mîhengê wê:
ifconfig-pool-persist /etc/openvpn/ipp.txt 0û rêzikên jêrîn li pelê /etc/openvpn/ipp.txt zêde bikin:
flat1_id 192.168.10.100
flat2_id 192.168.10.150
ku flat1_id û flat2_id navên cîhazan in ku dema çêkirina sertîfîkayan ji bo girêdanê têne destnîşankirin. OpenVPN
Piştre, router hatin mîheng kirin OpenVPN- xerîdar, cîhazên tap0 li ser herduyan li pira br-lan hatin zêdekirin. Di vê gavê de, her tişt baş xuya dikir, ji ber ku her sê tor dikarin hevdu bibînin û wekî yekîneyek yekane tevbigerin. Lêbelê, hûrguliyek pir ne xweş derket holê: carinan cîhaz navnîşana IP-yê ji routerê xelet distînin, bi hemî encamên wê re. Ji ber hin sedeman, routerê li yek ji apartmanan di wextê xwe de bersiva DHCPDISCOVER neda, û cîhaz navnîşana xelet wergirt. Min fêm kir ku ez hewce dikim ku daxwazên weha di tap0 de li ser her routerê fîltre bikim, lê wekî ku derket holê, iptables nikare bi cîhazek re bixebite ger ew beşek ji pirekê be, ji ber vê yekê min hewce kir ku ebtables bikar bînim. Mixabin, firmware-a min ew tê de nekir, ji ber vê yekê min neçar ma ku wêneyan ji bo her cîhazê ji nû ve ava bikim. Piştî ku min ev kir û rêzikên jêrîn li /etc/rc.local li ser her routerê zêde kir, pirsgirêk çareser bû:
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
Vê veavakirinê sê salan domand.
Beşa 2: Naskirin WireGuard
Di demên dawî de, li ser înternetê nîqaşên li ser WireGuard, bi hêsaniya mîhengkirina wê, leza veguhastina bilind, ping-a nizm û ewlehiya wê ya berawirdî pesnê xwe didim. Lêgerînek ji bo agahdariyên zêdetir derbarê wê de eşkere kir ku ew ne piştgiriya endamên pirê û ne jî piştgiriya protokola TCP-ê nake, ku ev yek hişt ku ez bawer bikim ku alternatîfek din tune. OpenVPN ji bo min ew hîn jî li wir nîne. Ji ber vê yekê min nasîna wê paşxist WireGuard.
Çend roj berê, nûçeyek bi rêya çavkaniyên têkildarî IT-ê bi awayekî an awayekî din belav bû ku WireGuard di dawiyê de dê di nav kernel de were bicîh kirin Linux, ji guhertoya 5.6 dest pê dike. Gotarên nûçeyan, wekî her carê, hatin pesinandin. WireGuardEz careke din ketim nav lêgerîna rêyan da ku ya kevin a baş biguherînim OpenVPNVê carê ez rastî . Ew li ser afirandina tunelek Ethernet li ser L3 bi karanîna GRE re axivî. Vê gotarê hêvî da min. Ne diyar ma ku bi protokola UDP re çi bike. Lêgerînê min birin gotarên di derbarê karanîna socat bi tunelek SSH re ji bo pêşdebirina portek UDP, lêbelê, wan destnîşan kir ku ev nêzîkatî tenê di moda girêdana yekane de dixebite, ango, karê çend xerîdarên VPN dê ne mumkun be. Min ramana sazkirina serverek VPN li ser VPS-ê û sazkirina GRE-yê ji bo xerîdaran hat, lê wekî ku derket holê, GRE piştgirî nade şîfrekirinê, ku dê bibe sedema vê yekê ku ger aliyên sêyemîn bigihîjin serverê , hemî seyrûsefera di navbera torên min de dê di destên wan de be, ku qet li min nedihat.
Carek din, biryar di berjewendiya şîfrekirina zêde de, bi karanîna VPN-ê li ser VPN-ê bi karanîna pilana jêrîn hate girtin:
Asta XNUMX VPN:
VPS Ev e server bi navnîşana navxweyî 192.168.30.1
MS Ev e kirrîxwaz VPS bi navnîşana navxweyî 192.168.30.2
MK2 Ev e kirrîxwaz VPS bi navnîşana navxweyî 192.168.30.3
MK3 Ev e kirrîxwaz VPS bi navnîşana navxweyî 192.168.30.4
VPN asta duyemîn:
MS Ev e server bi navnîşana derveyî 192.168.30.2 û navxweyî 192.168.31.1
MK2 Ev e kirrîxwaz MS bi navnîşana 192.168.30.2 û IP-ya navxweyî 192.168.31.2 heye
MK3 Ev e kirrîxwaz MS bi navnîşana 192.168.30.2 û IP-ya navxweyî 192.168.31.3 heye
* MS - router-server di apartmana 1 de, MK2 - router di apartmana 2 de, MK3 - router di apartmana 3 de
* Veavakirinên cîhazê di dawiya gotarê de di spoiler de têne weşandin.
Bi vî rengî, ping di navbera girêkên torê 192.168.31.0/24 de dimeşin, ew dem e ku em biçin sazkirina tunelek GRE. Berî vê yekê, ji bo ku gihîştina routeran winda nebe, hêja ye ku hûn tunelên SSH-ê saz bikin da ku porta 22-ê ji VPS-ê re bişînin, da ku, mînakî, routerê ji daîreya 10022-ê li porta 2 ya VPS-ê bigihîje, û router ji apartmana 11122-ê dê li ser porta 3 routerê ji apartmana XNUMX-ê bigihîje. Baştir e ku meriv şandinê bi karanîna heman sshtunnelê mîheng bike, ji ber ku heke têk biçe ew ê tunelê sererast bike.
Tunel hatiye mîheng kirin, hûn dikarin bi riya porta şandinê ve bi SSH-ê ve girêdin:
ssh root@МОЙ_VPS -p 10022Piştre divê hûn neçalak bikin OpenVPN:
/etc/init.d/openvpn stopNaha em werin tunelek GRE li ser routerê ji daîreya 2 saz bikin:
ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up
Û pêveka çêkirî li pirê zêde bikin:
brctl addif br-lan grelan0
Ka em li ser routerê serverê pêvajoyek wusa pêk bînin:
ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up
Û her weha navbeynkariya çêkirî li pirê zêde bikin:
brctl addif br-lan grelan0
ji vê gavê dest pê dike, ping dest pê dike ku bi serfirazî biçin tora nû û ez, bi dilxweşî, diçim qehweyê vexwim. Dûv re, ji bo ku binirxînim ka torê çawa li dawiya rêzê dixebite, ez hewl didim ku SSH-ê li yek ji komputerên apartmana 2-ê bikim, lê xerîdar ssh bêyî ku şîfreyek bixwaze dicemidîne. Ez hewl didim ku bi rêya telnetê ya li ser porta 22-ê bi vê komputerê ve girêbidim û ez rêzek dibînim ku ez jê fam dikim ku pêwendiyek tê saz kirin, servera SSH bersivê dide, lê ji ber hin sedeman ew tenê ji min napirse ku têkevim li.
$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1
Ez hewl didim ku bi VNC ve pê ve girêbidim û ekranek reş bibînim. Ez xwe îqna dikim ku pirsgirêk bi komputera dûr ve ye, ji ber ku ez dikarim bi hêsanî bi navnîşana hundurîn ve ji vê apartmanê ve bi routerê ve girêbidim. Lêbelê, ez biryar da ku ez bi riya routerê ve bi SSH-ya vê komputerê ve girêbidim û ez şaş dimînim ku pêwendiyek serketî ye, û komputera ji dûr ve pir normal dixebite, lê ew jî nikare bi komputera min ve were girêdan.
Ez cîhaza grelan0 ji pirê derdixim û dixebitim. OpenVPN Li ser routerê di apartmana 2-an de, min piştrast kir ku tor dîsa bi rêkûpêk dixebite û girêdan qut nabin. Dema ku ez lê digeriyam, ez rastî forumên ku mirov li ser heman pirsgirêkan gilî dikirin û ji wan re dihat şîret kirin ku MTU-yê bilind bikin hatim. Di cih de hat gotin û hat kirin. Lêbelê, heya ku MTU têra xwe bilind nehat danîn - 7000 ji bo cîhazên gretap - min an girêdanên TCP-ê qut bûn an jî leza veguhastinê kêm bû. Ji ber MTU-ya bilind ji bo gretap, MTU ji bo girêdanan WireGuard Asta yekem û duyem bi rêzê ve li 8000 û 7500 hatine danîn.
Min li ser routerê ji apartmana 3-ê vesaziyek wusa pêk anî, bi tenê cûdahiya wê ev e ku navgînek duyemîn a gretap a bi navê grelan1 li routerê serverê hate zêdekirin, ku ew jî li pira br-lan hate zêdekirin.
Her tişt dixebite. Naha hûn dikarin meclîsa gretap têxin destpêkê. Ji bo vê:
Min van rêzan li /etc/rc.local li ser routerê di apartmana 2 de danîn:
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
Ev li /etc/rc.local li ser routerê li apartmana 3 zêde kir:
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
Û li ser routerê serverê:
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
Piştî ji nû ve destpêkirina routerên xerîdar, min dît ku ji ber hin sedeman ew bi serverê ve girêdayî nabin. Piştî girêdana bi SSH-ya wan re (bi şikir, min berê sshtunnel ji bo vê yekê mîheng kiribû), min dît ku WireGuard Ji ber hin sedeman, ew rêyek ji bo xala dawî diafirîne, lê ew xelet e. Mînakî, ji bo 192.168.30.2, tabloya rêyê rêyek bi navgîniya navrûya pppoe-wan, ango bi navgîniya înternetê, destnîşan kir, her çend rêya ber bi wê ve divê bi navgîniya navrûya wg0 ve bihata rêve kirin. Piştî jêbirina vê rêyê, girêdan hate vegerandin. Ma ez dikarim li her deverê rêwerzan bibînim ka meriv çawa bi zorê dike? WireGuard Min nikarîbû xwe ji çêkirina van rêyan dûr bigirim. Wekî din, min heta fêm nedikir ka ev taybetmendiyek OpenWRT bû an jî ya WireGuardBêyî ku ez pir wext derbas bikim ji bo çareserkirina pirsgirêkê, min tenê rêzek li skrîptê li ser bingeha demjimêrê li ser her du routerên ku vê rêyê jêbirin zêde kir:
route del 192.168.30.2
Hilberîn
Redkirina tevahî OpenVPN Min hîn ev yek bi dest nexistiye, ji ber ku carinan hewce dikim ku ji laptop an têlefonê bi toreke nû ve girêbidim, û sazkirina cîhazek gretap li ser wan bi gelemperî ne mumkin e. Lêbelê, tevî vê yekê, min di leza veguhastina daneyan di navbera apartmanan de avantajek bi dest xistiye, û mînakî, karanîna VNC naha bê pirsgirêk e. Ping hinekî kêm bûye lê aramtir bûye:
Dema ku bikar bînin 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
Dema ku bikar bînin 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
Ew ji hêla ping-a bilind a VPS-ê, ku bi qasî 61.5 ms-ê ye, bêtir bandor dike
Lêbelê, leza wê pir zêde bûye. Ji ber vê yekê, di apartmana ku router-server lê heye de, leza girêdana înternetê ya min 30 Mbps e, û di apartmanên din de jî 5 Mbps e. Wekî din, di dema karanînê de OpenVPN Li gorî xwendinên iperf, min nekarî leza veguhestina daneyan di navbera toran de ji 3,8 Mbps mezintir bi dest bixim, di heman demê de WireGuard "pompe kir" heta heman 5 Mbit/sec.
Guhertin WireGuard li ser VPS-ê[Interface]
Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>
[Heval]
Mifteya Giştî = <VPN_1_MS_PUBLIC_KEY>
AllowedIPs = 192.168.30.2/32
[Heval]
Mifteya Giştî = <VPN_2_MK2_KEY_PUBLIC>
AllowedIPs = 192.168.30.3/32
[Heval]
Mifteya Giştî = <VPN_2_MK3_KEY_PUBLIC>
AllowedIPs = 192.168.30.4/32
Guhertin WireGuard li ser MS (li /etc/config/networkê hat zêdekirin)
#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'
Guhertin WireGuard li ser MK2 (li /etc/config/networkê hat zêdekirin)
#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'
Guhertin WireGuard li ser MK3 (li /etc/config/networkê hat zêdekirin)
#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'
Di mîhengên ku ji bo VPN-a asta duyemîn hatine vegotin de, ez ji xerîdaran re destnîşan dikim WireGuard Porta 51821. Ev ne hewce ye, ji ber ku xerîdar dê ji her porta azad û bê îmtiyaz pêwendiyek saz bike, lê min ev bi vî rengî kir da ku ez bikaribim hemî girêdanên hatinî li ser navrûyên wg0 yên hemî routerên înkar bikim, ji bilî girêdanên UDP yên hatinî yên bo porta 51821.
Ez hêvî dikim ku gotar dê ji bo kesek kêrhatî be.
PS Di heman demê de, ez dixwazim skrîpta xwe ya ku di serîlêdana WirePusher de agahdariyek PUSH ji têlefona min re dişîne dema ku amûrek nû li ser tora min xuya dibe parve bikim. Li vir lînka skrîptê ye: .
Keskîn: Guhertin OpenVPN- server û xerîdar
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-kirrîxwaz
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 Min hêsan-rsa bikar anî da ku sertîfîkayan çêbikin
Source: www.habr.com
