Paglalin gikan sa OpenVPN ngadto sa WireGuard aron pagkonsolida sa mga network ngadto sa usa ka L2 network

Paglalin gikan sa OpenVPN ngadto sa WireGuard aron pagkonsolida sa mga network ngadto sa usa ka L2 network

Gusto nakong ipaambit ang akong kasinatian sa paghiusa sa mga network sa tulo ka mga apartment nga layo sa geograpiya, ang matag usa niini naggamit sa mga router nga adunay OpenWRT isip ganghaan, ngadto sa usa ka komon nga network. Kung nagpili usa ka pamaagi alang sa paghiusa sa mga network tali sa L3 nga adunay subnet routing ug L2 nga adunay bridging, kung ang tanan nga mga node sa network naa sa parehas nga subnet, gipalabi ang gihatag sa ikaduha nga pamaagi, nga labi ka lisud nga i-configure, apan naghatag daghang mga oportunidad, tungod kay transparent. Ang paggamit sa mga teknolohiya giplano sa gibuhat nga network nga Wake-on-Lan ug DLNA.

Bahin 1: Background

Ang OpenVPN sa sinugdan gipili isip protocol alang sa pagpatuman niini nga buluhaton, tungod kay, una, makahimo kini og tap device nga mahimong idugang sa tulay nga walay bisan unsang mga problema, ug ikaduha, ang OpenVPN nagsuporta sa operasyon sa TCP protocol, nga importante usab, tungod kay walay usa sa mga apartment nga adunay dedikado nga IP address, ug wala ako makagamit sa STUN, tungod kay tungod sa pipila ka rason ang akong ISP nag-block sa umaabot nga mga koneksyon sa UDP gikan sa ilang mga network, samtang ang TCP protocol nagtugot kanako sa pagpasa sa VPN server port sa giabangan nga VPS gamit ang SSH. Oo, kini nga pamaagi naghatag usa ka dako nga karga, tungod kay ang datos gi-encrypt kaduha, apan dili nako gusto nga ipaila ang VPS sa akong pribadong network, tungod kay adunay peligro nga ang mga ikatulo nga partido nga makontrol kini, busa, adunay ingon nga aparato. sa home network hilabihan nga dili gusto ug kini nakahukom sa pagbayad alang sa seguridad nga adunay dako nga overhead.

Aron ipasa ang pantalan sa router diin kini giplano nga i-deploy ang server, gigamit ang sshtunnel nga programa. Dili nako ihulagway ang mga intricacies sa pag-configure niini - kini dali nga nahimo, namatikdan ko lang nga ang tahas niini mao ang pagpasa sa TCP port 1194 gikan sa router ngadto sa VPS. Sunod, ang OpenVPN server gi-configure sa tap0 device, nga konektado sa br-lan bridge. Pagkahuman sa pagsusi sa koneksyon sa bag-ong nahimo nga server gikan sa laptop, nahimo nga tin-aw nga ang ideya sa pag-forward sa port nagpakamatarung sa kaugalingon ug ang akong laptop nahimong miyembro sa network sa router, bisan kung wala kini pisikal.

Ang butang nagpabilin nga gamay: gikinahanglan ang pag-apod-apod sa mga IP address sa lainlaing mga apartment aron dili sila magkasumpaki ug ma-configure ang mga router ingon mga kliyente sa OpenVPN.
Ang mosunod nga mga router IP address ug DHCP server ranges gipili:

  • 192.168.10.1 nga adunay usa ka range 192.168.10.2 - 192.168.10.80 para sa server
  • 192.168.10.100 nga adunay usa ka range 192.168.10.101 - 192.168.10.149 alang sa usa ka router sa apartment No. 2
  • 192.168.10.150 nga adunay usa ka range 192.168.10.151 - 192.168.10.199 alang sa usa ka router sa apartment No. 3

Kinahanglan usab nga i-assign kini nga mga adres sa mga kliyente nga router sa OpenVPN server pinaagi sa pagdugang sa linya sa pag-configure niini:

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

ug pagdugang sa mosunod nga mga linya sa /etc/openvpn/ipp.txt file:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

diin ang flat1_id ug flat2_id mao ang mga ngalan sa device nga gipiho sa paghimo og mga sertipiko alang sa pagkonektar sa OpenVPN

