Pozdravljeni vsi, pred kratkim sem prebral
Naloga
Obstaja usmerjevalnik TP-Link WDR3500 in Orange Pi Zero H2. Želimo, da Orange Pi šifrira tunele kot običajno, in če se mu kaj zgodi, se bo obdelava VPN vrnila nazaj v usmerjevalnik. Vse nastavitve požarnega zidu na usmerjevalniku bi morale delovati kot prej. In na splošno mora biti dodajanje dodatne strojne opreme transparentno in neopazno za vse. OpenVPN deluje preko TCP, adapter TAP je v načinu mostu (server-bridge).
odločitev
Namesto povezave prek USB-ja sem se odločil uporabiti ena vrata usmerjevalnika in povezati vsa podomrežja, ki imajo most VPN, na Orange Pi. Izkazalo se je, da bo strojna oprema fizično visela v istih omrežjih kot strežnik VPN na usmerjevalniku. Nato na Orange Pi namestimo popolnoma enake strežnike, na usmerjevalniku pa nastavimo nekakšen proxy, da pošilja vse dohodne povezave na zunanji strežnik, in če je Orange Pi mrtev ali nedosegljiv, na notranji nadomestni strežnik. Vzel sem HAProxy.
Izkazalo se je takole:
- Pride stranka
- Če zunanji strežnik kot prej ni na voljo, se povezava vzpostavi z notranjim strežnikom
- Če je na voljo, stranko sprejme Orange Pi
- VPN na Orange Pi dešifrira pakete in jih izpljune nazaj v usmerjevalnik
- Usmerjevalnik jih nekam usmeri
Primer izvedbe
Torej, recimo, da imamo na usmerjevalniku dve omrežji - glavno (1) in gostujoče (2), za vsako od njih obstaja strežnik OpenVPN za zunanjo povezavo.
Konfiguracija omrežja
Obe omrežji moramo usmeriti skozi ena vrata, zato ustvarimo 2 VLAN-a.
Na usmerjevalniku v razdelku Network/Switch ustvarite VLAN (na primer 1 in 2) in jih omogočite v označenem načinu na želenih vratih, dodajte novo ustvarjena eth0.1 in eth0.2 v ustrezna omrežja (npr. dodajte jih v brigde).
Na Orange Pi ustvarimo dva vmesnika VLAN (imam 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
In zanje takoj ustvarimo dva mostova:
/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
Omogoči samodejni zagon za vse 4 profile (netctl enable). Po ponovnem zagonu bo Orange Pi visel na dveh zahtevanih omrežjih. Naslove vmesnikov na Orange Pi konfiguriramo v Static Leases na usmerjevalniku.
ip addr show
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
Nastavitev VPN
Nato kopiramo nastavitve za OpenVPN in ključe iz usmerjevalnika. Nastavitve običajno najdete v /tmp/etc/openvpn*.conf
Privzeto openvpn deluje v načinu TAP in strežnik-bridge ohranja svoj vmesnik nedejaven. Da bo vse delovalo, morate dodati skript, ki se zažene, ko je povezava aktivirana.
/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}
Kot rezultat, takoj ko pride do povezave, bo vmesnik vpn-main dodan v br-main. Za mrežo gostov - podobno, do imena in naslova vmesnika v mostu strežnika.
Zunanje usmerjanje zahtev in proxy
Na tem koraku je Orange Pi že sposoben sprejemati povezave in povezovati odjemalce z zahtevanimi omrežji. Vse, kar ostane, je konfiguracija proxyja dohodnih povezav na usmerjevalniku.
Strežnike VPN usmerjevalnika prenesemo na druga vrata, namestimo HAProxy na usmerjevalnik in konfiguriramo:
/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živajte
Če bo šlo vse po načrtih, bodo odjemalci prešli na Orange Pi in procesor usmerjevalnika se ne bo več segreval, hitrost VPN pa se bo znatno povečala. Hkrati bodo vsa omrežna pravila, ki so registrirana na usmerjevalniku, ostala pomembna. V primeru nesreče na Orange Pi bo ta odpadel in HAProxy bo odjemalce prenesel na lokalne strežnike.
Hvala za vašo pozornost, predlogi in popravki so dobrodošli.
Vir: www.habr.com