Xin chào mọi người, gần đây tôi đã đọc
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:
- Một khách hàng đến
- 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ộ
- Nếu có thì client được Orange Pi chấp nhận
- VPN trên Orange Pi giải mã các gói và gửi chúng trở lại bộ định tuyến
- 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