Sunod, ang mga kliyente sa OpenVPN gi-configure sa mga router, ang tap0 nga mga aparato sa duha gidugang sa br-lan bridge. Niini nga yugto, ang tanan ingon og naa na, tungod kay ang tanan nga tulo nga mga network nagkita sa usag usa ug nagtrabaho sa tibuuk. Bisan pa, usa ka dili kaayo nindot nga detalye ang nahimo: usahay ang mga aparato makakuha usa ka IP address nga dili gikan sa ilang router, uban ang tanan nga nagsunod nga mga sangputanan. Sa pipila ka mga rason, ang router sa usa sa mga apartment walay panahon sa pagtubag sa DHCPDISCOVER sa panahon ug ang device nakadawat sa sayop nga adres. Nakaamgo ko nga kinahanglan nako nga i-filter ang ingon nga mga hangyo sa tap0 sa matag usa sa mga router, apan ingon nga kini nahimo, ang mga iptables dili molihok sa usa ka aparato kung kini bahin sa usa ka tulay ug ang mga ebtable kinahanglan nga motabang kanako. Sa akong pagmahay, wala kini sa akong firmware ug kinahanglan nako nga tukuron pag-usab ang mga imahe alang sa matag aparato. Pinaagi sa pagbuhat niini ug pagdugang niini nga mga linya sa /etc/rc.local sa matag router, ang problema nasulbad:

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

Kini nga configuration milungtad sulod sa tulo ka tuig.

Bahin 2: Pagpaila sa WireGuard

Bag-ohay lang, ang Internet nagkadaghan nga naghisgot bahin sa WireGuard, nga nakadayeg sa kayano sa pag-configure niini, taas nga tulin sa pagbalhin, ubos nga ping nga adunay susama nga seguridad. Ang pagpangita alang sa dugang nga kasayuran bahin niini nagpatin-aw nga wala’y trabaho ingon usa ka miyembro sa tulay o nagtrabaho sa TCP protocol nga gisuportahan niini, nga nakapahunahuna nako nga wala’y mga alternatibo sa OpenVPN alang kanako. Mao nga gihunong nako ang pag-ila sa WireGuard.

Pipila ka adlaw ang milabay, ang balita mikaylap pinaagi sa mga kapanguhaan sa usa ka paagi o lain nga may kalabutan sa IT nga ang WireGuard sa katapusan maapil sa Linux kernel, sugod sa bersyon 5.6. Ang mga artikulo sa balita, sama sa kanunay, nagdayeg sa WireGuard. Nagpangita na usab ako mga paagi aron mapulihan ang maayong daan nga OpenVPN. Niining higayona nakasugat ko kini nga artikulo. Naghisgot kini bahin sa paghimo og Ethernet tunnel sa L3 gamit ang GRE. Kining artikuloha naghatag kanakog paglaom. Nagpabilin nga dili klaro kung unsa ang buhaton sa protocol sa UDP. Ang pagpangita nagdala kanako sa mga artikulo bahin sa paggamit sa socat inubanan sa usa ka tunel sa SSH aron ipasa ang usa ka pantalan sa UDP, bisan pa, nahibal-an nila nga kini nga pamaagi magamit lamang sa usa ka mode nga koneksyon, nga nagpasabut nga daghang mga kliyente sa VPN ang imposible. Nakahunahuna ko sa pag-set up sa usa ka VPN server sa usa ka VPS, ug pag-set up sa GRE alang sa mga kliyente, apan ingon nga kini nahimo, ang GRE wala mosuporta sa encryption, nga mosangpot sa kamatuoran nga kung ang mga ikatulo nga partido makaangkon og access sa server , ang tanan nga trapiko tali sa akong mga network naa sa ilang mga kamot nga dili gyud angay kanako.

Pag-usab, ang desisyon gihimo pabor sa sobra nga pag-encrypt, pinaagi sa paggamit sa VPN sa VPN sumala sa mosunod nga pamaagi:

Layer XNUMX VPN:
VPS Kini mao ang server uban sa internal nga adres 192.168.30.1
MS Kini mao ang kliyente VPS nga adunay internal nga adres 192.168.30.2
MK2 Kini mao ang kliyente VPS nga adunay internal nga adres 192.168.30.3
MK3 Kini mao ang kliyente VPS nga adunay internal nga adres 192.168.30.4

