Sveiki visiem, nesen izlasīju
Uzdevums
Ir TP-Link WDR3500 maršrutētājs un Orange Pi Zero H2. Mēs vēlamies, lai Orange Pi šifrētu tuneļus kā parasti, un, ja ar to kaut kas notiks, VPN apstrāde atgriezīsies maršrutētājā. Visiem maršrutētāja ugunsmūra iestatījumiem jādarbojas kā iepriekš. Un kopumā papildu aparatūras pievienošanai vajadzētu būt caurspīdīgai un visiem nepamanāmai. OpenVPN darbojas, izmantojot TCP, TAP adapteris ir tilta režīmā (servera tilts).
Šķīdums
Tā vietā, lai izveidotu savienojumu, izmantojot USB, es nolēmu izmantot vienu maršrutētāja portu un savienot visus apakštīklus, kuriem ir VPN tilts, ar Orange Pi. Izrādās, ka aparatūra fiziski karāsies tajos pašos tīklos, kur maršrutētāja VPN serveris. Pēc tam mēs instalējam tieši tādus pašus serverus uz Orange Pi un maršrutētājā iestatām sava veida starpniekserveri, lai tas nosūtītu visus ienākošos savienojumus uz ārējo serveri un, ja Orange Pi ir miris vai nav pieejams, tad uz iekšējais rezerves serveris. Es paņēmu HAProxy.
Tas izrādās šādi:
- Ierodas klients
- Ja ārējais serveris nav pieejams, tāpat kā iepriekš, savienojums tiek izveidots ar iekšējo serveri
- Ja iespējams, klientu pieņem Orange Pi
- Orange Pi VPN atšifrē paketes un izspiež tās atpakaļ maršrutētājā
- Maršrutētājs tos kaut kur novirza
Īstenošanas piemērs
Tātad, pieņemsim, ka mums maršrutētājā ir divi tīkli - galvenais (1) un viesu (2), katram no tiem ir OpenVPN serveris ārējai savienošanai.
Tīkla konfigurācija
Mums ir jāmaršrutē abi tīkli caur vienu portu, tāpēc mēs izveidojam 2 VLAN.
Maršrutētāja sadaļā Network/Switch izveidojiet VLAN (piemēram, 1 un 2) un iespējojiet tos marķēšanas režīmā vajadzīgajā portā, pievienojiet jaunizveidotos eth0.1 un eth0.2 attiecīgajiem tīkliem (piemēram, pievienot tos tiltam).
Orange Pi mēs izveidojam divas VLAN saskarnes (man ir 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
Un mēs viņiem uzreiz izveidojam divus 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
Iespējot automātisko palaišanu visiem 4 profiliem (netctl enable). Tagad pēc atsāknēšanas Orange Pi paliks uz diviem nepieciešamajiem tīkliem. Mēs konfigurējam Orange Pi interfeisa adreses maršrutētāja statiskajā nomā.
ip addr šovs
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 iestatīšana
Pēc tam mēs nokopējam OpenVPN iestatījumus un atslēgas no maršrutētāja. Iestatījumus parasti var atrast /tmp/etc/openvpn*.conf
Pēc noklusējuma openvpn, kas darbojas TAP režīmā, un servera tilts saglabā savu saskarni neaktīvu. Lai viss darbotos, jāpievieno skripts, kas darbojas, kad savienojums ir aktivizēts.
/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}
Tā rezultātā, tiklīdz tiks izveidots savienojums, vpn-main saskarne tiks pievienota br-main. Viesu tīklam - līdzīgi līdz interfeisa nosaukumam un adresei servera tiltā.
Maršrutēšanas pieprasījumi ārēji un starpniekserveri
Šajā solī Orange Pi jau spēj pieņemt savienojumus un savienot klientus ar nepieciešamajiem tīkliem. Atliek tikai konfigurēt maršrutētājā ienākošo savienojumu starpniekserveri.
Mēs pārsūtām maršrutētāja VPN serverus uz citiem portiem, maršrutētājā instalējam HAProxy un konfigurējam:
/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
Izbaudi
Ja viss noritēja saskaņā ar plānu, klienti pārslēgsies uz Orange Pi un maršrutētāja procesors vairs neuzsils, un VPN ātrums ievērojami palielināsies. Tajā pašā laikā visi maršrutētājā reģistrētie tīkla noteikumi paliks aktuāli. Negadījuma gadījumā ar Orange Pi tas nokritīs un HAProxy pārsūtīs klientus uz vietējiem serveriem.
Paldies par uzmanību, tiek gaidīti ieteikumi un labojumi.
Avots: www.habr.com