大家好,最近看了
任務
有一個 TP-Link WDR3500 路由器和 Orange Pi Zero H2。 我們希望橙皮在正常模式下加密隧道,如果它出了什麼問題,VPN 處理將返回到路由器。 路由器上的所有防火牆設置都應該像以前一樣工作。 而且總的來說,一般來說,多加一塊鐵,應該是透明的,所有人都察覺不到的。 OpenVPN 在橋接模式(服務器橋接)下通過 TCP、TAP 適配器工作。
解決方法
我決定不使用 USB 連接,而是使用路由器的一個端口將所有具有 VPN 網橋的子網連接到 Orange Pi。 事實證明,這塊鐵會物理地掛在與路由器上的 VPN 服務器相同的網絡中。 之後,我們在 Orange Pi 上安裝完全相同的服務器,並在路由器上設置某種代理,以便將所有傳入連接發送到外部服務器,如果 Orange Pi 死機或不可用,則發送到內部回退服務器。 我使用了 HAProxy。
結果是這樣的:
- 客戶到達
- 如果外部服務器不可用 - 和以前一樣,連接轉到內部服務器
- 如果可用,客戶端被橙皮接受
- Orange Pi 上的 VPN 解密數據包並將它們吐迴路由器
- 路由器將它們路由到某個地方
實施例
因此,假設我們在路由器上有兩個網絡——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