అందరికీ నమస్కారం, నేను ఇటీవల చదివాను
పని
TP-Link WDR3500 రౌటర్ మరియు ఆరెంజ్ పై జీరో H2 ఉన్నాయి. ఆరెంజ్ పై టన్నెల్లను యధావిధిగా గుప్తీకరించాలని మేము కోరుకుంటున్నాము మరియు ఏదైనా జరిగితే, VPN ప్రాసెసింగ్ తిరిగి రూటర్కి తిరిగి వస్తుంది. రూటర్లోని అన్ని ఫైర్వాల్ సెట్టింగ్లు మునుపటిలా పని చేయాలి. మరియు సాధారణంగా, అదనపు హార్డ్వేర్ను జోడించడం అనేది అందరికీ పారదర్శకంగా మరియు గుర్తించబడనిదిగా ఉండాలి. OpenVPN TCPపై పనిచేస్తుంది, TAP అడాప్టర్ బ్రిడ్జ్ మోడ్లో ఉంది (సర్వర్-బ్రిడ్జ్).
నిర్ణయం
USB ద్వారా కనెక్ట్ చేయడానికి బదులుగా, నేను రూటర్లోని ఒక పోర్ట్ని ఉపయోగించాలని నిర్ణయించుకున్నాను మరియు VPN బ్రిడ్జ్ ఉన్న అన్ని సబ్నెట్లను ఆరెంజ్ పైకి కనెక్ట్ చేసాను. రూటర్లోని VPN సర్వర్ వలె హార్డ్వేర్ భౌతికంగా అదే నెట్వర్క్లలో హ్యాంగ్ అవుతుందని తేలింది. ఆ తర్వాత, మేము ఆరెంజ్ పైలో సరిగ్గా అదే సర్వర్లను ఇన్స్టాల్ చేస్తాము మరియు రూటర్లో మేము ఒక రకమైన ప్రాక్సీని సెటప్ చేస్తాము, తద్వారా ఇది అన్ని ఇన్కమింగ్ కనెక్షన్లను బాహ్య సర్వర్కు పంపుతుంది మరియు ఆరెంజ్ పై డెడ్ లేదా అందుబాటులో లేకుంటే, ఆపై అంతర్గత ఫాల్బ్యాక్ సర్వర్. నేను HAProxy తీసుకున్నాను.
ఇది ఇలా మారుతుంది:
- ఒక క్లయింట్ వస్తాడు
- బాహ్య సర్వర్ అందుబాటులో లేకుంటే, మునుపటిలాగా, కనెక్షన్ అంతర్గత సర్వర్కు వెళుతుంది
- అందుబాటులో ఉంటే, క్లయింట్ ఆరెంజ్ పై ద్వారా అంగీకరించబడుతుంది
- ఆరెంజ్ పైలోని VPN ప్యాకెట్లను డీక్రిప్ట్ చేస్తుంది మరియు వాటిని తిరిగి రూటర్లోకి ఉమ్మివేస్తుంది
- రౌటర్ వాటిని ఎక్కడో దారి తీస్తుంది
అమలు ఉదాహరణ
కాబట్టి, మనకు రూటర్లో రెండు నెట్వర్క్లు ఉన్నాయని అనుకుందాం - మెయిన్ (1) మరియు గెస్ట్ (2), వాటిలో ప్రతిదానికి బాహ్యంగా కనెక్ట్ చేయడానికి OpenVPN సర్వర్ ఉంది.
నెట్వర్క్ కాన్ఫిగరేషన్
మేము రెండు నెట్వర్క్లను ఒక పోర్ట్ ద్వారా రూట్ చేయాలి, కాబట్టి మేము 2 VLANలను సృష్టిస్తాము.
రూటర్లో, నెట్వర్క్/స్విచ్ విభాగంలో, VLANలను సృష్టించండి (ఉదాహరణకు 1 మరియు 2) మరియు వాటిని కావలసిన పోర్ట్లో ట్యాగ్ చేయబడిన మోడ్లో ప్రారంభించండి, కొత్తగా సృష్టించిన eth0.1 మరియు eth0.2ని సంబంధిత నెట్వర్క్లకు జోడించండి (ఉదాహరణకు, వాటిని బ్రిగ్డేకి చేర్చండి).
ఆరెంజ్ పైలో మనం రెండు 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-guest
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-guest
Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp
మొత్తం 4 ప్రొఫైల్ల కోసం ఆటోస్టార్ట్ని ప్రారంభించండి (netctl ఎనేబుల్). ఇప్పుడు రీబూట్ చేసిన తర్వాత, ఆరెంజ్ పై రెండు అవసరమైన నెట్వర్క్లలో హ్యాంగ్ అవుతుంది. మేము రూటర్లోని స్టాటిక్ లీసెస్లో ఆరెంజ్ పైలో ఇంటర్ఫేస్ చిరునామాలను కాన్ఫిగర్ చేస్తాము.
ip addr షో
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
డిఫాల్ట్గా, openvpn TAP మోడ్లో నడుస్తుంది మరియు సర్వర్-బ్రిడ్జ్ దాని ఇంటర్ఫేస్ను క్రియారహితంగా ఉంచుతుంది. ప్రతిదీ పని చేయడానికి, మీరు కనెక్షన్ సక్రియం అయినప్పుడు రన్ అయ్యే స్క్రిప్ట్ను జోడించాలి.
/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-మెయిన్ ఇంటర్ఫేస్ 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