Tăng tốc OpenVPN trên bộ định tuyến Openwrt. Phiên bản thay thế không cần hàn sắt và phần cứng cực đoan

Tăng tốc OpenVPN trên bộ định tuyến Openwrt. Phiên bản thay thế không cần hàn sắt và phần cứng cực đoan

Xin chào mọi người, gần đây tôi đã đọc bài viết cũ về cách bạn có thể tăng tốc OpenVPN trên bộ định tuyến bằng cách chuyển mã hóa sang một phần cứng riêng biệt được hàn bên trong bộ định tuyến. Tôi gặp trường hợp tương tự với tác giả - TP-Link WDR3500 với 128 megabyte RAM và bộ xử lý kém hoàn toàn không thể đối phó với mã hóa đường hầm. Tuy nhiên, tôi hoàn toàn không muốn dùng mỏ hàn vào bộ định tuyến. Dưới đây là kinh nghiệm của tôi khi chuyển OpenVPN sang một phần cứng riêng biệt có bản sao lưu trên bộ định tuyến trong trường hợp xảy ra tai nạn.

Nhiệm vụ

Có bộ định tuyến TP-Link WDR3500 và Orange Pi Zero H2. Chúng tôi muốn Orange Pi mã hóa các đường hầm như bình thường và nếu có điều gì xảy ra với nó, quá trình xử lý VPN sẽ quay trở lại bộ định tuyến. Tất cả cài đặt tường lửa trên bộ định tuyến sẽ hoạt động như trước. Và nói chung, việc bổ sung phần cứng bổ sung phải minh bạch và không được mọi người chú ý. OpenVPN hoạt động trên TCP, bộ điều hợp TAP ở chế độ cầu nối (cầu máy chủ).

phán quyết

Thay vì kết nối qua USB, tôi quyết định sử dụng một cổng của bộ định tuyến và kết nối tất cả các mạng con có cầu nối VPN với Orange Pi. Hóa ra phần cứng sẽ treo trong cùng mạng với máy chủ VPN trên bộ định tuyến. Sau đó, chúng tôi cài đặt chính xác các máy chủ giống nhau trên Orange Pi và trên bộ định tuyến, chúng tôi thiết lập một số loại proxy để nó gửi tất cả các kết nối đến máy chủ bên ngoài và nếu Orange Pi đã chết hoặc không khả dụng thì hãy đến máy chủ dự phòng nội bộ. Tôi đã dùng HAProxy.

Hóa ra như thế này:

  1. Một khách hàng đến
  2. Nếu máy chủ bên ngoài không khả dụng như trước đây, kết nối sẽ chuyển sang máy chủ nội bộ
  3. Nếu có thì client được Orange Pi chấp nhận
  4. VPN trên Orange Pi giải mã các gói và gửi chúng trở lại bộ định tuyến
  5. Bộ định tuyến định tuyến chúng đến một nơi nào đó

Ví dụ triển khai

Vì vậy, giả sử chúng ta có hai mạng trên bộ định tuyến - chính(1) và khách(2), đối với mỗi mạng có một máy chủ OpenVPN để kết nối bên ngoài.

Cấu hình mạng

Chúng tôi cần định tuyến cả hai mạng qua một cổng, vì vậy chúng tôi tạo 2 Vlan.

Trên bộ định tuyến, trong phần Mạng/Chuyển đổi, tạo Vlan (ví dụ 1 và 2) và bật chúng ở chế độ được gắn thẻ trên cổng mong muốn, thêm eth0.1 và eth0.2 mới tạo vào các mạng tương ứng (ví dụ: thêm chúng vào cầu nối).

Trên Orange Pi chúng tôi tạo hai giao diện Vlan (Tôi có 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-khách

Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

Và chúng tôi ngay lập tức tạo ra hai cây cầu cho họ:

/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

Bật tự động khởi động cho cả 4 cấu hình (bật netctl). Bây giờ sau khi khởi động lại, Orange Pi sẽ treo trên hai mạng được yêu cầu. Chúng tôi định cấu hình các địa chỉ giao diện trên Orange Pi trong Hợp đồng thuê tĩnh trên bộ định tuyến.

chương trình bổ sung 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

thiết lập VPN

Tiếp theo, chúng tôi sao chép cài đặt cho OpenVPN và các khóa từ bộ định tuyến. Cài đặt thường có thể được tìm thấy trong /tmp/etc/openvpn*.conf

Theo mặc định, openvpn chạy ở chế độ TAP và cầu nối máy chủ giữ cho giao diện của nó không hoạt động. Để mọi thứ hoạt động, bạn cần thêm tập lệnh chạy khi kết nối được kích hoạt.

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

Kết quả là ngay khi kết nối diễn ra, giao diện vpn-main sẽ được thêm vào br-main. Đối với lưới khách - tương tự, tùy thuộc vào tên và địa chỉ giao diện trong cầu máy chủ.

Định tuyến các yêu cầu bên ngoài và ủy quyền

Ở bước này, Orange Pi đã có thể chấp nhận kết nối và kết nối máy khách với các mạng được yêu cầu. Tất cả những gì còn lại là định cấu hình ủy quyền cho các kết nối đến trên bộ định tuyến.

Chúng tôi chuyển máy chủ VPN của bộ định tuyến sang các cổng khác, cài đặt HAProxy trên bộ định tuyến và cấu hình:

/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

Thưởng thức

Nếu mọi thứ diễn ra theo đúng kế hoạch, khách hàng sẽ chuyển sang Orange Pi và bộ xử lý của bộ định tuyến sẽ không còn nóng lên nữa, đồng thời tốc độ VPN sẽ tăng lên đáng kể. Đồng thời, tất cả các quy tắc mạng được đăng ký trên bộ định tuyến sẽ vẫn có liên quan. Trong trường hợp xảy ra tai nạn trên Orange Pi, nó sẽ rơi ra và HAProxy sẽ chuyển máy khách đến máy chủ cục bộ.

Cảm ơn bạn đã quan tâm, đề xuất và chỉnh sửa đều được chào đón.

Nguồn: www.habr.com

Thêm một lời nhận xét