Pinapabilis ang OpenVPN sa isang Openwrt router. Alternatibong bersyon na walang paghihinang na bakal at hardware extremism

Pinapabilis ang OpenVPN sa isang Openwrt router. Alternatibong bersyon na walang paghihinang na bakal at hardware extremism

Hello everyone, nabasa ko kamakailan lumang artikulo tungkol sa kung paano mo mapapabilis ang OpenVPN sa isang router sa pamamagitan ng paglilipat ng encryption sa isang hiwalay na piraso ng hardware, na ibinebenta sa loob mismo ng router. Mayroon akong katulad na kaso sa may-akda - TP-Link WDR3500 na may 128 megabytes ng RAM at isang mahinang processor na ganap na hindi makayanan ang pag-encrypt ng tunnel. Gayunpaman, talagang hindi ko nais na makapasok sa router gamit ang isang panghinang na bakal. Nasa ibaba ang aking karanasan sa paglipat ng OpenVPN sa isang hiwalay na piraso ng hardware na may backup sa router kung sakaling magkaroon ng aksidente.

Gawain

Mayroong TP-Link WDR3500 router at isang Orange Pi Zero H2. Gusto naming i-encrypt ng Orange Pi ang mga tunnel gaya ng dati, at kung may mangyari dito, babalik ang pagproseso ng VPN sa router. Ang lahat ng mga setting ng firewall sa router ay dapat gumana tulad ng dati. At sa pangkalahatan, ang pagdaragdag ng karagdagang hardware ay dapat na transparent at hindi napapansin ng lahat. Ang OpenVPN ay gumagana sa TCP, ang TAP adapter ay nasa bridge mode (server-bridge).

desisyon

Sa halip na kumonekta sa pamamagitan ng USB, nagpasya akong gumamit ng isang port ng router at ikonekta ang lahat ng mga subnet na may VPN bridge sa Orange Pi. Lumalabas na pisikal na mag-hang ang hardware sa parehong mga network gaya ng VPN server sa router. Pagkatapos nito, nag-i-install kami ng eksaktong parehong mga server sa Orange Pi, at sa router ay nag-set up kami ng ilang uri ng proxy upang maipadala nito ang lahat ng mga papasok na koneksyon sa panlabas na server, at kung ang Orange Pi ay patay o hindi magagamit, pagkatapos ay sa panloob na fallback server. Kumuha ako ng HAProxy.

Ito ay tulad nito:

  1. May dumating na kliyente
  2. Kung ang panlabas na server ay hindi magagamit, tulad ng dati, ang koneksyon ay mapupunta sa panloob na server
  3. Kung magagamit, ang kliyente ay tinatanggap ng Orange Pi
  4. Ang VPN sa Orange Pi ay nagde-decrypt ng mga packet at nilalabas ang mga ito pabalik sa router
  5. Niruruta sila ng router sa isang lugar

Halimbawa ng pagpapatupad

Kaya, sabihin nating mayroon kaming dalawang network sa router - pangunahing(1) at bisita (2), para sa bawat isa sa kanila ay mayroong isang OpenVPN server para sa pagkonekta sa labas.

Configuration ng network

Kailangan naming iruta ang parehong network sa isang port, kaya gumawa kami ng 2 VLAN.

Sa router, sa seksyong Network/Switch, lumikha ng mga VLAN (halimbawa 1 at 2) at paganahin ang mga ito sa naka-tag na mode sa nais na port, idagdag ang bagong likhang eth0.1 at eth0.2 sa mga kaukulang network (halimbawa, idagdag ang mga ito sa brigde).

Sa Orange Pi lumikha kami ng dalawang interface ng VLAN (mayroon akong 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

At agad kaming lumikha ng dalawang tulay para sa kanila:

/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

Paganahin ang autostart para sa lahat ng 4 na profile (netctl enable). Ngayon pagkatapos ng pag-reboot, ang Orange Pi ay mag-hang sa dalawang kinakailangang network. Kino-configure namin ang mga address ng interface sa Orange Pi sa Static Leases sa router.

ipakita ang 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

Pag-setup ng VPN

Susunod, kinopya namin ang mga setting para sa OpenVPN at mga susi mula sa router. Karaniwang makikita ang mga setting sa /tmp/etc/openvpn*.conf

Bilang default, pinapanatiling hindi aktibo ang interface ng openvpn sa TAP mode at server-bridge. Para gumana ang lahat, kailangan mong magdagdag ng script na tumatakbo kapag na-activate ang koneksyon.

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

Bilang resulta, sa sandaling mangyari ang koneksyon, ang vpn-main interface ay idaragdag sa br-main. Para sa grid ng bisita - katulad nito, hanggang sa pangalan ng interface at address sa server-bridge.

Pagruruta ng mga kahilingan sa labas at pag-proxy

Sa hakbang na ito, ang Orange Pi ay nakakatanggap na ng mga koneksyon at nakakakonekta ng mga kliyente sa mga kinakailangang network. Ang natitira na lang ay i-configure ang proxying ng mga papasok na koneksyon sa router.

Inilipat namin ang mga server ng VPN ng router sa iba pang mga port, i-install ang HAProxy sa router at i-configure ang:

/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

Enjoy

Kung ang lahat ay naaayon sa plano, ang mga kliyente ay lilipat sa Orange Pi at ang processor ng router ay hindi na mag-iinit, at ang bilis ng VPN ay tataas nang malaki. Kasabay nito, ang lahat ng mga panuntunan sa network na nakarehistro sa router ay mananatiling may kaugnayan. Kung sakaling magkaroon ng aksidente sa Orange Pi, mahuhulog ito at ililipat ng HAProxy ang mga kliyente sa mga lokal na server.

Salamat sa iyong pansin, mga mungkahi at pagwawasto ay malugod na tinatanggap.

Pinagmulan: www.habr.com

Magdagdag ng komento