ื”ืืฆืช OpenVPN ื‘ื ืชื‘ Openwrt. ื’ืจืกื” ื—ืœื•ืคื™ืช ืœืœื ืžืœื—ื ื•ืงื™ืฆื•ื ื™ื•ืช ื—ื•ืžืจื”

ื”ืืฆืช OpenVPN ื‘ื ืชื‘ Openwrt. ื’ืจืกื” ื—ืœื•ืคื™ืช ืœืœื ืžืœื—ื ื•ืงื™ืฆื•ื ื™ื•ืช ื—ื•ืžืจื”

ืฉืœื•ื ืœื›ื•ืœื, ืงืจืืชื™ ืœืื—ืจื•ื ื” ืžืืžืจ ื™ืฉืŸ ืขืœ ืื™ืš ืืชื” ื™ื›ื•ืœ ืœื”ืื™ืฅ ืืช OpenVPN ื‘ื ืชื‘ ืขืœ ื™ื“ื™ ื”ืขื‘ืจืช ื”ืฆืคื ื” ืœืคื™ืกืช ื—ื•ืžืจื” ื ืคืจื“ืช, ื”ืžื•ืœื—ืžืช ื‘ืชื•ืš ื”ื ืชื‘ ืขืฆืžื•. ื™ืฉ ืœื™ ืžืงืจื” ื“ื•ืžื” ืœืžื—ื‘ืจ - TP-Link WDR3500 ืขื 128 ืžื’ื”-ื‘ื™ื™ื˜ ืฉืœ ื–ื™ื›ืจื•ืŸ RAM ื•ืžืขื‘ื“ ื’ืจื•ืข ืฉืžืžืฉ ืœื ืžืกื•ื’ืœ ืœื”ืชืžื•ื“ื“ ืขื ื”ืฆืคื ืช ืžื ื”ืจื”. ืขื ื–ืืช, ืžืžืฉ ืœื ืจืฆื™ืชื™ ืœื”ื™ื›ื ืก ืœื ืชื‘ ืขื ืžืœื—ื. ืœื”ืœืŸ ื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื‘ื”ืขื‘ืจืช OpenVPN ืœื—ืœืง ื—ื•ืžืจื” ื ืคืจื“ ืขื ื’ื™ื‘ื•ื™ ืขืœ ื”ื ืชื‘ ื‘ืžืงืจื” ืฉืœ ืชืื•ื ื”.

ืžืฉื™ืžื”

ื™ืฉ ื ืชื‘ TP-Link WDR3500 ื•-Orange Pi Zero H2. ืื ื—ื ื• ืจื•ืฆื™ื ืฉื”-Orange Pi ื™ืฆืคื™ืŸ ืืช ื”ืžื ื”ืจื•ืช ื›ืจื’ื™ืœ, ื•ืื ื™ืงืจื” ืœื• ืžืฉื”ื•, ืขื™ื‘ื•ื“ ื”-VPN ื™ื—ื–ื•ืจ ืœื ืชื‘. ื›ืœ ื”ื’ื“ืจื•ืช ื—ื•ืžืช ื”ืืฉ ื‘ื ืชื‘ ืืžื•ืจื•ืช ืœืขื‘ื•ื“ ื›ืžื• ืงื•ื“ื. ื•ื‘ื›ืœืœ, ื”ื•ืกืคืช ื—ื•ืžืจื” ื ื•ืกืคืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืฉืงื•ืคื” ื•ืœื ืžื•ืจื’ืฉืช ืœื›ื•ืœื. OpenVPN ืขื•ื‘ื“ ืขืœ TCP, ืžืชืื TAP ื ืžืฆื ื‘ืžืฆื‘ ื’ืฉืจ (ืฉืจืช-ื’ืฉืจ).

ื”ื—ืœื˜ื”

