Transisi ti OpenVPN dina WireGuard pikeun ngahijikeun jaringan kana hiji jaringan L2

Transisi ti OpenVPN dina WireGuard pikeun ngahijikeun jaringan kana hiji jaringan L2

Abdi hoyong bagikeun pangalaman kuring ngagabungkeun jaringan dina tilu apartemen jarak geografis, nu masing-masing ngagunakeun routers OpenWRT salaku gateway a, kana hiji jaringan umum. Nalika milih metodeu pikeun ngagabungkeun jaringan antara L3 sareng routing subnet sareng L2 sareng bridging, nalika sadaya titik jaringan bakal aya dina subnet anu sami, langkung sering milih metodeu kadua, anu langkung hese pikeun ngonpigurasikeun, tapi nyayogikeun kasempetan anu langkung ageung, saprak Pamakéan téknologi transparan direncanakeun dina jaringan anu diciptakeun Wake-on-Lan sareng DLNA.

Bagian 1: Latar

Protokol anu dipilih pikeun ngalaksanakeun tugas ieu mimitina nyaéta OpenVPN, sabab, kahiji, éta tiasa nyiptakeun alat keran anu tiasa ditambahkeun kana sasak tanpa masalah, sareng kadua, OpenVPN Éta ngadukung TCP, anu ogé penting, sabab teu aya apartemen anu gaduh alamat IP khusus. Abdi teu tiasa nganggo STUN sabab ISP abdi, kusabab alesan anu tangtu, ngahalangan sambungan UDP anu lebet tina jaringanna. TCP ngamungkinkeun abdi pikeun neraskeun port server VPN ka VPS anu disewa nganggo SSH. Sanaos pendekatan ieu nyiptakeun biaya overhead anu signifikan, sabab datana dienkripsi ganda, abdi henteu hoyong ngahijikeun VPS kana jaringan pribadi abdi, sabab aya résiko pihak katilu ngawasa éta. Ku alatan éta, gaduh alat sapertos kitu dina jaringan bumi abdi henteu dipikahoyong pisan, janten abdi mutuskeun pikeun mayar biaya overhead anu signifikan pikeun kaamanan.

Pikeun neraskeun port dina router tempat server anu direncanakeun bakal dipasang, kuring nganggo program sshtunnel. Kuring moal ngajelaskeun sacara rinci konfigurasina — éta gampang pisan. Kuring ngan ukur bakal nyatet yén tujuanana nyaéta pikeun neraskeun port TCP 1194 ti router ka VPS. Salajengna, kuring ngonpigurasikeun server. OpenVPN Dina alat tap0, anu disambungkeun ka sasak br-lan. Saatos nguji sambungan ka server anu nembé didamel tina laptop kuring, janten jelas yén ideu port forwarding parantos tiasa dianggo, sareng laptop kuring parantos janten anggota jaringan router, sanaos sacara fisik sanés bagian tina éta.

Hiji-hijina anu tinggaleun nyaéta nyebarkeun alamat IP di apartemen anu béda-béda supados henteu konflik sareng ngonpigurasikeun router sapertos kitu. OpenVPN-klien.
Alamat IP router sareng kisaran pangladén DHCP di handap ieu dipilih:

  • 192.168.10.1 kalawan rentang 192.168.10.2 - 192.168.10.80 pikeun server
  • 192.168.10.100 kalawan rentang 192.168.10.101 - 192.168.10.149 pikeun router dina susun No.. 2
  • 192.168.10.150 kalawan rentang 192.168.10.151 - 192.168.10.199 pikeun router dina susun No.. 3

Perlu ogé pikeun masihan alamat ieu ka router klien. OpenVPN-server, ku cara nambahkeun baris ieu kana konfigurasina:

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

sareng nambihan garis-garis ieu kana file /etc/openvpn/ipp.txt:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

dimana flat1_id sareng flat2_id nyaéta nami alat anu ditangtukeun nalika ngadamel sertipikat pikeun nyambung ka OpenVPN

