
Mig langar að deila reynslu minni af því að sameina netkerfi í þremur landfræðilega fjarlægum íbúðum, sem hver um sig notar beina með OpenWRT sem gátt, í eitt sameiginlegt net. Þegar valin var aðferð til að sameina net á milli L3 með undirnetsleið og L2 með brúun, þegar allir nethnútar verða í sama undirneti, var valinn seinni aðferðin, sem er erfiðara að stilla, en gefur fleiri tækifæri, þar sem gagnsæ notkun tækni var skipulögð í stofnuðu neti Wake-on-Lan og DLNA.
Hluti 1: Bakgrunnur
Samskiptareglurnar sem upphaflega voru valdar til að framkvæma þetta verkefni voru OpenVPN, vegna þess að í fyrsta lagi getur það búið til tappabúnað sem hægt er að bæta við brúna án vandræða, og í öðru lagi, OpenVPN Það styður TCP, sem var líka mikilvægt, þar sem engin íbúðanna hafði sérstaka IP-tölu. Ég gat ekki notað STUN því að internetþjónustan mín, af einhverri ástæðu, lokar fyrir UDP-tengingar frá netum sínum. TCP leyfði mér að áframsenda VPN-þjónsgáttina á leigða VPS-tölvuna með SSH. Þó að þessi aðferð skapi verulegan kostnað, þar sem gögnin eru tvöfalt dulkóðuð, vildi ég ekki samþætta VPS-tölvuna við einkanetið mitt, þar sem hætta var á að þriðju aðilar fengju stjórn á henni. Þess vegna var mjög óæskilegt að hafa slíkt tæki á heimanetinu mínu, svo ég ákvað að greiða verulegan kostnað fyrir öryggi.
Til að áframsenda portið á leiðinni þar sem þjónninn átti að vera settur upp notaði ég sshtunnel forritið. Ég mun ekki fara út í smáatriði um stillingu þess — það er frekar einfalt. Ég mun bara taka fram að tilgangur þess var að áframsenda TCP port 1194 frá leiðinni yfir í VPS tækið. Næst stillti ég þjóninn. OpenVPN Á tap0 tækinu, sem var tengt við br-lan brúna. Eftir að hafa prófað tenginguna við nýstofnaða netþjóninn frá fartölvunni minni, varð ljóst að hugmyndin um portframsendingu hafði virkað og fartölvan mín var orðin meðlimur í neti leiðarinnar, jafnvel þótt hún væri ekki líkamlega hluti af því.
Það eina sem eftir var að gera var að dreifa IP-tölum í mismunandi íbúðir svo þær myndu ekki rekast á og stilla beinana eins og... OpenVPN-viðskiptavinir.
Eftirfarandi IP tölur beinar og DHCP miðlarasvið voru valin:
- 192.168.10.1 með svið 192.168.10.2 - 192.168.10.80 fyrir þjóninn
- 192.168.10.100 með svið 192.168.10.101 - 192.168.10.149 fyrir router í íbúð nr
- 192.168.10.150 með svið 192.168.10.151 - 192.168.10.199 fyrir router í íbúð nr
Það var einnig nauðsynlegt að úthluta þessum netföngum til viðskiptavinaleiðanna. OpenVPN-server, með því að bæta eftirfarandi línu við stillingar þess:
ifconfig-pool-persist /etc/openvpn/ipp.txt 0og bætir eftirfarandi línum við /etc/openvpn/ipp.txt skrána:
flat1_id 192.168.10.100
flat2_id 192.168.10.150
þar sem flat1_id og flat2_id eru nöfn tækjanna sem tilgreind eru þegar vottorð eru búin til til að tengjast við OpenVPN
Næst voru leiðararnir stilltir upp OpenVPN- viðskiptavinir, tap0 tæki á báðum voru bætt við br-lan brúna. Á þessum tímapunkti virtist allt í lagi, þar sem öll þrjú netin gátu séð hvort annað og virkað sem ein eining. Hins vegar kom í ljós frekar óþægilegt smáatriði: stundum fengu tæki IP-tölu frá röngum leið, með öllum þeim afleiðingum sem því fylgdu. Af einhverri ástæðu svaraði leiðin í einni af íbúðunum ekki DHCPDISCOVER tímanlega og tækið fékk rangt vistfang. Ég áttaði mig á því að ég þurfti að sía slíkar beiðnir í tap0 á hverri leið, en eins og kom í ljós geta iptables ekki virkað með tæki ef það er hluti af brú, svo ég þurfti að nota ebtables. Því miður innihélt vélbúnaðarforritið mitt það ekki, svo ég þurfti að endurbyggja myndirnar fyrir hvert tæki. Eftir að hafa gert þetta og bætt eftirfarandi línum við /etc/rc.local á hverri leið, var vandamálið leyst:
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
Þessi uppsetning stóð í þrjú ár.
2. hluti: Að kynnast WireGuard
Undanfarið hefur verið vaxandi umræða á Netinu um WireGuardog dáðist að auðveldri uppsetningu, miklum flutningshraða, lágum ping og sambærilegu öryggi. Leit að frekari upplýsingum um það leiddi í ljós að það styður hvorki brúarmeðlimi né TCP samskiptareglur, sem leiddi mig til þess að enginn annar kostur væri í boði. OpenVPN fyrir mig er það enn ekki þar. Svo ég frestaði því að kynnast WireGuard.
Fyrir nokkrum dögum dreifðust fréttir í gegnum upplýsingatækniauðlindir á einn eða annan hátt að WireGuard verður loksins innifalið í kjarnanum Linux, byrjandi með útgáfu 5.6. Fréttagreinar, eins og alltaf, hlutu lof. WireGuardÉg steypti mér enn og aftur niður í leit að leiðum til að skipta út því gamla góða OpenVPNAð þessu sinni rakst ég á . Það talaði um að búa til Ethernet göng yfir L3 með GRE. Þessi grein gaf mér von. Það var enn óljóst hvað ætti að gera við UDP siðareglur. Leit leiddi mig að greinum um að nota socat í tengslum við SSH göng til að framsenda UDP tengi, en þeir tóku fram að þessi aðferð virkar aðeins í einni tengingarham, sem þýðir að margir VPN viðskiptavinir væru ómögulegir. Ég kom með þá hugmynd að setja upp VPN netþjón á VPS og stilla GRE fyrir viðskiptavini, en eins og það kom í ljós þá styður GRE ekki dulkóðun, sem mun leiða til þess að ef þriðju aðilar fá aðgang að þjóninum, öll umferð milli neta minna er í þeirra höndum sem hentaði mér alls ekki.
Aftur var ákvörðunin tekin í þágu óþarfa dulkóðunar með því að nota VPN yfir VPN samkvæmt eftirfarandi kerfi:
Lag XNUMX VPN:
VPS er miðlara með innra heimilisfangi 192.168.30.1
MS er viðskiptavinur VPS með innra heimilisfangi 192.168.30.2
MK2 er viðskiptavinur VPS með innra heimilisfangi 192.168.30.3
MK3 er viðskiptavinur VPS með innra heimilisfangi 192.168.30.4
Layer XNUMX VPN:
MS er miðlara með ytra heimilisfang 192.168.30.2 og innra 192.168.31.1
MK2 er viðskiptavinur MS með heimilisfangið 192.168.30.2 og hefur innri IP 192.168.31.2
MK3 er viðskiptavinur MS með heimilisfangið 192.168.30.2 og hefur innri IP 192.168.31.3
* MS - leið-þjónn í íbúð 1, MK2 - beini í íbúð 2, MK3 - beini í íbúð 3
* Stillingar tækisins eru birtar í spoilernum í lok greinarinnar.
Og svo, ping milli hnúta netsins 192.168.31.0/24 go, það er kominn tími til að halda áfram að setja upp GRE göngin. Fyrir það, til að missa ekki aðgang að beinum, er rétt að setja upp SSH göng til að framsenda höfn 22 til VPS, þannig að t.d. beini frá íbúð 10022 verði tiltækur á höfn 2 í VPS, og a. beini frá íbúð 11122 verður fáanlegur á tengi 3 á VPS beini frá íbúð XNUMX. Best er að stilla áframsendinguna með sama sshtunnel, þar sem það mun endurheimta göngin ef það dettur.
Göngin eru stillt, þú getur tengst SSH í gegnum áframsendu höfnina:
ssh root@МОЙ_VPS -p 10022Næst ættirðu að slökkva á OpenVPN:
/etc/init.d/openvpn stopNú skulum við setja upp GRE göng á beini frá íbúð 2:
ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up
Og bættu hinu búiða viðmóti við brúna:
brctl addif br-lan grelan0
Við skulum framkvæma svipaða aðferð á miðlarabeini:
ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up
Og bættu líka viðmótinu sem búið var til við brúna:
brctl addif br-lan grelan0
frá þessari stundu byrja pingar að fara í nýja netið og ég, ánægður, fer að drekka kaffi. Síðan, til að sjá hvernig netið á hinum enda vírsins virkar, reyni ég að SSH inn í eina af tölvunum í íbúð 2, en ssh biðlarinn frýs án þess að biðja mig um lykilorð. Ég reyni að tengjast þessari tölvu í gegnum telnet á port 22 og sé línu sem maður skilur af því að verið sé að koma á tengingunni, SSH server er að svara, en einhverra hluta vegna býður hann mér ekki inn.
$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1
Ég er að reyna að tengjast honum í gegnum VNC og ég sé svartan skjá. Ég sannfæri sjálfan mig um að málið sé í fjartölvunni, því ég get auðveldlega tengst beini frá þessari íbúð með því að nota innra heimilisfangið. Hins vegar ákveð ég að SSH inn í þessa tölvu í gegnum routerinn og er hissa að komast að því að tengingin heppnast og fjartölvan virkar fínt en nær ekki að tengjast tölvunni minni heldur.
Ég tek grelan0 tækið úr brúnni og keyri það. OpenVPN Á leiðinni í íbúð 2 staðfesti ég að netið virkaði rétt aftur og að tengingarnar væru ekki að rofna. Ég leitaði og rakst á umræðuvettvang þar sem fólk kvartaði yfir sömu vandamálum og þar sem þeim var ráðlagt að hækka MTU. Ekki fyrr en það var sagt. Hins vegar, þangað til MTU var stillt nógu hátt - 7000 fyrir gretap tæki - upplifði ég annað hvort rofnar TCP tengingar eða lágan flutningshraða. Vegna hárrar MTU fyrir gretap, MTU fyrir tengingar... WireGuard Fyrsta og annað stig voru sett á 8000 og 7500, talið í sömu röð.
Ég gerði svipaða uppsetningu á routernum frá íbúð 3, eini munurinn var sá að öðru gretap viðmóti að nafni grelan1 var bætt við server routerinn, sem einnig var bætt við br-lan brúna.
Allt er að virka. Nú geturðu sett gretap samsetninguna í sjálfvirka hleðslu. Fyrir þetta:
Setti þessar línur í /etc/rc.local á routernum í íbúð 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
Bætti þessu við /etc/rc.local á routernum í íbúð 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
Og á netþjónsleiðinni:
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
Eftir að ég endurræsti routerana uppgötvaði ég að þeir voru af einhverri ástæðu ekki að tengjast netþjóninum. Eftir að hafa tengst SSH þeirra (sem betur fer hafði ég áður stillt sshtunnel fyrir þetta) uppgötvaði ég að WireGuard Af einhverri ástæðu býr það til leið fyrir endapunktinn, en hún er röng. Til dæmis, fyrir 192.168.30.2, tilgreindi leiðartöflan leið í gegnum pppoe-wan viðmótið, þ.e. í gegnum internetið, þó að leiðin að því hefði átt að vera beint í gegnum wg0 viðmótið. Eftir að þessari leið var eytt var tengingin endurheimt. Get ég fundið leiðbeiningar einhvers staðar um hvernig á að þvinga fram... WireGuard Ég gat ekki sleppt því að búa til þessar leiðir. Þar að auki skildi ég ekki einu sinni hvort þetta væri eiginleiki í OpenWRT eða í ... WireGuardÁn þess að eyða miklum tíma í að finna út hvað væri að, bætti ég einfaldlega við línu í tímastillta handritið á báðum leiðunum sem eyddi þessari leið:
route del 192.168.30.2
Samantekt
Algjör höfnun OpenVPN Ég hef ekki náð þessu ennþá, þar sem ég þarf stundum að tengjast nýju neti úr fartölvu eða síma, og það er yfirleitt ómögulegt að setja upp gretap tæki á þeim. Þrátt fyrir þetta hef ég hins vegar fengið forskot í gagnaflutningshraða milli íbúða, og það er nú auðvelt að nota VNC, til dæmis. Ping hefur minnkað lítillega en orðið stöðugra:
Þegar á 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
Þegar á 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
Það er aðallega fyrir áhrifum af háu ping til VPS sem er um það bil 61.5 ms
Hins vegar hefur hraðinn aukist verulega. Þannig að í íbúðinni með router-server er ég með 30 Mbps internettengingarhraða og í hinum íbúðunum er hann 5 Mbps. Ennfremur, við notkun... OpenVPN Ég gat ekki náð gagnaflutningshraða milli neta sem var meiri en 3,8 Mbps samkvæmt iperf mælingum, á meðan WireGuard „dælti“ því upp í sömu 5 Mbit/sek.
Stillingar WireGuard á VPS[Interface]
Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>
[Jafning]
Opinber lykill = <VPN_1_MS_PUBLIC_KEY>
Leyfðar IP-tölur = 192.168.30.2/32
[Jafning]
Opinber lykill = <VPN_2_MK2_PUBLIC_KEY>
Leyfðar IP-tölur = 192.168.30.3/32
[Jafning]
Opinber lykill = <VPN_2_MK3_PUBLIC_KEY>
Leyfðar IP-tölur = 192.168.30.4/32
Stillingar WireGuard á MS (bætt við /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'
Stillingar WireGuard á MK2 (bætt við /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'
Stillingar WireGuard á MK3 (bætt við /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'
Í lýstum stillingum fyrir VPN á öðru stigi bendi ég viðskiptavinum á WireGuard Tengi 51821. Þetta ætti ekki að vera nauðsynlegt, þar sem viðskiptavinurinn mun koma á tengingu frá hvaða lausu, óforréttindalausu tengi sem er, en ég gerði það á þennan hátt svo að ég gæti hafnað öllum innkomandi tengingum á wg0 tengjum allra leiða, nema innkomandi UDP tengingum á tengi 51821.
Ég vona að greinin nýtist einhverjum.
PS Einnig vil ég deila handritinu mínu sem sendir mér PUSH tilkynningu í símann minn í WirePusher forritinu þegar nýtt tæki birtist á netinu mínu. Hér er hlekkur á handritið: .
UPDATE: Stillingar OpenVPN-þjónar og viðskiptavinir
OpenVPN-þjónn
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-viðskiptavinur
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 Ég notaði easy-rsa til að búa til vottorð.
Heimild: www.habr.com
