ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ, Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π»
ΠΠ°Π΄Π°ΡΠ°
ΠΡΡΡ ΡΠΎΡΡΠ΅Ρ TP-Link WDR3500 ΠΈ Orange Pi Zero H2. Π₯ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½Π½Π΅Π»Π΅ΠΉ Π² ΡΡΠ°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π»ΡΡ Orange Pi, ΠΏΡΠΈ ΡΡΠΎΠΌ Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΠΌ ΡΡΠΎ-ΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° VPN Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΡΠΎΡΡΠ΅Ρ. ΠΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ°Π΅ΡΠ²ΠΎΠ»Π° Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π½ΡΡΠ΅. Π Π²ΠΎΠΎΠ±ΡΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΆΠ΅Π»Π΅Π·ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ. OpenVPN ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ TCP, Π°Π΄Π°ΠΏΡΠ΅Ρ TAP Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΡΡΠ° (server-bridge).
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ USB Ρ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡ ΡΠΎΡΡΠ΅ΡΠ° ΠΈ Π·Π°Π²Π΅ΡΡΠΈ ΠΏΠΎ Π½Π΅ΠΌΡ Π½Π° Orange Pi Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ VPN Π±ΡΠΈΠ΄ΠΆ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΆΠ΅Π»Π΅Π·ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΈΡΠ΅ΡΡ Π² ΡΠ΅Ρ ΠΆΠ΅ ΡΠ΅ΡΡΡ , ΡΡΠΎ ΠΈ VPN ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ ΡΠΎΠ²Π½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Orange Pi, Π° Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΠΊΡΠΈ ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΎΡΠ΄Π°Π²Π°Π» Π²ΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π° Π΅ΡΠ»ΠΈ Orange Pi ΠΏΠΎΠΌΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ β ΡΠΎΠ³Π΄Π° Π½Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ fallback ΡΠ΅ΡΠ²Π΅Ρ. Π― Π²Π·ΡΠ» HAProxy.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊ:
- ΠΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ
- ΠΡΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ β ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ Π½Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ
- ΠΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ β ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Orange Pi
- VPN Π½Π° Orange Pi Π΄Π΅ΡΠΈΡΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ Π²ΡΠΏΠ»Π΅Π²ΡΠ²Π°Π΅Ρ ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠΎΡΡΠ΅Ρ
- Π ΠΎΡΡΠ΅Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΡ ΠΊΡΠ΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠ°ΠΊ, ΠΏΡΡΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅ Π΄Π²Π΅ ΡΠ΅ΡΠΈ β main(1) ΠΈ guest(2), Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ Π½ΠΈΡ Π΅ΡΡΡ OpenVPN ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ½Π°ΡΡΠΆΠΈ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠΈ
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΊΠΈΠ½ΡΡΡ ΠΎΠ±Π΅ ΡΠ΅ΡΠΈ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ 2 VLAN’a.
ΠΠ° ΡΠΎΡΡΠ΅ΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Network/Switch ΡΠΎΠ·Π΄Π°Π΅ΠΌ VLAN’Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 1 ΠΈ 2) ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡ Π² tagged ΡΠ΅ΠΆΠΈΠΌΠ΅ Π½Π° Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²Π½ΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ eth0.1 ΠΈ eth0.2 ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ΅ΡΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² brigde).
ΠΠ° Orange Pi ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° VLAN ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Ρ ΠΌΠ΅Π½Ρ 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
Π ΡΡΠ°Π·Ρ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° Π±ΡΠΈΠ΄ΠΆΠ° Π΄Π»Ρ Π½ΠΈΡ :
/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
ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Π°Π²ΡΠΎΡΡΠ°ΡΡ Π½Π° Π²ΡΠ΅ 4 ΠΏΡΠΎΡΠΈΠ»Ρ (netctl enable). Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Orange Pi Π±ΡΠ΄Π΅Ρ Π²ΠΈΡΠ΅ΡΡ Π² Π΄Π²ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΡΡ . ΠΠ΄ΡΠ΅ΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π½Π° Orange Pi Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Π² Static Leases Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅.
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
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° VPN
ΠΠ°Π»ΡΡΠ΅ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Ρ ΡΠΎΡΡΠ΅ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ OpenVPN ΠΈ ΠΊΠ»ΡΡΠΈ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π² /tmp/etc/openvpn*.conf
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ openvpn, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ TAP ΠΈ server-bridge Π΄Π΅ΡΠΆΠΈΡ ΡΠ²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌ. Π§ΡΠΎΠ±Ρ Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΉ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
/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}
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΡΠΈΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ vpn-main Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² br-main. ΠΠ»Ρ ΡΠ΅ΡΠΊΠΈ guest β Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ Π°Π΄ΡΠ΅ΡΠ° Π² server-bridge.
ΠΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ½Π°ΡΡΠΆΠΈ ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ° ΡΡΠΎΠΌ ΡΠ°Π³Π΅ Orange Pi ΡΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π² Π½ΡΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠΈ. ΠΡΡΠ°Π»ΠΎΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅.
ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΡΠΎΡΡΠ΅ΡΠ½ΡΠ΅ VPN ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΡΡ, ΡΡΠ°Π²ΠΈΠΌ Π½Π° ΡΠΎΡΡΠ΅Ρ HAProxy ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ:
/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
ΠΠ°ΡΠ»Π°ΠΆΠ΄Π°Π΅ΠΌΡΡ
ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΠΏΠΎ ΠΏΠ»Π°Π½Ρ β ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΉΠ΄ΡΡ Π½Π° Orange Pi ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΠΎΡΡΠ΅ΡΠ° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π³ΡΠ΅ΡΡΡΡ, Π° ΡΠΊΠΎΡΠΎΡΡΡ VPN ΠΎΡΡΡΠΈΠΌΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ΅Ρ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΡΡΠ°Π½ΡΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π²ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Ρ Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅. Π ΡΠ»ΡΡΠ°Π΅ Π°Π²Π°ΡΠΈΠΈ Π½Π° Orange Pi ΠΎΠ½ ΠΎΡΠ²Π°Π»ΠΈΡΡΡ ΠΈ HAProxy Π·Π°Π²Π΅ΡΠ½Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com