
Ahojte, nedávno som prečítal o tom, ako urýchliť OpenVPN na routeri presunutím šifrovania na samostatné zariadenie, ktoré je pripájané vo vnútri samotného routera. Mám podobný prípad ako autor — TP-Link WDR3500 s 128 megabajtmi RAM a slabým procesorom, ktorý si s šifrovaním tunelov nedokáže poradiť. Avšak, zasahovať do routera so spájkovačkou sa mi rozhodne nechcelo. Pod katom nájdete moju skúsenosť s presunom OpenVPN na samostatné zariadenie s rezervovaním na routeri pre prípad havárie.
Úloha
Mám router TP-Link WDR3500 a Orange Pi Zero H2. Chceme, aby sa šifrovaním tunelov zaoberal Orange Pi, pričom ak sa mu niečo stane, spracovanie VPN sa vráti späť na router. Všetky nastavenia firewallu na routeri musia fungovať ako predtým. A celkovo by malo pridať ďalšie zariadenie pre všetkých prejsť nepozorovane a hladko. OpenVPN funguje cez TCP, adaptér TAP v režime mosta (server-bridge).
Riešenie
Namiesto pripojenia cez USB som sa rozhodol využiť jeden port routera a previesť ním na Orange Pi všetky podsiete, v ktorých je VPN most. Takže zariadenie bude fyzicky pripojené v tých istých sieťach, ako sú VPN servery na routeri. Potom nasadzujeme presne také isté servery na Orange Pi a na routeri nastavíme nejaký proxy, aby odovzdával všetky prichádzajúce pripojenia na externý server, a ak Orange Pi zlyhá alebo nie je dostupný — potom na interný záložný server. Vybral som si HAProxy.
Vyzerá to takto:
- Prichádza klient
- Ak externý server nie je dostupný — ako predtým, pripojenie ide na interný server
- Ak je dostupný — klienta prijíma Orange Pi
- VPN na Orange Pi dešifruje pakety a vypľuje ich späť do routera
- Router ich smeruje niekam
Príklad realizácie
Takže, predpokladajme, že máme na routeri dve siete — main(1) a guest(2), pre každú z nich existuje OpenVPN server na pripojenie zvonku.
Konfigurácia siete
Musíme previesť obidve siete cez jeden port, preto vytvárame 2 VLANy.
Na routeri v sekcii Network/Switch vytvárame VLANy (napríklad 1 a 2) a zapneme ich v režime tagged na potrebnom porte, pridáme novo vytvorené eth0.1 a eth0.2 k zodpovedajúcim sieťam (napríklad ich pridáme do brigde).
Na Orange Pi vytvárame dva VLAN rozhrania (mám Archlinux ARM + netctl):
/etc/netctl/vlan-main
Description='Hlavný VLAN na eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no
/etc/netctl/vlan-guest
Description='Hostiteľský VLAN na eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no
A okamžite vytvárame dva brigde pre ne:
/etc/netctl/br-main
Popis="Hlavné pripojenie mostu"
Rozhranie=br-main
Pripojenie=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp
/etc/netctl/br-guest
Popis="Pripojenie hosťa mostu"
Rozhranie=br-guest
Pripojenie=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp
Aktivujeme automatické spúšťanie pre všetky 4 profily (netctl enable). Teraz po reštarte Orange Pi bude pripojené k dvom požadovaným sieťam. Adresy rozhraní na Orange Pi nastavujeme v Static Leases na routeri.
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
Nastavenie VPN
Ďalej skopírujeme z routera nastavenia pre OpenVPN a kľúče. Nastavenia zvyčajne môžete získať v /tmp/etc/openvpn*.conf
Predvolene openvpn, spustený v režime TAP a server-bridge, udržuje svoje rozhranie neaktívne. Aby to všetko fungovalo, musíte pridať skript, ktorý sa spustí pri aktivácii pripojenia.
/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}
Výsledkom je, že akonáhle dôjde k pripojeniu, rozhranie vpn-main bude pridané do br-main. Pre sieť hosťa — analogicky so zmenou názvu rozhrania a adresy v server-bridge.
Routovanie požiadaviek z vonku a proxy
V tomto kroku už Orange Pi vie prijímať pripojenia a vpúšťať klientov do požadovaných sietí. Ostáva nastaviť proxy pre prichádzajúce pripojenia na routeri.
Premiestňujeme routerové VPN servery na iné porty, inštalujeme na router HAProxy a nastavujeme:
/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žívame si
Ak všetko prebehlo podľa plánu, klienti prejdú na Orange Pi a procesor routéra sa už nebude prehrievať, pričom rýchlosť VPN sa výrazne zvýši. Všetky sieťové pravidlá predpísané na routéri tak ostanú platné. V prípade poruchy Orange Pi sa odpojí a HAProxy presmeruje klientov na lokálne servery.
Ďakujeme za pozornosť, vaše názory a opravy sú vítané.
Zdroj: habr.com