ื‘ืžืงื•ื ืœื”ืชื—ื‘ืจ ื“ืจืš USB, ื”ื—ืœื˜ืชื™ ืœื”ืฉืชืžืฉ ื‘ื™ืฆื™ืื” ืื—ืช ืฉืœ ื”ื ืชื‘ ื•ืœื—ื‘ืจ ืืช ื›ืœ ืจืฉืชื•ืช ื”ืžืฉื ื” ืฉื™ืฉ ืœื”ืŸ ื’ืฉืจ VPN ืœ-Orange Pi. ืžืกืชื‘ืจ ืฉื”ื—ื•ืžืจื” ืชืชืงืข ืคื™ื–ื™ืช ื‘ืื•ืชืŸ ืจืฉืชื•ืช ื›ืžื• ืฉืจืช ื”-VPN ื‘ื ืชื‘. ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืชืงื™ื ื™ื ื‘ื“ื™ื•ืง ืืช ืื•ืชื ืฉืจืชื™ื ืขืœ ื”-Orange Pi, ื•ื‘ื ืชื‘ ื”ื’ื“ืจื ื• ืื™ื–ืฉื”ื• ืคืจื•ืงืกื™ ื›ืš ืฉื”ื•ื ื™ืฉืœื— ืืช ื›ืœ ื”ื—ื™ื‘ื•ืจื™ื ื”ื ื›ื ืกื™ื ืœืฉืจืช ื”ื—ื™ืฆื•ื ื™, ื•ืื ื”- Orange Pi ืžืช ืื• ืœื ื–ืžื™ืŸ, ืื– ืœ- ืฉืจืช ื—ืœืœ ืคื ื™ืžื™. ืœืงื—ืชื™ HAProxy.

ืžืชื‘ืจืจ ื›ืš:

  1. ืžื’ื™ืข ืœืงื•ื—
  2. ืื ื”ืฉืจืช ื”ื—ื™ืฆื•ื ื™ ืื™ื ื• ื–ืžื™ืŸ, ื›ืžื• ืงื•ื“ื, ื”ื—ื™ื‘ื•ืจ ืขื•ื‘ืจ ืœืฉืจืช ื”ืคื ื™ืžื™
  3. ืื ื–ืžื™ืŸ, ื”ืœืงื•ื— ืžืชืงื‘ืœ ืขืœ ื™ื“ื™ Orange Pi
  4. VPN ื‘- Orange Pi ืžืคืขื ื— ืžื ื•ืช ื•ื™ื•ืจืง ืื•ืชืŸ ื‘ื—ื–ืจื” ืœื ืชื‘
  5. ื”ื ืชื‘ ืžื ืชื‘ ืื•ืชื ืœืื ืฉื”ื•

ื“ื•ื’ืžื” ืœื™ื™ืฉื•ื

ืื– ืชื ื• ืœื ื• ืฉืชื™ ืจืฉืชื•ืช ืขืœ ื”ื ืชื‘ - main(1) ื•- guest(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-guest

Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

ืืคืฉืจ ื”ืคืขืœื” ืื•ื˜ื•ืžื˜ื™ืช ืขื‘ื•ืจ ื›ืœ 4 ื”ืคืจื•ืคื™ืœื™ื (ื”ืคืขืœืช netctl). ื›ืขืช ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ, ื”-Orange Pi ื™ืชืงืข ื‘ืฉืชื™ ื”ืจืฉืชื•ืช ื”ื ื“ืจืฉื•ืช. ืื ื• ืžื’ื“ื™ืจื™ื ืืช ื›ืชื•ื‘ื•ืช ื”ืžืžืฉืง ื‘- Orange Pi ื‘ื—ื›ื™ืจื•ืช ืกื˜ื˜ื™ื•ืช ื‘ื ืชื‘.

ื”ืฆื’ืช ip addr

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 ื•ืฉืจืช-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. ืขื‘ื•ืจ ืจืฉืช ื”ืื•ืจื— - ื‘ืื•ืคืŸ ื“ื•ืžื”, ืขื“ ืœืฉื ื”ืžืžืฉืง ื•ื”ื›ืชื•ื‘ืช ื‘ืฉืจืช-bridge.

ื ื™ืชื•ื‘ ื‘ืงืฉื•ืช ื—ื™ืฆื•ื ื™ ื•-proxy

ื‘ืฉืœื‘ ื–ื”, 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 ืชืขื‘ื™ืจ ืœืงื•ื—ื•ืช ืœืฉืจืชื™ื ืžืงื•ืžื™ื™ื.

ืชื•ื“ื” ืขืœ ืชืฉื•ืžืช ื”ืœื‘, ื”ืฆืขื•ืช ื•ืชื™ืงื•ื ื™ื ื™ืชืงื‘ืœื• ื‘ื‘ืจื›ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”