
Tere kõigile, lugesin hiljuti sellest, kuidas on võimalik kiirendada OpenVPN-i ruuteri peal, viies krüpteerimise üle eraldi riistvarale, mis on siseruuterisse joodetud. Mul on autoriga sarnane juhtum — TP-Link WDR3500, millel on 128 megabaiti RAM-i ja nõrk protsessor, mis ei suuda tunneli krüpteerimisega tõhusalt toime tulla. Siiski ei tahtnud ma ruuteri kallale jootmisriistaga minna. Allpool on minu kogemus OpenVPN-i viimisest eraldi riistvarale koos varukoopiaga ruuteris juhuks, kui midagi juhtub.
Ülesanne
Käes on TP-Link WDR3500 ja Orange Pi Zero H2. Soovime, et tunnelite krüpteerimisega tegeleb Orange Pi, samas kui juhul, kui temaga midagi juhtub, naaseb töö VPN uuesti ruuterile. Kõik tulemüüri seaded ruuteris peavad tööle nagu varem. Üldiselt peaks täiendava riistvara lisamine olema kõigile läbipaistev ja märkamatud. OpenVPN töötab TCP protokollil, TAP adapter töötab silla režiimis (server-sild).
Lahendus
USB-ühenduse asemel otsustasin kasutada ühte ruuteri porti ja suunata selle kaudu Orange Pi kõik alamvõrgud, kus asub VPN sild. See tähendab, et seadmed on füüsiliselt ühendatud samadesse võrkudesse nagu ruuteri VPN serverid. Seejärel loome Orange Pi's täiesti samad serverid, samas kui ruuteris seadistame mingi proksi, et see suunaks kõik sissetulevad ühendused välisele serverile, ja kui Orange Pi on surnud või juurdepääsetav ei ole — siis sisemisele tagavaraserverile. Mina kasutasin HAProxy.
Nii see välja käib:
- Kliendilt tuleb ühendus
- Kui väline server ei ole saadaval — siis nagu varem, ühendus läheb sisemisele serverile
- Kui server on kätte saadav — võtab Orange Pi kliendi vastu
- VPN Orange Pi's dekodeerib paketid ja saadab need tagasi ruuterisse
- Ruuter suunab need kuhugi mujale
Rakenduse näide
Oletame, et meil on ruuteris kaks võrku — main(1) ja guest(2), igaühel neist on OpenVPN server välistest ühendustest.
Võrgu konfiguratsioon
Kuna peame mõlemad võrgud ühe pordi kaudu suunama, loome 2 VLAN'i.
Routteril jaotises Network/Switch loome VLAN'e (näiteks 1 ja 2) ja aktiveerime need sildistatud režiimis soovitud porti, lisame uued eth0.1 ja eth0.2 vastavatesse võrkudesse (näiteks lisame sillale).
Orange Pi'l loome kaks VLAN-ühendust (mul on Archlinux ARM + netctl):
/etc/netctl/vlan-main
Description='Peamine VLAN eth0-l'
Interface=vlan-peamine
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=ei
/etc/netctl/vlan-guest
Description='Külastaja VLAN eth0-l'
Interface=vlan-külastaja
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=ei
Ja loome kohe kaks sillat nende jaoks:
/etc/netctl/br-main
Description="Peamine sillaliideseühendus"
Interface=br-peamine
Connection=bridge
BindsToInterfaces=(vlan-peamine)
IP=dhcp
/etc/netctl/br-guest
Description="Külastaja sillaliideseühendus"
Interface=br-külastaja
Connection=bridge
BindsToInterfaces=(vlan-külastaja)
IP=dhcp
Aktiveerime automaatse käivitamise kõikidele 4 profiilile (netctl enable). Nüüd pärast Orange Pi taaskäivitamist jääb see kinni kahes nõutud võrgus. Orange Pi liideste aadressid seadistame ruuteri Static Leases-se.
ip addr show
4: vlan-main@eth0: 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: 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: 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: 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 seadmine
Jätkame роутерist OpenVPN-i seadeid ja võtmeid. Seadeid saab tavaliselt võtta /tmp/etc/openvpn*.conf
Vaikimisi openvpn, töötab TAP- ja server-sildirežiimis, hoiab oma liidest mitteaktiivsena. Kõik peab tööle saama, tuleb lisada skript, mis käivitatakse ühenduse aktiveerimisel.
/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}
Niipea, kui ühendus luuakse, lisatakse vpn-main liides br-main'i. Külastusvõrgule kehtib sama põhimõte, seda täpselt liidese nime ja aadressi osas server-sillal.
Väliste päringute suunamine ja vahendamine
Selle sammu jooksul on Orange Pi juba suuteline võtma ühendusi ja suunama kliente õigesse võrgusüsteemi. Järele on jäänud seadistada sisse tulevate ühenduste vahendamine ruuteris.
Kandke ruuterite VPN serverid üle teistele portidele, seadke ruuterile HAProxy ja seadistage:
/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
Naudi
Kui kõik läheb plaanipäraselt, suunduvad kliendid Orange Pi juurde ning ruuteri protsessor ei kuumene enam ja VPN-kiirus tõuseb oluliselt. Samuti jäävad kehtima kõik võrgu reeglid, mis on ruuteris määratletud. Juhul kui Orange Pi avarii korral lakkab see töötamast, suunab HAProxy kliendid kohalikesse serveritesse.
Täname tähelepanu eest, ettepanekud ja parandused on oodatud.
Allikas: habr.com
