Pospešitev OpenVPN na usmerjevalniku Openwrt. Alternativna različica brez spajkalnika in strojnega ekstremizma

Pospešitev OpenVPN na usmerjevalniku Openwrt. Alternativna različica brez spajkalnika in strojnega ekstremizma

Pozdravljeni vsi, pred kratkim sem prebral stari članek o tem, kako lahko pospešite OpenVPN na usmerjevalniku s prenosom šifriranja na ločen kos strojne opreme, ki je spajkan v samem usmerjevalniku. Imam podoben primer kot avtor - TP-Link WDR3500 s 128 megabajti RAM-a in slabim procesorjem, ki popolnoma ne zmore tunelskega šifriranja. Vendar absolutno nisem želel priti v usmerjevalnik s spajkalnikom. Spodaj je moja izkušnja s premikanjem OpenVPN na ločen kos strojne opreme z varnostno kopijo na usmerjevalniku v primeru nesreče.

Naloga

Obstaja usmerjevalnik TP-Link WDR3500 in Orange Pi Zero H2. Želimo, da Orange Pi šifrira tunele kot običajno, in če se mu kaj zgodi, se bo obdelava VPN vrnila nazaj v usmerjevalnik. Vse nastavitve požarnega zidu na usmerjevalniku bi morale delovati kot prej. In na splošno mora biti dodajanje dodatne strojne opreme transparentno in neopazno za vse. OpenVPN deluje preko TCP, adapter TAP je v načinu mostu (server-bridge).

odločitev

Namesto povezave prek USB-ja sem se odločil uporabiti ena vrata usmerjevalnika in povezati vsa podomrežja, ki imajo most VPN, na Orange Pi. Izkazalo se je, da bo strojna oprema fizično visela v istih omrežjih kot strežnik VPN na usmerjevalniku. Nato na Orange Pi namestimo popolnoma enake strežnike, na usmerjevalniku pa nastavimo nekakšen proxy, da pošilja vse dohodne povezave na zunanji strežnik, in če je Orange Pi mrtev ali nedosegljiv, na notranji nadomestni strežnik. Vzel sem HAProxy.

Izkazalo se je takole:

  1. Pride stranka
  2. Če zunanji strežnik kot prej ni na voljo, se povezava vzpostavi z notranjim strežnikom
  3. Če je na voljo, stranko sprejme Orange Pi
  4. VPN na Orange Pi dešifrira pakete in jih izpljune nazaj v usmerjevalnik
  5. Usmerjevalnik jih nekam usmeri

Primer izvedbe

Torej, recimo, da imamo na usmerjevalniku dve omrežji - glavno (1) in gostujoče (2), za vsako od njih obstaja strežnik OpenVPN za zunanjo povezavo.

Konfiguracija omrežja

Obe omrežji moramo usmeriti skozi ena vrata, zato ustvarimo 2 VLAN-a.

Na usmerjevalniku v razdelku Network/Switch ustvarite VLAN (na primer 1 in 2) in jih omogočite v označenem načinu na želenih vratih, dodajte novo ustvarjena eth0.1 in eth0.2 v ustrezna omrežja (npr. dodajte jih v brigde).

Na Orange Pi ustvarimo dva vmesnika VLAN (imam Archlinux ARM + netctl):

/etc/netctl/vlan-main

Description='Main VLAN on eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no

/etc/netctl/vlan-guest

Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

In zanje takoj ustvarimo dva mostova:

/etc/netctl/br-main

Description="Main Bridge connection"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp

/etc/netctl/br-guest

Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

Omogoči samodejni zagon za vse 4 profile (netctl enable). Po ponovnem zagonu bo Orange Pi visel na dveh zahtevanih omrežjih. Naslove vmesnikov na Orange Pi konfiguriramo v Static Leases na usmerjevalniku.

ip addr show