Layer XNUMX VPN:
MS Kini mao ang server nga adunay eksternal nga adres 192.168.30.2 ug internal nga 192.168.31.1
MK2 Kini mao ang kliyente MS nga adunay adres nga 192.168.30.2 ug adunay internal nga IP nga 192.168.31.2
MK3 Kini mao ang kliyente MS nga adunay adres nga 192.168.30.2 ug adunay internal nga IP nga 192.168.31.3

* MS - router-server sa apartment 1, MK2 - router sa apartment 2, MK3 - router sa apartment 3
* Ang mga pag-configure sa aparato gipatik sa spoiler sa katapusan sa artikulo.

Ug busa, ang mga ping sa taliwala sa mga node sa network 192.168.31.0/24 moadto, panahon na nga magpadayon sa pag-set up sa GRE tunnel. Sa wala pa kana, aron dili mawad-an sa pag-access sa mga router, angay nga i-set up ang SSH tunnels aron ipasa ang port 22 sa VPS, aron, pananglitan, ang usa ka router gikan sa apartment 10022 magamit sa port 2 sa VPS, ug usa ka Ang router gikan sa apartment 11122 mahimong magamit sa port 3 sa VPS. router gikan sa apartment XNUMX. Labing maayo nga i-configure ang pagpasa sa parehas nga sshtunnel, tungod kay kini ibalik ang tunnel kung kini mahulog.

Ang tunel gi-configure, mahimo nimong makonektar sa SSH pinaagi sa gipasa nga pantalan:

ssh root@МОЙ_VPS -p 10022

Sunod, i-disable ang OpenVPN:

/etc/init.d/openvpn stop

Karon magbutang kita og GRE tunnel sa router gikan sa apartment 2:

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

Ug idugang ang gibuhat nga interface sa tulay:

brctl addif br-lan grelan0

Himoon nato ang susamang pamaagi sa server router:

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

Ug, usab, idugang ang gibuhat nga interface sa tulay:

brctl addif br-lan grelan0

sugod niini nga higayon, ang mga ping nagsugod nga malampuson nga moadto sa bag-ong network ug ako, uban ang katagbawan, moadto sa pag-inom og kape. Dayon, aron makita kung giunsa ang network sa pikas tumoy sa wire nagtrabaho, gisulayan nako ang SSH sa usa sa mga kompyuter sa apartment 2, apan ang kliyente sa ssh nag-freeze nga wala mag-aghat kanako alang sa usa ka password. Gisulayan nako ang pagkonektar niini nga kompyuter pinaagi sa telnet sa port 22 ug tan-awa ang usa ka linya diin imong masabtan nga ang koneksyon gitukod, ang SSH server nagtubag, apan sa pipila ka rason wala kini magtanyag kanako sa pagsulod.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

Gisulayan nako ang pagkonektar niini pinaagi sa VNC ug nakita nako ang usa ka itom nga screen. Gikombinsir nako ang akong kaugalingon nga ang butang naa sa hilit nga kompyuter, tungod kay dali akong makonektar sa router gikan sa kini nga apartment gamit ang internal nga adres. Bisan pa, nakahukom ko nga i-SSH kini nga kompyuter pinaagi sa router ug natingala ako nga ang koneksyon nagmalampuson ug ang hilit nga kompyuter nagtrabaho nga maayo apan napakyas usab sa pagkonektar sa akong computer.

Gikuha nako ang grelan0 device gikan sa taytayan ug gisugdan ang OpenVPN sa router sa apartment 2 ug siguruha nga ang network nagtrabaho pag-usab ug ang mga koneksyon dili mahulog. Pagpangita Nakaabut ko sa mga forum diin ang mga tawo nagreklamo bahin sa parehas nga mga problema, diin gitambagan sila nga ipataas ang MTU. Wala dayon gisulti kay nahuman. Bisan pa, hangtod nga ang MTU gibutang sa usa ka dako nga igo nga kantidad nga 7000 alang sa mga aparato nga gretap, bisan ang nahulog nga mga koneksyon sa TCP o hinay nga pagpasa ang naobserbahan. Tungod sa taas nga MTU alang sa gretap, ang mga MTU alang sa mga koneksyon sa WireGuard sa una ug ikaduha nga lebel gitakda sa 8000 ug 7500, matag usa.

Gibuhat nako ang susama nga pag-setup sa router gikan sa apartment 3, nga ang bugtong kalainan mao nga ang ikaduha nga gretap interface nga ginganlag grelan1 gidugang sa server router, nga gidugang usab sa br-lan bridge.

