рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░, рдореА рдиреБрдХрддреЗрдЪ рд╡рд╛рдЪрд▓реЗ
рдЙрджреНрджрд┐рд╖реНрдЯ
рдПрдХ TP-Link WDR3500 рд░рд╛рдЙрдЯрд░ рдЖрдгрд┐ Orange Pi Zero H2 рдЖрд╣реЗ. рдСрд░реЗрдВрдЬ рдкрд╛рдИ рдиреЗ рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ рдмреЛрдЧрджреЗ рдХреВрдЯрдмрджреНрдз рдХрд░рд╛рд╡реЗ рдЕрд╢реА рдЖрдордЪреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рдХрд╛рд╣реА рдШрдбрд▓реНрдпрд╛рд╕, VPN рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░рд╡рд░ рдкрд░рдд рдпреЗрдИрд▓. рд░рд╛рдЙрдЯрд░рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдлрд╛рдпрд░рд╡реЙрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдкреВрд░реНрд╡реАрдкреНрд░рдорд╛рдгреЗрдЪ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдЬреЛрдбрдгреЗ рдкрд╛рд░рджрд░реНрд╢рдХ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рдЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рди рдпреЗрдгрд╛рд░реЗ рдЕрд╕рд╛рд╡реЗ. OpenVPN TCP рд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ, TAP рдЕрдбреЕрдкреНрдЯрд░ рдмреНрд░рд┐рдЬ рдореЛрдбрдордзреНрдпреЗ рдЖрд╣реЗ (рд╕рд░реНрд╡реНрд╣рд░-рдмреНрд░рд┐рдЬ).
рдирд┐рд░реНрдгрдп
рдпреВрдПрд╕рдмреА рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА, рдореА рд░рд╛рдЙрдЯрд░рдЪрд╛ рдПрдХ рдкреЛрд░реНрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ VPN рдмреНрд░рд┐рдЬ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╕рдмрдиреЗрдЯреНрд╕рдирд╛ рдСрд░реЗрдВрдЬ рдкрд╛рдИрд╢реА рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдЪрд╛ рддреБрдХрдбрд╛ рд░рд╛рдЙрдЯрд░рд╡рд░реАрд▓ рд╡реНрд╣реАрдкреАрдПрди рд╕рд░реНрд╡реНрд╣рд░ рд╕рд╛рд░рдЦреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рднреМрддрд┐рдХрд░рд┐рддреНрдпрд╛ рд╣рдБрдЧ рд╣реЛрдИрд▓. рддреНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдСрд░реЗрдВрдЬ рдкрд╛рдИрд╡рд░ рдЕрдЧрджреА рд╕рдорд╛рди рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рд░рд╛рдЙрдЯрд░рд╡рд░ рдЖрдореНрд╣реА рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯ рдХрд░рддреЛ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рд╕рд░реНрд╡ рдпреЗрдгрд╛рд░реЗ рдХрдиреЗрдХреНрд╢рди рдмрд╛рд╣реНрдп рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдард╡реЗрд▓ рдЖрдгрд┐ рдСрд░реЗрдВрдЬ рдкрд╛рдИ рдореГрдд рдХрд┐рдВрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕, рдирдВрддрд░ рдЕрдВрддрд░реНрдЧрдд рдлреЙрд▓рдмреЕрдХ рд╕рд░реНрд╡реНрд╣рд░. рдореА HAProxy рдШреЗрддрд▓реА.
рд╣реЗ рдЕрд╕реЗ рдмрд╛рд╣реЗрд░ рд╡рд│рддреЗ:
- рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдпреЗрддреЛ
- рдмрд╛рд╣реНрдп рд╕рд░реНрд╡реНрд╣рд░ рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреВрд░реНрд╡реАрдкреНрд░рдорд╛рдгреЗ, рдХрдиреЗрдХреНрд╢рди рдЕрдВрддрд░реНрдЧрдд рд╕рд░реНрд╡реНрд╣рд░рдХрдбреЗ рдЬрд╛рддреЗ
- рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреНрд▓рд╛рдпрдВрдЯ Orange Pi рджреНрд╡рд╛рд░реЗ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ рдЬрд╛рддреЗ
- Orange Pi рд╡рд░реАрд▓ VPN рдкреЕрдХреЗрдЯреНрд╕ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдкрд░рдд рд░рд╛рдЙрдЯрд░рдордзреНрдпреЗ рдереБрдВрдХрддреЗ
- рд░рд╛рдЙрдЯрд░ рддреНрдпрд╛рдВрдирд╛ рдХреБрдареЗрддрд░реА рдорд╛рд░реНрдЧрд╕реНрде рдХрд░рддреЛ
рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг
рддрд░, рд░рд╛рдЙрдЯрд░рд╡рд░ рджреЛрди рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╕реВ рджреНрдпрд╛ - рдореБрдЦреНрдп(1) рдЖрдгрд┐ рдЕрддрд┐рдереА (2), рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдмрд╛рд╣реЗрд░реВрди рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ OpenVPN рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ.
рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
рдЖрдореНрд╣рд╛рд▓рд╛ рджреЛрдиреНрд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдПрдХрд╛ рдкреЛрд░реНрдЯрджреНрд╡рд╛рд░реЗ рд░реВрдЯ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА 2 VLAN рддрдпрд╛рд░ рдХрд░рддреЛ.
рд░рд╛рдЙрдЯрд░рд╡рд░, рдиреЗрдЯрд╡рд░реНрдХ/рд╕реНрд╡рд┐рдЪ рд╡рд┐рднрд╛рдЧрд╛рдд, VLAN рддрдпрд╛рд░ рдХрд░рд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде 1 рдЖрдгрд┐ 2) рдЖрдгрд┐ рдЗрдЪреНрдЫрд┐рдд рдкреЛрд░реНрдЯрд╡рд░ рддреНрдпрд╛рдВрдирд╛ рдЯреЕрдЧ рдореЛрдбрдордзреНрдпреЗ рд╕рдХреНрд╖рдо рдХрд░рд╛, рдирд╡реАрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ eth0.1 рдЖрдгрд┐ eth0.2 рд╕рдВрдмрдВрдзрд┐рдд рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдЬреЛрдбрд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреНрдпрд╛рдВрдирд╛ рдмреНрд░рд┐рдЧреЗрдбрдордзреНрдпреЗ рдЬреЛрдбрд╛).
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-рдЕрддрд┐рдереА
Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp
рд╕рд░реНрд╡ 4 рдкреНрд░реЛрдлрд╛рдЗрд▓рд╕рд╛рдареА рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рд╕рдХреНрд╖рдо рдХрд░рд╛ (netctl рд╕рдХреНрд╖рдо). рдЖрддрд╛ рд░реАрдмреВрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдСрд░реЗрдВрдЬ рдкрд╛рдИ рджреЛрди рдЖрд╡рд╢реНрдпрдХ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рд╣рдБрдЧ рд╣реЛрдИрд▓. рдЖрдореНрд╣реА рд░рд╛рдЙрдЯрд░рд╡рд░реАрд▓ рдСрд░реЗрдВрдЬ рдкрд╛рдИ рд╡рд░реАрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрддреНрддреЗ рд╕реНрдЯреЕрдЯрд┐рдХ рд▓реАрдЬрдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ.
рдЖрдпрдкреА рдкрддреНрддрд╛ рд╢реЛ
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
рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдУрдкрдирд╡реНрд╣реАрдкреАрдПрди рдЯреАрдПрдкреА рдореЛрдбрдордзреНрдпреЗ рдЪрд╛рд▓рддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░-рдмреНрд░рд┐рдЬ рддреНрдпрд╛рдЪрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдареЗрд╡рддреЛ. рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЬреА рдХрдиреЗрдХреНрд╢рди рд╕рдХреНрд░рд┐рдп рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдЪрд╛рд▓рддреЗ.
/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-рдореБрдЦреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ br-main рдордзреНрдпреЗ рдЬреЛрдбрд▓рд╛ рдЬрд╛рдИрд▓. рдЕрддрд┐рдереА рдЧреНрд░рд┐рдбрд╕рд╛рдареА - рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, рд╕рд░реНрд╡реНрд╣рд░-рдмреНрд░рд┐рдЬрдордзреАрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╛рд╡ рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рдкрд░реНрдпрдВрдд.
рд░рд╛рдЙрдЯрд┐рдВрдЧ рд╡рд┐рдирдВрддреА рдмрд╛рд╣реНрдпрд░рд┐рддреНрдпрд╛ рдЖрдгрд┐ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рдгреЗ
рдпрд╛ рдкрд╛рдпрд░реАрд╡рд░, рдСрд░реЗрдВрдЬ рдкрд╛рдИ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдиреЗрдЯрд╡рд░реНрдХрд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗ. рд░рд╛рдЙрдЯрд░рд╡рд░ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирдЪреЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.
рдЖрдореНрд╣реА рд░рд╛рдЙрдЯрд░ рд╡реНрд╣реАрдкреАрдПрди рд╕рд░реНрд╡реНрд╣рд░ рдЗрддрд░ рдкреЛрд░реНрдЯрд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ, рд░рд╛рдЙрдЯрд░рд╡рд░ 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
рдЖрдирдВрдж рдШреНрдпрд╛
рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдЭрд╛рд▓реЗ, рддрд░ рдХреНрд▓рд╛рдпрдВрдЯ рдСрд░реЗрдВрдЬ рдкрд╛рдИрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреАрд▓ рдЖрдгрд┐ рд░рд╛рдЙрдЯрд░рдЪрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдпрд╛рдкреБрдвреЗ рдЧрд░рдо рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ VPN рдЧрддреА рд▓рдХреНрд╖рдгреАрдп рд╡рд╛рдвреЗрд▓. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рд░рд╛рдЙрдЯрд░рд╡рд░ рдиреЛрдВрджрдгреАрдХреГрдд рд╕рд░реНрд╡ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рдпрдо рд╕рдВрдмрдВрдзрд┐рдд рд░рд╛рд╣рддреАрд▓. рдСрд░реЗрдВрдЬ рдкрд╛рдИ рд╡рд░ рдЕрдкрдШрд╛рдд рдЭрд╛рд▓реНрдпрд╛рд╕, рддреЗ рдмрдВрдж рд╣реЛрдИрд▓ рдЖрдгрд┐ HAProxy рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рд╕реНрдерд╛рдирд┐рдХ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрд▓.
рдЖрдкрд▓реЗ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рд╕реВрдЪрдирд╛ рдЖрдгрд┐ рд╕реБрдзрд╛рд░рдгрд╛рдВрдЪреЗ рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ.
рд╕реНрддреНрд░реЛрдд: www.habr.com