4: vlan-main@eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-main state UP group default qlen 1000
    link/ether 02:42:f0:f8:23:c8 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::42:f0ff:fef8:23c8/64 scope link 
       valid_lft forever preferred_lft forever

5: vlan-guest@eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-guest state UP group default qlen 1000
    link/ether 02:42:f0:f8:23:c8 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::42:f0ff:fef8:23c8/64 scope link 
       valid_lft forever preferred_lft forever

6: br-main: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:c7:0f:89:71:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global dynamic noprefixroute br-main
       valid_lft 29379sec preferred_lft 21439sec
    inet6 fe80::50c7:fff:fe89:716e/64 scope link 
       valid_lft forever preferred_lft forever

7: br-guest: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ee:ea:19:31:34:32 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.3/24 brd 192.168.2.255 scope global br-guest
       valid_lft forever preferred_lft forever
    inet6 fe80::ecea:19ff:fe31:3432/64 scope link 
       valid_lft forever preferred_lft forever

Nastavitev VPN

Nato kopiramo nastavitve za OpenVPN in ključe iz usmerjevalnika. Nastavitve običajno najdete v /tmp/etc/openvpn*.conf

Privzeto openvpn deluje v načinu TAP in strežnik-bridge ohranja svoj vmesnik nedejaven. Da bo vse delovalo, morate dodati skript, ki se zažene, ko je povezava aktivirana.

/etc/openvpn/main.conf

dev vpn-main
dev-type tap

client-to-client
persist-key
persist-tun
ca /etc/openvpn/main/ca.crt
cert /etc/openvpn/main/main.crt
cipher AES-256-CBC
comp-lzo yes
dh /etc/openvpn/main/dh2048.pem
ifconfig-pool-persist /etc/openvpn/ipp_main.txt
keepalive 10 60
key /etc/openvpn/main/main.key
port 443
proto tcp
push "redirect-gateway"
push "dhcp-option DNS 192.168.1.1"
server-bridge 192.168.1.3 255.255.255.0 192.168.1.200 192.168.1.229
status /tmp/openvpn.main.status
verb 3

setenv profile_name main
script-security 2
up /etc/openvpn/vpn-up.sh

/etc/openvpn/vpn-up.sh

#!/bin/sh

ifconfig vpn-${profile_name} up
brctl addif br-${profile_name} vpn-${profile_name}

Kot rezultat, takoj ko pride do povezave, bo vmesnik vpn-main dodan v br-main. Za mrežo gostov - podobno, do imena in naslova vmesnika v mostu strežnika.

Zunanje usmerjanje zahtev in proxy

Na tem koraku je Orange Pi že sposoben sprejemati povezave in povezovati odjemalce z zahtevanimi omrežji. Vse, kar ostane, je konfiguracija proxyja dohodnih povezav na usmerjevalniku.

Strežnike VPN usmerjevalnika prenesemo na druga vrata, namestimo HAProxy na usmerjevalnik in konfiguriramo:

/etc/haproxy.cfg

global
        maxconn 256
        uid 0
        gid 0
        daemon

defaults
        retries 1
        contimeout 1000
        option splice-auto

listen guest_vpn
        bind :444
        mode tcp
        server 0-orange 192.168.2.3:444 check
        server 1-local  127.0.0.1:4444 check backup

listen main_vpn
        bind :443
        mode tcp
        server 0-orange 192.168.1.3:443 check
        server 1-local  127.0.0.1:4443 check backup

Uživajte

Če bo šlo vse po načrtih, bodo odjemalci prešli na Orange Pi in procesor usmerjevalnika se ne bo več segreval, hitrost VPN pa se bo znatno povečala. Hkrati bodo vsa omrežna pravila, ki so registrirana na usmerjevalniku, ostala pomembna. V primeru nesreče na Orange Pi bo ta odpadel in HAProxy bo odjemalce prenesel na lokalne strežnike.

Hvala za vašo pozornost, predlogi in popravki so dobrodošli.

Vir: www.habr.com

Dodaj komentar