Ang tanan nagtrabaho. Karon mahimo nimong ibutang ang gretap assembly sa autoload. Alang niini:

Gibutang kini nga mga linya sa /etc/rc.local sa router sa apartment 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

Gidugang kini sa /etc/rc.local sa router sa apartment 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

Ug sa 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

Pagkahuman sa pag-reboot sa mga router sa kliyente, nakit-an nako nga sa pila ka hinungdan wala sila magkonektar sa server. Ang pagkonektar sa ilang SSH (maayo na lang, na-configure nako kaniadto ang sshtunnel alang niini), nadiskobrehan nga ang WireGuard sa pipila ka rason nagmugna og ruta alang sa endpoint, samtang dili husto. Busa, alang sa 192.168.30.2, ang ruta nga lamesa gipiho sa ruta nga lamesa pinaagi sa pppoe-wan interface, nga mao, pinaagi sa Internet, bisan kung ang ruta niini kinahanglan nga gitumong pinaagi sa wg0 interface. Human sa pagtangtang niini nga ruta, ang koneksyon gipahiuli. Wala koy nakit-an nga mga instruksyon bisan asa kung unsaon pagpugos ang WireGuard nga dili paghimo niini nga mga rota. Dugang pa, wala ako makasabut kung kini usa ka bahin sa OpenWRT, o sa WireGuard mismo. Kung dili kinahanglan nga atubangon kini nga problema sa dugay nga panahon, gidugang ra nako ang duha nga mga router sa usa ka script nga gi-loop sa usa ka timer, usa ka linya nga nagtangtang sa kini nga ruta:

route del 192.168.30.2

Pagsumada

Wala pa nako makab-ot ang usa ka kompleto nga pagsalikway sa OpenVPN, tungod kay usahay kinahanglan nako nga magkonektar sa usa ka bag-ong network gikan sa usa ka laptop o telepono, ug ang pag-set up sa usa ka gretap device sa kanila sa kasagaran imposible, apan bisan pa niini, nakakuha ako usa ka bentaha sa pagbalhin sa datos. ang katulin tali sa mga apartment ug, pananglitan, ang paggamit sa VNC dili na makahasol. Ang ping mikunhod gamay, apan nahimong mas lig-on:

Kung gigamit ang 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

Kung gigamit ang 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

Kasagaran kini apektado sa taas nga ping sa VPS nga gibana-bana nga 61.5ms

Bisan pa, ang katulin miuswag pag-ayo. Mao nga, sa usa ka apartment nga adunay usa ka router-server, ako adunay usa ka tulin nga koneksyon sa Internet nga 30 Mbps, ug sa ubang mga apartment, 5 Mbps. Sa samang higayon, samtang naggamit sa OpenVPN, dili nako makab-ot ang data transfer rate tali sa mga network nga labaw sa 3,8 Mbps sumala sa iperf, samtang ang WireGuard "nagbomba" niini ngadto sa samang 5 Mbps.

Pag-configure sa WireGuard sa 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

WireGuard configuration sa MS (gidugang sa /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'

Ang configuration sa WireGuard sa MK2 (gidugang sa /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'

Ang configuration sa WireGuard sa MK3 (gidugang sa /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'

Sa gihulagway nga mga pag-configure alang sa ikaduha nga lebel sa VPN, akong gipiho ang port 51821 sa mga kliyente sa WireGuard. Sa teorya, dili kini kinahanglan, tungod kay ang kliyente magtukod usa ka koneksyon gikan sa bisan unsang libre nga dili pribilihiyo nga pantalan, apan gihimo nako kini aron ang tanan nga umaabot nga koneksyon mahimong ihikaw sa wg0 nga mga interface sa tanan nga mga router, gawas sa umaabot nga mga koneksyon sa UDP sa port 51821.

Nanghinaut ko nga ang artikulo mahimong mapuslanon sa usa ka tawo.

PS Usab, gusto nakong ipaambit ang akong script nga nagpadala kanako og PUSH notification sa akong telepono sa WirePusher nga aplikasyon kon adunay bag-ong device nga makita sa akong network. Ania ang usa ka link sa script: github.com/r0ck3r/device_discover.

UPDATE: OpenVPN server ug configuration sa mga kliyente

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

Kliyente sa 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

Gigamit nako ang sayon-rsa aron makamugna og mga sertipiko.

Source: www.habr.com

Idugang sa usa ka comment