Openwrt yönlendiricide OpenVPN'i hızlandırma. Havya ve donanım aşırılığı olmayan alternatif versiyon

Openwrt yönlendiricide OpenVPN'i hızlandırma. Havya ve donanım aşırılığı olmayan alternatif versiyon

Herkese merhaba, az önce okudum eski makale Şifrelemeyi yönlendiricinin içinde lehimlenen ayrı bir donanım parçasına aktararak yönlendiricideki OpenVPN'i nasıl hızlandırabileceğiniz hakkında. Yazara benzer bir durumum var - 3500 megabayt RAM'e ve tünel şifrelemeyle tamamen baş edemeyen zayıf bir işlemciye sahip TP-Link WDR128. Ancak kesinlikle havya ile yönlendiriciye girmek istemedim. Aşağıda, bir kaza durumunda OpenVPN'i yönlendiricide yedekli ayrı bir donanıma taşıma deneyimim yer almaktadır.

Görev

Bir TP-Link WDR3500 yönlendirici ve Orange Pi Zero H2 var. Orange Pi'nin tünelleri her zamanki gibi şifrelemesini istiyoruz ve ona bir şey olursa VPN işlemesi yönlendiriciye geri dönecektir. Yönlendiricideki tüm güvenlik duvarı ayarları eskisi gibi çalışmalıdır. Ve genel olarak ek donanım eklemenin şeffaf olması ve herkes tarafından fark edilmemesi gerekir. OpenVPN TCP üzerinden çalışır, TAP adaptörü köprü modundadır (sunucu-köprü).

karar

USB üzerinden bağlanmak yerine yönlendiricinin bir bağlantı noktasını kullanmaya ve VPN köprüsü olan tüm alt ağları Orange Pi'ye bağlamaya karar verdim. Donanım parçasının fiziksel olarak yönlendiricideki VPN sunucusuyla aynı ağlarda asılı kalacağı ortaya çıktı. Bundan sonra, Orange Pi'ye tamamen aynı sunucuları kuruyoruz ve yönlendiriciye bir tür proxy ayarlıyoruz, böylece tüm gelen bağlantıları harici sunucuya gönderiyor ve Orange Pi ölü veya kullanılamıyorsa, o zaman dahili geri dönüş sunucusu. HAProxy'yi aldım.

Bu şöyle çıkıyor:

  1. Bir müşteri geliyor
  2. Daha önce olduğu gibi harici sunucu kullanılamıyorsa bağlantı dahili sunucuya gider
  3. Varsa müşteri Orange Pi tarafından kabul edilir.
  4. Orange Pi'deki VPN, paketlerin şifresini çözer ve bunları yönlendiriciye geri gönderir
  5. Yönlendirici onları bir yere yönlendirir

Uygulama örneği

Diyelim ki yönlendiricide iki ağımız var - ana(1) ve misafir(2), her biri için harici olarak bağlanmak için bir OpenVPN sunucusu var.

Ağ yapılandırması

Her iki ağı da tek bir port üzerinden yönlendirmemiz gerekiyor, bu yüzden 2 VLAN oluşturuyoruz.

Yönlendiricinin Ağ/Anahtar bölümünde VLAN'lar oluşturun (örneğin 1 ve 2) ve bunları istenen bağlantı noktasında etiketli modda etkinleştirin, yeni oluşturulan eth0.1 ve eth0.2'yi ilgili ağlara ekleyin (örneğin, onları köprüye ekleyin).

Orange Pi'de iki VLAN arayüzü oluşturuyoruz (Archlinux ARM + netctl'im var):

/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

Ve onlar için hemen iki köprü oluşturuyoruz:

/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 profilin tümü için otomatik başlatmayı etkinleştirin (netctl etkinleştirme). Şimdi yeniden başlatmanın ardından Orange Pi gerekli iki ağda asılı kalacak. Router üzerinde Static Leases’te Orange Pi üzerindeki arayüz adreslerini yapılandırıyoruz.

ip addr gösterisi

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 kurulumu

Daha sonra OpenVPN ayarlarını ve anahtarlarını yönlendiriciden kopyalıyoruz. Ayarlar genellikle şurada bulunabilir: /tmp/etc/openvpn*.conf

Varsayılan olarak, TAP modunda ve sunucu köprüsünde çalışan openvpn, arayüzünü pasif tutar. Her şeyin çalışması için bağlantı etkinleştirildiğinde çalışacak bir komut dosyası eklemeniz gerekir.

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

Sonuç olarak bağlantı oluştuğu anda vpn-main arayüzü br-main'e eklenecektir. Konuk ızgarası için - benzer şekilde, sunucu köprüsündeki arayüz adı ve adresine kadar.

İstekleri dışarıdan yönlendirme ve proxy oluşturma

Bu adımda Orange Pi zaten bağlantıları kabul edebiliyor ve istemcileri gerekli ağlara bağlayabiliyor. Geriye kalan tek şey, yönlendiriciye gelen bağlantıların proxy'sini yapılandırmak.

Yönlendirici VPN sunucularını diğer bağlantı noktalarına aktarıyoruz, yönlendiriciye HAProxy kuruyoruz ve yapılandırıyoruz:

/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

Eğlence

Her şey planlandığı gibi giderse istemciler Orange Pi'ye geçecek ve yönlendiricinin işlemcisi artık ısınmayacak ve VPN hızı önemli ölçüde artacaktır. Aynı zamanda yönlendiricide kayıtlı olan tüm ağ kuralları geçerli kalacaktır. Orange Pi'de bir kaza olması durumunda düşecek ve HAProxy, istemcileri yerel sunuculara aktaracaktır.

İlginiz için teşekkür ederiz, öneri ve düzeltmelerinizi bekliyoruz.

Kaynak: habr.com

Yorum ekle