在 Openwrt 路由器上加速 OpenVPN。 無烙鐵和硬件極端主義的替代版本

在 Openwrt 路由器上加速 OpenVPN。 無烙鐵和硬件極端主義的替代版本

大家好,最近看了 舊文章 關於如何通過將加密傳輸到單獨的硬件來加速路由器上的 OpenVPN,該硬件焊接在路由器內部。 我和作者有一個類似的案例 - TP-Link WDR3500 具有 128 兆字節的 RAM 和一個糟糕的處理器,它根本無法處理隧道加密。 但是,我斷然不想用烙鐵爬進路由器。 Under the cut,我將 OpenVPN 移動到一個單獨的硬件上,並在路由器上進行備份,以防發生意外。

任務

有一個 TP-Link WDR3500 路由器和 Orange Pi Zero H2。 我們希望橙皮在正常模式下加密隧道,如果它出了什麼問題,VPN 處理將返回到路由器。 路由器上的所有防火牆設置都應該像以前一樣工作。 而且總的來說,一般來說,多加一塊鐵,應該是透明的,所有人都察覺不到的。 OpenVPN 在橋接模式(服務器橋接)下通過 TCP、TAP 適配器工作。

解決方法

我決定不使用 USB 連接,而是使用路由器的一個端口將所有具有 VPN 網橋的子網連接到 Orange Pi。 事實證明,這塊鐵會物理地掛在與路由器上的 VPN 服務器相同的網絡中。 之後,我們在 Orange Pi 上安裝完全相同的服務器,並在路由器上設置某種代理,以便將所有傳入連接發送到外部服務器,如果 Orange Pi 死機或不可用,則發送到內部回退服務器。 我使用了 HAProxy。

結果是這樣的:

  1. 客戶到達
  2. 如果外部服務器不可用 - 和以前一樣,連接轉到內部服務器
  3. 如果可用,客戶端被橙皮接受
  4. Orange Pi 上的 VPN 解密數據包並將它們吐迴路由器
  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-來賓

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-來賓

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

為所有 4 個配置文件啟用自動啟動 (netctl enable)。 現在,重啟後,橙皮會掛在需要的兩個網絡中。 Orange Pi 上的接口地址是在路由器的 Static Leases 中配置的。

IP地址顯示

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

默認情況下,以 TAP 模式運行的 openvpn 和 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

享受

如果一切按計劃進行,客戶端將轉到橙派,路由器處理器將不再發熱,VPN 速度將顯著提高。 同時,在路由器上註冊的所有網絡規則將保持相關性。 如果橙子派發生意外,它會掉下來,HAProxy 會將客戶端包裹在本地服務器上。

感謝您的關注,歡迎提出建議和指正。

來源: www.habr.com

添加評論