Mempercepat OpenVPN pada router Openwrt. Versi alternatif tanpa besi solder dan ekstremisme perangkat keras

Mempercepat OpenVPN pada router Openwrt. Versi alternatif tanpa besi solder dan ekstremisme perangkat keras

Halo semuanya, saya baru saja membaca artikel lama tentang bagaimana Anda dapat mempercepat OpenVPN di router dengan mentransfer enkripsi ke perangkat keras terpisah, yang disolder di dalam router itu sendiri. Saya memiliki kasus serupa dengan penulis - TP-Link WDR3500 dengan RAM 128 megabita dan prosesor buruk yang sama sekali tidak mampu mengatasi enkripsi terowongan. Namun, saya sama sekali tidak ingin masuk ke router dengan besi solder. Di bawah ini adalah pengalaman saya memindahkan OpenVPN ke perangkat keras terpisah dengan cadangan di router jika terjadi kecelakaan.

Tugas

Ada router TP-Link WDR3500 dan Orange Pi Zero H2. Kami ingin Orange Pi mengenkripsi terowongan seperti biasa, dan jika terjadi sesuatu, pemrosesan VPN akan kembali ke router. Semua pengaturan firewall di router akan berfungsi seperti sebelumnya. Dan secara umum, penambahan perangkat keras tambahan harus dilakukan secara transparan dan tidak terlihat oleh semua orang. OpenVPN bekerja melalui TCP, adaptor TAP dalam mode jembatan (server-bridge).

keputusan

Daripada menghubungkan melalui USB, saya memutuskan untuk menggunakan satu port router dan menghubungkan semua subnet yang memiliki jembatan VPN ke Orange Pi. Ternyata perangkat keras tersebut secara fisik akan hang di jaringan yang sama dengan server VPN di router. Setelah itu, kami menginstal server yang persis sama di Orange Pi, dan di router kami menyiapkan semacam proxy sehingga mengirimkan semua koneksi masuk ke server eksternal, dan jika Orange Pi mati atau tidak tersedia, maka ke server server cadangan internal. Saya mengambil HAProxy.

Ternyata seperti ini:

  1. Seorang klien tiba
  2. Jika server eksternal tidak tersedia, seperti sebelumnya, koneksi menuju ke server internal
  3. Jika tersedia, klien diterima oleh Orange Pi
  4. VPN di Orange Pi mendekripsi paket dan mengembalikannya ke router
  5. Router merutekannya ke suatu tempat

Contoh implementasi

Jadi, katakanlah kita memiliki dua jaringan di router - utama(1) dan tamu(2), untuk masing-masing jaringan terdapat server OpenVPN untuk menghubungkan secara eksternal.

Konfigurasi jaringan

Kita perlu merutekan kedua jaringan melalui satu port, jadi kita membuat 2 VLAN.

Di router, di bagian Jaringan/Switch, buat VLAN (misalnya 1 dan 2) dan aktifkan dalam mode tag pada port yang diinginkan, tambahkan eth0.1 dan eth0.2 yang baru dibuat ke jaringan yang sesuai (misalnya, tambahkan mereka ke brigadir).

Di Orange Pi kami membuat dua antarmuka VLAN (Saya punya 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 membuat dua jembatan 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

Aktifkan autostart untuk keempat profil (netctl aktifkan). Sekarang setelah reboot, Orange Pi akan hang di dua jaringan yang diperlukan. Kami mengonfigurasi alamat antarmuka pada Orange Pi di Sewa Statis di router.

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

Pengaturan VPN

Selanjutnya, salin pengaturan OpenVPN dan kunci dari router. Pengaturan biasanya dapat ditemukan di /tmp/etc/openvpn*.conf

Secara default, openvpn berjalan dalam mode TAP dan server-bridge menjaga antarmukanya tidak aktif. Agar semuanya berfungsi, Anda perlu menambahkan skrip yang berjalan saat koneksi 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, segera setelah koneksi terjadi, antarmuka vpn-main akan ditambahkan ke br-main. Untuk jaringan tamu - demikian pula, hingga nama antarmuka dan alamat di server-bridge.

Merutekan permintaan secara eksternal dan proksi

Pada langkah ini, Orange Pi sudah dapat menerima koneksi dan menghubungkan klien ke jaringan yang diperlukan. Yang tersisa hanyalah mengkonfigurasi proxy koneksi masuk di router.

Kami mentransfer server VPN router ke port lain, menginstal HAProxy di router 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

Menikmati

Jika semuanya berjalan sesuai rencana, klien akan beralih ke Orange Pi dan prosesor router tidak lagi memanas, dan kecepatan VPN akan meningkat secara signifikan. Pada saat yang sama, semua aturan jaringan yang terdaftar di router akan tetap relevan. Jika terjadi kecelakaan pada Orange Pi, ia akan jatuh dan HAProxy akan mentransfer klien ke server lokal.

Terima kasih atas perhatiannya, saran dan koreksi dipersilahkan.

Sumber: www.habr.com

Tambah komentar