Επιτάχυνση του OpenVPN σε δρομολογητή Openwrt. Εναλλακτική έκδοση χωρίς κολλητήρι και εξτρεμισμό υλικού

Επιτάχυνση του OpenVPN σε δρομολογητή Openwrt. Εναλλακτική έκδοση χωρίς κολλητήρι και εξτρεμισμό υλικού

Γεια σε όλους, διάβασα πρόσφατα παλιό άρθρο για το πώς μπορείτε να επιταχύνετε το OpenVPN σε έναν δρομολογητή μεταφέροντας την κρυπτογράφηση σε ένα ξεχωριστό κομμάτι υλικού, το οποίο είναι συγκολλημένο μέσα στον ίδιο τον δρομολογητή. Έχω μια παρόμοια περίπτωση με τον συγγραφέα - TP-Link WDR3500 με 128 megabyte μνήμης 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 στα αντίστοιχα δίκτυα (για παράδειγμα, προσθέστε τα στο 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). Τώρα μετά από μια επανεκκίνηση, το 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. Για το πλέγμα επισκεπτών - ομοίως, μέχρι το όνομα και τη διεύθυνση διεπαφής στο διακομιστή-γέφυρα.

Αιτήματα δρομολόγησης εξωτερικά και διακομιστής μεσολάβησης

Σε αυτό το βήμα, το 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

Προσθέστε ένα σχόλιο