Mempercepatkan OpenVPN pada penghala Openwrt. Versi alternatif tanpa besi pematerian dan ekstremisme perkakasan

Mempercepatkan OpenVPN pada penghala Openwrt. Versi alternatif tanpa besi pematerian dan ekstremisme perkakasan

Hello semua, saya baru-baru ini membaca artikel lama tentang cara anda boleh mempercepatkan OpenVPN pada penghala dengan memindahkan penyulitan kepada sekeping perkakasan yang berasingan, yang dipateri di dalam penghala itu sendiri. Saya mempunyai kes yang serupa dengan pengarang - TP-Link WDR3500 dengan 128 megabait RAM dan pemproses yang lemah yang tidak dapat mengatasi penyulitan terowong sepenuhnya. Walau bagaimanapun, saya sama sekali tidak mahu masuk ke penghala dengan besi pematerian. Di bawah ialah pengalaman saya mengalihkan OpenVPN ke perkakasan berasingan dengan sandaran pada penghala sekiranya berlaku kemalangan.

Petugas

Terdapat penghala TP-Link WDR3500 dan Orange Pi Zero H2. Kami mahu Orange Pi menyulitkan terowong seperti biasa, dan jika sesuatu berlaku padanya, pemprosesan VPN akan kembali ke penghala. Semua tetapan tembok api pada penghala harus berfungsi seperti sebelumnya. Dan secara umum, menambah perkakasan tambahan hendaklah telus dan tidak dapat dilihat oleh semua orang. OpenVPN berfungsi melalui TCP, penyesuai TAP berada dalam mod jambatan (jambatan pelayan).

keputusan

Daripada menyambung melalui USB, saya memutuskan untuk menggunakan satu port penghala dan menyambungkan semua subnet yang mempunyai jambatan VPN ke Orange Pi. Ternyata perkakasan secara fizikal akan digantung dalam rangkaian yang sama seperti pelayan VPN pada penghala. Selepas itu, kami memasang pelayan yang sama pada Orange Pi, dan pada penghala kami menyediakan beberapa jenis proksi supaya ia menghantar semua sambungan masuk ke pelayan luaran, dan jika Orange Pi mati atau tidak tersedia, kemudian ke pelayan sandaran dalaman. Saya mengambil HAProxy.

Ternyata begini:

  1. Seorang pelanggan tiba
  2. Jika pelayan luaran tidak tersedia, seperti sebelum ini, sambungan pergi ke pelayan dalaman
  3. Jika tersedia, pelanggan diterima oleh Orange Pi
  4. VPN pada Orange Pi menyahsulit paket dan meludahkannya kembali ke penghala
  5. Penghala mengarahkan mereka ke suatu tempat

Contoh pelaksanaan

Jadi, marilah kita mempunyai dua rangkaian pada penghala - utama(1) dan tetamu(2), bagi setiap daripada mereka terdapat pelayan OpenVPN untuk menyambung secara luaran.

Konfigurasi rangkaian

Kami perlu menghalakan kedua-dua rangkaian melalui satu port, jadi kami mencipta 2 VLAN.

Pada penghala, dalam bahagian Rangkaian/Tukar, buat VLAN (contohnya 1 dan 2) dan dayakannya dalam mod berteg pada port yang dikehendaki, tambahkan eth0.1 dan eth0.2 yang baru dibuat pada rangkaian yang sepadan (contohnya, tambah mereka ke brigde).

Pada Orange Pi kami mencipta dua antara muka VLAN (saya mempunyai 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

Dan kami segera mencipta dua jambatan untuk mereka:

/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

Dayakan autostart untuk semua 4 profil (netctl enable). Kini selepas but semula, Orange Pi akan digantung pada dua rangkaian yang diperlukan. Kami mengkonfigurasi alamat antara muka pada Orange Pi dalam Pajakan Statik pada penghala.

paparan 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

Menyediakan VPN

Seterusnya, kami menyalin tetapan untuk OpenVPN dan kunci daripada penghala. Tetapan biasanya boleh didapati dalam /tmp/etc/openvpn*.conf

Secara lalai, openvpn berjalan dalam mod TAP dan jambatan pelayan memastikan antara mukanya tidak aktif. Untuk semuanya berfungsi, anda perlu menambah skrip yang berjalan apabila sambungan diaktifkan.

/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}

Akibatnya, sebaik sahaja sambungan berlaku, antara muka vpn-utama akan ditambah ke br-utama. Untuk grid tetamu - begitu juga, sehingga nama antara muka dan alamat dalam jambatan pelayan.

Menghalakan permintaan secara luaran dan proksi

Pada langkah ini, Orange Pi sudah dapat menerima sambungan dan menyambungkan pelanggan ke rangkaian yang diperlukan. Yang tinggal hanyalah mengkonfigurasi proksi sambungan masuk pada penghala.

Kami memindahkan pelayan VPN penghala ke port lain, memasang HAProxy pada penghala dan mengkonfigurasi:

/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

Nikmati

Jika semuanya berjalan mengikut rancangan, pelanggan akan bertukar kepada Orange Pi dan pemproses penghala tidak lagi panas, dan kelajuan VPN akan meningkat dengan ketara. Pada masa yang sama, semua peraturan rangkaian yang didaftarkan pada penghala akan kekal relevan. Sekiranya berlaku kemalangan pada Orange Pi, ia akan jatuh dan HAProxy akan memindahkan pelanggan ke pelayan tempatan.

Terima kasih atas perhatian, cadangan dan pembetulan dialu-alukan.

Sumber: www.habr.com

Tambah komen