Salajengna, router-router dikonfigurasi OpenVPN- klien, alat tap0 dina duanana ditambahkeun kana sasak br-lan. Dina titik ieu, sadayana sigana saé, sabab sadaya tilu jaringan tiasa ningali silih sareng fungsina salaku hiji unit. Nanging, aya detil anu rada teu pikaresepeun: sakapeung alat bakal nampi alamat IP ti router anu salah, kalayan sadaya akibat anu bakal datang. Kusabab sababaraha alesan, router di salah sahiji apartemen gagal ngaréspon DHCPDISCOVER dina waktosna, sareng alat éta nampi alamat anu salah. Kuring sadar yén kuring kedah nyaring pamundut sapertos kitu dina tap0 dina unggal router, tapi tétéla, iptables henteu tiasa dianggo sareng alat upami éta bagian tina sasak, janten kuring kedah nganggo ebtables. Hanjakalna, firmware kuring henteu ngalebetkeun éta, janten kuring kedah ngawangun deui gambar pikeun unggal alat. Saatos ngalakukeun ieu sareng nambihan baris ieu ka /etc/rc.local dina unggal router, masalahna direngsekeun:

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

Konfigurasi ieu lumangsung salila tilu taun.

Bagian 2: Ngawanohkeun WireGuard

Akhir-akhir ieu, beuki rame di internet ngeunaan WireGuard, kagum ku gampangna konfigurasi, kecepatan transfer anu luhur, ping anu handap, sareng kaamanan anu sami. Panéangan inpormasi tambahan ngeunaan éta ngungkabkeun yén éta henteu ngadukung dukungan anggota sasak atanapi protokol TCP, anu ngajantenkeun kuring yakin yén teu aya alternatif deui. OpenVPN kanggo abdi éta masih teu aya. Janten abdi nunda-nunda pikeun kenal WireGuard.

Sababaraha dinten kapengker, warta nyebar ngalangkungan sumber daya anu aya hubunganana sareng IT ku hiji atanapi cara anu sanés yén WireGuard tungtungna bakal dilebetkeun kana kernel Linux, dimimitian ku vérsi 5.6. Artikel warta, sapertos biasana, dipuji WireGuardKuring sakali deui neangan cara pikeun ngaganti anu heubeul OpenVPNKali ieu kuring papanggih artikel ieu. Ieu ngobrol ngeunaan nyieun hiji torowongan Ethernet leuwih L3 maké GRE. Tulisan ieu masihan kuring harepan. Eta tetep can écés naon nu kudu jeung protokol UDP. Pilarian ngarah kuring ka artikel ngeunaan ngagunakeun socat ditéang jeung torowongan SSH pikeun neraskeun port UDP, kumaha oge, aranjeunna dicatet yén pendekatan ieu ngan jalan dina modeu sambungan tunggal, nyaeta, karya sababaraha klien VPN bakal jadi teu mungkin. Kuring datang nepi ka pamanggih masang server VPN dina VPS sarta nyetél GRE pikeun klien, tapi tétéla, GRE teu ngarojong enkripsi, nu bakal ngakibatkeun kanyataan yén lamun pihak katilu meunang aksés ka server. , kabéh patalimarga antara jaringan kuring bakal aya dina leungeun maranéhna, nu teu cocog kuring pisan.

Sakali deui, kaputusan dijieun pikeun énkripsi kaleuleuwihan, ku ngagunakeun VPN leuwih VPN ngagunakeun skéma handap:

Tingkat 1 VPN:
VPS éta server kalawan alamat internal 192.168.30.1
MS éta klien VPS kalawan alamat internal 192.168.30.2
MK2 éta klien VPS kalawan alamat internal 192.168.30.3
MK3 éta klien VPS kalawan alamat internal 192.168.30.4

VPN tingkat kadua:
MS éta server kalayan alamat éksternal 192.168.30.2 sareng internal 192.168.31.1
MK2 éta klien MS kalawan alamat 192.168.30.2 sarta ngabogaan IP internal 192.168.31.2
MK3 éta klien MS kalawan alamat 192.168.30.2 sarta ngabogaan IP internal 192.168.31.3

* MS - router-server di apartemen 1, MK2 - router di apartemen 2, MK3 - router di apartemen 3
* Konfigurasi alat diterbitkeun dina spoiler di ahir artikel.

