Забрзување на OpenVPN на рутер Openwrt. Алтернативна верзија без рачка за лемење и хардверски екстремизам

Забрзување на OpenVPN на рутер Openwrt. Алтернативна верзија без рачка за лемење и хардверски екстремизам

Здраво на сите, неодамна прочитав стара статија за тоа како можете да го забрзате OpenVPN на рутер со пренесување на шифрирање на посебен дел од хардверот, кој е залемен во самиот рутер. Имам сличен случај на авторот - TP-Link WDR3500 со 128 мегабајти RAM и лош процесор кој целосно не може да се справи со шифрирањето на тунелот. Сепак, апсолутно не сакав да влезам во рутерот со рачка за лемење. Подолу е моето искуство за преместување на OpenVPN на посебен дел од хардверот со резервна копија на рутерот во случај на несреќа.

Задача

Има рутер TP-Link WDR3500 и Orange Pi Zero H2. Сакаме Orange Pi да ги шифрира тунелите како и обично, и ако нешто му се случи, обработката VPN ќе се врати назад во рутерот. Сите поставки за заштитен ѕид на рутерот треба да работат како порано. И воопшто, додавањето дополнителен хардвер треба да биде транспарентно и незабележливо за секого. OpenVPN работи преку TCP, TAP адаптерот е во режим на мост (сервер-мост).

Решение

Наместо да се поврзувам преку USB, решив да користам една порта од рутерот и да ги поврзам сите подмрежи кои имаат VPN мост со Orange Pi. Излегува дека хардверот физички ќе виси во истите мрежи како VPN серверот на рутерот. После тоа, ги инсталираме токму истите сервери на Orange Pi, а на рутерот поставуваме некаков прокси за да ги испраќа сите дојдовни врски до надворешниот сервер, а ако Orange Pi е мртов или недостапен, тогаш до внатрешен резервен сервер. Зедов HAProxy.

Излегува вака:

  1. Пристигнува клиент
  2. Ако надворешниот сервер е недостапен, како и досега, врската оди на внатрешниот сервер
  3. Доколку е достапно, клиентот е прифатен од Orange Pi
  4. VPN на Orange Pi ги дешифрира пакетите и ги плука назад во рутерот
  5. Рутерот ги насочува некаде

Пример за имплементација

Значи, да речеме дека имаме две мрежи на рутерот - main(1) и guest(2), за секоја од нив има OpenVPN сервер за надворешно поврзување.

Мрежна конфигурација

Треба да ги насочиме двете мрежи преку една порта, па креираме 2 VLAN.

На рутерот, во делот Network/Switch, креирајте VLAN (на пример 1 и 2) и овозможете ги во режим на означување на саканата порта, додајте ги новосоздадените eth0.1 и eth0.2 на соодветните мрежи (на пример, додадете ги во brigde).

На Orange Pi создаваме два VLAN интерфејси (имам 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

И ние веднаш создаваме два моста за нив:

/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

Овозможете автоматско стартување за сите 4 профили (овозможи netctl). Сега по рестартирање, Orange Pi ќе виси на двете потребни мрежи. Ги конфигурираме адресите на интерфејсот на Orange Pi во Static Leases на рутерот.

ip addr шоу

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

Следно, ги копираме поставките за OpenVPN и клучевите од рутерот. Поставките обично може да се најдат во /tmp/etc/openvpn*.conf

Стандардно, openvpn што работи во режим TAP и сервер-мост го одржува својот интерфејс неактивен. За сè да работи, треба да додадете скрипта што работи кога врската е активирана.

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

Како резултат на тоа, штом ќе се појави врската, интерфејсот vpn-main ќе се додаде во br-main. За гостинската мрежа - слично, до името и адресата на интерфејсот во серверот-мост.

Барања за рутирање надворешно и прокси

На овој чекор, Orange Pi веќе може да прифаќа врски и да ги поврзува клиентите со потребните мрежи. Останува само да се конфигурира прокси на дојдовните врски на рутерот.

Ние ги пренесуваме серверите VPN на рутерот на други порти, инсталираме HAProxy на рутерот и конфигурираме:

/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

Уживајте

Ако сè оди според планот, клиентите ќе се префрлат на Orange Pi и процесорот на рутерот повеќе нема да се загрева, а брзината на VPN значително ќе се зголеми. Во исто време, сите мрежни правила што се регистрирани на рутерот ќе останат релевантни. Во случај на несреќа на Orange Pi, тој ќе падне и HAProxy ќе ги префрли клиентите на локални сервери.

Ви благодариме за вниманието, добредојдени се предлози и корекции.

Извор: www.habr.com

Додадете коментар