OpenVPN pagreitinimas „Openwrt“ maršrutizatoriuje. Alternatyvi versija be lituoklio ir techninės įrangos ekstremizmo

OpenVPN pagreitinimas „Openwrt“ maršrutizatoriuje. Alternatyvi versija be lituoklio ir techninės įrangos ekstremizmo

Sveiki visi, neseniai skaičiau senas straipsnis apie tai, kaip galite pagreitinti „OpenVPN“ maršrutizatoriuje, perkeldami šifravimą į atskirą aparatinės įrangos dalį, kuri yra lituojama pačiame maršrutizatoriuje. Turiu panašų atvejį kaip autorius - TP-Link WDR3500 su 128 megabaitų RAM ir prastu procesoriumi, kuris visiškai nesusidoroja su tuneliniu šifravimu. Tačiau aš visiškai nenorėjau patekti į maršrutizatorių su lituokliu. Žemiau pateikiama mano patirtis perkeliant „OpenVPN“ į atskirą aparatinę įrangą su atsargine maršruto parinktuvo kopija avarijos atveju.

Užduotis

Yra TP-Link WDR3500 maršrutizatorius ir Orange Pi Zero H2. Norime, kad „Orange Pi“ kaip įprastai užšifruotų tunelius, o jei kas nors atsitiks, VPN apdorojimas grįš į maršrutizatorių. Visi maršrutizatoriaus ugniasienės nustatymai turėtų veikti kaip anksčiau. Ir apskritai papildomos techninės įrangos pridėjimas turėtų būti skaidrus ir visiems nepastebimas. OpenVPN veikia per TCP, TAP adapteris yra tilto režimu (serveris-tiltas).

sprendimas

Užuot prisijungęs per USB, nusprendžiau naudoti vieną maršrutizatoriaus prievadą ir visus potinklius, kuriuose yra VPN tiltas, prijungti prie Orange Pi. Pasirodo, aparatinė įranga fiziškai kabės tuose pačiuose tinkluose kaip ir maršrutizatoriaus VPN serveris. Po to „Orange Pi“ įdiegiame lygiai tuos pačius serverius, o maršrutizatoriuje nustatome tam tikrą tarpinį serverį, kad jis siųstų visus įeinančius ryšius į išorinį serverį, o jei „Orange Pi“ neveikia arba nepasiekiamas, tada į vidinis atsarginis serveris. Aš paėmiau HAProxy.

Pasirodo taip:

  1. Ateina klientas
  2. Jei išorinis serveris nepasiekiamas, kaip ir anksčiau, jungiamasi prie vidinio serverio
  3. Jei yra, klientą priima „Orange Pi“.
  4. VPN „Orange Pi“ iššifruoja paketus ir išsiunčia juos atgal į maršrutizatorių
  5. Maršrutizatorius juos kur nors nukreipia

Įgyvendinimo pavyzdys

Taigi, maršrutizatoriuje turėkime du tinklus - pagrindinį (1) ir svečią (2), kiekvienam iš jų yra OpenVPN serveris, skirtas išoriniam prisijungimui.

Tinklo konfigūracija

Turime nukreipti abu tinklus per vieną prievadą, todėl sukuriame 2 VLAN.

Maršrutizatoriaus skiltyje Tinklas / jungiklis sukurkite VLAN (pvz., 1 ir 2) ir įjunkite juos pažymėtu režimu norimame prievade, pridėkite naujai sukurtus eth0.1 ir eth0.2 prie atitinkamų tinklų (pvz., pridėkite juos prie tilto).

„Orange Pi“ sukuriame dvi VLAN sąsajas (turiu „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

Ir mes iškart sukuriame jiems du tiltus:

/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

Įgalinti visų 4 profilių automatinį paleidimą (netctl enable). Dabar po perkrovimo „Orange Pi“ kabės dviejuose reikiamuose tinkluose. Konfigūruojame sąsajos adresus „Orange Pi“ maršrutizatoriaus statinėse nuomos sutartyse.

ip addr šou

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

VPN sąranka

Tada nukopijuojame OpenVPN nustatymus ir raktus iš maršrutizatoriaus. Paprastai nustatymus galima rasti /tmp/etc/openvpn*.conf

Pagal numatytuosius nustatymus, openvpn veikia TAP režimu ir serverio tiltas išlaiko savo sąsają neaktyvią. Kad viskas veiktų, reikia pridėti scenarijų, kuris paleidžiamas suaktyvinus ryšį.

/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}

Dėl to, kai tik prisijungs, vpn-main sąsaja bus pridėta prie br-main. Svečių tinkleliui – panašiai iki sąsajos pavadinimo ir adreso serverio tilte.

Maršruto užklausos išorėje ir tarpinis serveris

Šiame žingsnyje Orange Pi jau gali priimti ryšius ir prijungti klientus prie reikiamų tinklų. Lieka tik sukonfigūruoti įeinančių jungčių tarpinį serverį maršrutizatoriuje.

Perkeliame maršrutizatoriaus VPN serverius į kitus prievadus, maršrutizatoriuje įdiegiame HAProxy ir sukonfigūruojame:

/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

Mėgautis

Jei viskas klostysis pagal planą, klientai persijungs į Orange Pi ir maršrutizatoriaus procesorius nebešils, o VPN greitis gerokai padidės. Tuo pačiu metu visos maršrutizatoriuje užregistruotos tinklo taisyklės išliks aktualios. Įvykus „Orange Pi“ avarijai, jis nukris ir HAProxy perkels klientus į vietinius serverius.

Dėkojame už dėmesį, laukiame pasiūlymų ir pataisymų.

Šaltinis: www.habr.com

Добавить комментарий