Kituna, pings ngajalankeun antara titik jaringan 192.168.31.0/24, éta waktu pikeun ngaléngkah ka nyetél torowongan GRE. Sateuacan ieu, supados henteu kaleungitan aksés ka router, perlu nyetél torowongan SSH pikeun neraskeun port 22 ka VPS, ku kituna, contona, router ti apartemen 10022 bakal tiasa diaksés dina port 2 VPS, sareng router ti apartemen 11122 bakal diaksés dina port 3 router ti apartemen XNUMX. Hadé pisan mun éta ngonpigurasikeun diteruskeun ngagunakeun sshtunnel sarua, saprak éta bakal mulangkeun torowongan lamun gagal.

Torowongan dikonpigurasikeun, anjeun tiasa nyambung ka SSH via port anu diteruskeun:

ssh root@МОЙ_VPS -p 10022

Salajengna anjeun kedah mareuman OpenVPN:

/etc/init.d/openvpn stop

Ayeuna hayu urang nyetél torowongan GRE dina router ti apartemen 2:

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

Sareng tambahkeun antarmuka anu diciptakeun kana sasak:

brctl addif br-lan grelan0

Hayu urang ngalakukeun prosedur sarupa dina router server:

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

Sareng ogé nambihan antarmuka anu diciptakeun kana sasak:

brctl addif br-lan grelan0

dimimitian ti moment ieu, pings ngawitan suksés indit ka jaringan anyar jeung kuring, jeung kapuasan, indit ka nginum kopi. Teras, pikeun ngira-ngira kumaha jaringan damel di tungtung jalur anu sanés, kuring nyobian SSH kana salah sahiji komputer di apartemen 2, tapi klien ssh ngabéréskeun tanpa ngadorong kecap konci. Kuring nyobian nyambung ka komputer ieu via telnet on port 22 sarta kuring ningali garis ti mana abdi tiasa ngartos yen sambungan keur ngadegkeun, server SSH ngarespon, tapi pikeun sababaraha alesan eta ngan teu ajakan kuring asup log. di.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

Kuring nyobian nyambung ka eta via VNC tur tingal layar hideung. Kuring ngayakinkeun sorangan yén masalahna aya dina komputer jauh, sabab kuring bisa kalayan gampang nyambung ka router ti apartemen ieu ngagunakeun alamat internal. Najan kitu, kuring mutuskeun pikeun nyambung ka SSH tina komputer ieu ngaliwatan router sarta reuwas pikeun manggihan yén sambungan téh suksés, sarta komputer jauh jalan rada normal, tapi ogé teu bisa nyambung ka komputer abdi.

Abdi nyandak alat grelan0 tina bridge teras ngajalankeunana OpenVPN Dina router di apartemen 2, kuring mastikeun yén jaringanna jalan deui kalayan leres sareng sambunganna henteu pegat. Nalika milarian, kuring mendakan forum dimana jalma-jalma ngawadul ngeunaan masalah anu sami, sareng dimana aranjeunna disarankan pikeun naékkeun MTU. Teu lami saatos nyarios, kuring ngalakukeunana. Nanging, dugi ka MTU disetel cukup luhur — 7000 pikeun alat gretap — kuring ngalaman sambungan TCP anu pegat atanapi kecepatan transfer anu handap. Kusabab MTU anu luhur pikeun gretap, MTU pikeun sambungan WireGuard Tingkat kahiji jeung kadua masing-masing disetel dina 8000 jeung 7500.

Kuring dilumangsungkeun hiji setelan sarupa dina router ti apartemen 3, kalawan hijina bédana éta panganteur gretap kadua ngaranna grelan1 ditambahkeun kana router server, nu ieu ogé ditambahkeun kana sasak br-lan.

Sagalana jalan. Ayeuna anjeun tiasa nempatkeun rakitan gretap kana ngamimitian. Kanggo ieu:

Kuring nempatkeun garis ieu dina /etc/rc.local dina router di apartemen 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

Ditambahkeun ieu kana /etc/rc.local dina router di apartemen 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

Sareng dina 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

Saatos nga-reboot router klien, kuring mendakan yén kusabab alesan anu tangtu aranjeunna henteu nyambung ka server. Saatos nyambung ka SSH na (untungna, kuring sateuacanna parantos ngonpigurasikeun sshtunnel pikeun ieu), kuring mendakan yén WireGuard Kusabab sababaraha alesan, éta nyiptakeun rute pikeun titik tungtung, tapi éta salah. Salaku conto, pikeun 192.168.30.2, tabel rute nangtukeun rute ngalangkungan antarmuka pppoe-wan, nyaéta, ngalangkungan internét, sanaos rute ka dinya kedah diarahkeun ngalangkungan antarmuka wg0. Saatos ngahapus rute ieu, sambunganna dibalikeun deui. Naha kuring tiasa mendakan pitunjuk di mana waé ngeunaan kumaha maksakeun WireGuard Abdi teu tiasa nyingkahan nyiptakeun rute ieu. Leuwih ti éta, abdi malah teu ngartos naha ieu fitur OpenWRT atanapi fitur WireGuardTanpa nyéépkeun seueur waktos pikeun ngungkulan masalahna, kuring ngan saukur nambihan hiji baris kana skrip timer-loop dina kadua router anu ngahapus rute ieu:

route del 192.168.30.2

summing up

Panolakan lengkep OpenVPN Kuring tacan ngahontal ieu, sabab sakapeung kuring kedah nyambung ka jaringan anyar tina laptop atanapi telepon, sareng nyetél alat gretap dina éta umumna teu mungkin. Nanging, sanaos kitu, kuring parantos kéngingkeun kaunggulan dina kecepatan transfer data antara apartemen, sareng nganggo VNC, contona, ayeuna henteu repot. Ping rada turun tapi janten langkung stabil:

Ngagunakeun 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

Ngagunakeun 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

Éta langkung kapangaruhan ku ping luhur ka VPS, nyaéta kirang langkung 61.5 mdet

Nanging, kecepatanna parantos ningkat sacara signifikan. Janten, di apartemen anu nganggo router-server, kuring gaduh kecepatan sambungan internét 30 Mbps, sareng di apartemen anu sanés éta 5 Mbps. Sumawona, nalika dianggo OpenVPN Abdi teu tiasa ngahontal kecepatan transfer data antara jaringan anu langkung ageung tibatan 3,8 Mbps numutkeun bacaan iperf, sedengkeun WireGuard "ngompa" nepi ka 5 Mbit/detik anu sami.

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

[Peer]
Konci Publik = <VPN_1_MS_PUBLIC_KEY>
AllowedIPs = 192.168.30.2/32

[Peer]
Konci Publik = <VPN_2_MK2_KEY_PUBLIC>
AllowedIPs = 192.168.30.3/32

[Peer]
Konci Publik = <VPN_2_MK3_KEY_PUBLIC>
AllowedIPs = 192.168.30.4/32

Konfigurasi WireGuard dina MS (ditambahkeun kana /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'

Konfigurasi WireGuard dina MK2 (ditambahkeun kana /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'

Konfigurasi WireGuard dina MK3 (ditambahkeun kana /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'

Dina konfigurasi anu dijelaskeun pikeun VPN tingkat kadua, kuring nunjukkeun ka klien WireGuard Port 51821. Ieu teu kedah diperyogikeun, sabab klien bakal ngadamel sambungan tina port gratis anu teu gaduh hak istimewa, tapi kuring ngalakukeunana ku cara ieu supados kuring tiasa nolak sadaya sambungan anu lebet dina antarmuka wg0 sadaya router, kecuali sambungan UDP anu lebet ka port 51821.

Kuring miharep éta artikel bakal mangpaat ka batur.

PS Ogé, abdi hoyong bagikeun skrip kuring nu ngirim kuring bewara PUSH ka telepon kuring dina aplikasi WirePusher lamun alat anyar nembongan dina jaringan kuring. Ieu tautan kana naskah: github.com/r0ck3r/device_discover.

Update: Konfigurasi OpenVPN-server sareng klien

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-klien

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

I dipaké gampang-rsa ngahasilkeun sertipikat

sumber: www.habr.com

Mésér hosting anu dipercaya pikeun situs anu gaduh panyalindungan DDoS, server VPS VDS 🔥 Meser hosting situs wéb anu tiasa dipercaya nganggo panyalindungan DDoS, server VPS VDS | ProHoster