ప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది

నేను ఎలా ప్రారంభించగలిగానో తెలిపే ఒక వ్యాసం VPN సర్వర్ హోమ్ ప్రొవైడర్ యొక్క NAT వెనుక (పబ్లిక్ IP చిరునామా లేకుండా). నేను వెంటనే స్పష్టం చేస్తాను: ఈ అమలు యొక్క పనితీరు నేరుగా మీ ప్రొవైడర్ ఉపయోగించే NAT రకం, అలాగే రూటర్‌పై ఆధారపడి ఉంటుంది.
కాబట్టి, నేను నా నుండి కనెక్ట్ అవ్వాల్సిన అవసరం ఏర్పడింది Androidస్మార్ట్‌ఫోన్‌ను ఇంటి కంప్యూటర్‌కు కనెక్ట్ చేసినప్పుడు, రెండు పరికరాలు ప్రొవైడర్ NATల ద్వారా ఇంటర్నెట్‌కు అనుసంధానించబడి ఉంటాయి, దీనికి అదనంగా కంప్యూటర్ ఇంటి రౌటర్ ద్వారా కూడా అనుసంధానించబడి ఉంటుంది, ఇది కూడా కనెక్షన్‌లను NAT చేస్తుంది.
వైట్ IP చిరునామాతో లీజుకు తీసుకున్న VPS/VDSని ఉపయోగించే క్లాసిక్ స్కీమ్, అలాగే ప్రొవైడర్ నుండి వైట్ IP చిరునామాను అద్దెకు తీసుకోవడం అనేక కారణాల వల్ల పరిగణించబడలేదు.
పరిగణలోకి తీసుకొని గత కథనాల నుండి అనుభవం, ప్రొవైడర్ల STUNలు మరియు NATలతో అనేక ప్రయోగాలు నిర్వహించడం జరిగింది. OpenWRT ఫర్మ్‌వేర్ నడుస్తున్న హోమ్ రౌటర్‌లో ఆదేశాన్ని అమలు చేయడం ద్వారా నేను ఒక చిన్న ప్రయోగం చేయాలని నిర్ణయించుకున్నాను:

$ stun stun.sipnet.ru

ఫలితం వచ్చింది:

STUN క్లయింట్ వెర్షన్ 0.97
ప్రాథమిక: ఇండిపెండెంట్ మ్యాపింగ్, ఇండిపెండెంట్ ఫిల్టర్, యాదృచ్ఛిక పోర్ట్, హెయిర్‌పిన్ అవుతుంది
రిటర్న్ విలువ 0x000002

సాహిత్య అనువాదం:
స్వతంత్ర మ్యాపింగ్ - స్వతంత్ర మ్యాపింగ్
స్వతంత్ర వడపోత - స్వతంత్ర వడపోత
యాదృచ్ఛిక పోర్ట్ - యాదృచ్ఛిక పోర్ట్
హెయిర్‌పిన్ ఉంటుంది - హెయిర్‌పిన్ ఉంటుంది
నా PCలో ఇదే విధమైన కమాండ్‌ని అమలు చేస్తున్నప్పుడు, నేను పొందాను:

STUN క్లయింట్ వెర్షన్ 0.97
ప్రాథమిక: ఇండిపెండెంట్ మ్యాపింగ్, పోర్ట్ డిపెండెంట్ ఫిల్టర్, యాదృచ్ఛిక పోర్ట్, హెయిర్‌పిన్ అవుతుంది
రిటర్న్ విలువ 0x000006

పోర్ట్ డిపెండెంట్ ఫిల్టర్ - పోర్ట్ డిపెండెంట్ ఫిల్టర్
కమాండ్ అవుట్‌పుట్ ఫలితాల్లో వ్యత్యాసం ఇంటర్నెట్ నుండి ప్యాకెట్‌లను ప్రసారం చేసే ప్రక్రియకు హోమ్ రౌటర్ "దాని సహకారం" చేస్తోందని సూచించింది, ఇది కంప్యూటర్‌లో ఆదేశాన్ని అమలు చేస్తున్నప్పుడు:

stun stun.sipnet.ru -p 11111 -v

నేను ఫలితాన్ని పొందుతున్నాను:

...
మ్యాప్డ్ అడ్రస్ = XX.1XX.1X4.2XX:4398
...

ఈ సమయంలో, UDP సెషన్ కొంతకాలం తెరవబడింది, ఈ సమయంలో మీరు UDP అభ్యర్థనను పంపినట్లయితే (ఉదాహరణకు: netcat XX.1XX.1X4.2XX 4398 -u), అప్పుడు అభ్యర్థన హోమ్ రూటర్‌కి వచ్చింది, అది దానిపై నడుస్తున్న TCPDump ద్వారా ధృవీకరించబడింది, కానీ అభ్యర్థన కంప్యూటర్‌కు చేరుకోలేదు - IPtables, రౌటర్‌లో NAT అనువాదకుడిగా, దానిని వదిలివేసింది.
ప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది
కానీ UDP అభ్యర్థన ప్రొవైడర్ యొక్క NAT ద్వారా ఆమోదించబడిన వాస్తవం విజయంపై ఆశను ఇచ్చింది. రూటర్ నా అధికార పరిధిలో ఉన్నందున, నేను UDP/11111 పోర్ట్‌ని కంప్యూటర్‌కు దారి మళ్లించడం ద్వారా సమస్యను పరిష్కరించాను:

iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX

దీనివల్ల నేను ఒక UDP సెషన్‌ను ప్రారంభించి, ఇంటర్నెట్‌లోని ఏ IP చిరునామా నుండైనా అభ్యర్థనలను స్వీకరించగలిగాను. ఆ సమయంలో, నేను ప్రారంభించాను OpenVPNUDP/11111 పోర్ట్‌లో వింటున్న (ముందుగా కాన్ఫిగర్ చేయబడిన) సర్వర్ కోసం, నేను స్మార్ట్‌ఫోన్‌లో బాహ్య IP చిరునామా మరియు పోర్ట్‌ను (XX.1XX.1X4.2XX:4398) పేర్కొన్నాను మరియు స్మార్ట్‌ఫోన్ నుండి కంప్యూటర్‌కు విజయవంతంగా కనెక్ట్ అయ్యాను. అయితే, ఈ అమలులో ఒక సమస్య ఎదురైంది: కనెక్షన్ ఏర్పడే వరకు నేను UDP సెషన్‌ను ఏదో ఒక విధంగా కొనసాగించవలసి వచ్చింది. OpenVPNక్లయింట్ నుండి సర్వర్‌కు, STUN క్లయింట్‌ను క్రమానుగతంగా ప్రారంభించే ఎంపిక నాకు నచ్చలేదు - నేను STUN సర్వర్‌లను అనవసరంగా లోడ్ చేయాలనుకోలేదు.
నేను ప్రవేశాన్ని కూడా గమనించాను"హెయిర్‌పిన్ ఉంటుంది - హెయిర్‌పిన్ ఉంటుంది", ఈ మోడ్

హెయిర్‌పిన్నింగ్ అనేది NAT వెనుక ఉన్న స్థానిక నెట్‌వర్క్‌లోని ఒక మెషీన్‌ను రూటర్ యొక్క బాహ్య చిరునామాలో అదే నెట్‌వర్క్‌లో మరొక మెషీన్‌ను యాక్సెస్ చేయడానికి అనుమతిస్తుంది.

ప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది
ఫలితంగా, నేను UDP సెషన్‌ను నిర్వహించే సమస్యను పరిష్కరించాను - నేను సర్వర్‌తో అదే కంప్యూటర్‌లో క్లయింట్‌ను ప్రారంభించాను.
ఇది ఇలా పనిచేసింది:

  • స్థానిక పోర్ట్ 11111లో STUN క్లయింట్‌ను ప్రారంభించింది
  • బాహ్య IP చిరునామా మరియు పోర్ట్ XX.1XX.1X4.2XX:4398తో ప్రతిస్పందనను పొందింది
  • స్మార్ట్‌ఫోన్‌లో కాన్ఫిగర్ చేయబడిన ఇమెయిల్ (ఏదైనా ఇతర సేవ సాధ్యమే)కి బాహ్య IP చిరునామా మరియు పోర్ట్‌తో డేటాను పంపింది
  • ప్రారంభించబడింది OpenVPN- UDP/11111 పోర్ట్‌లో వింటున్న కంప్యూటర్‌లోని సర్వర్
  • ప్రారంభించబడింది OpenVPN- కనెక్షన్ కోసం XX.1XX.1X4.2XX:4398ని పేర్కొంటున్న కంప్యూటర్‌లోని ఒక క్లయింట్
  • ఎప్పుడైనా ప్రారంభించబడింది OpenVPN- కనెక్షన్ కోసం IP చిరునామా మరియు పోర్ట్‌తో కూడిన స్మార్ట్‌ఫోన్‌లోని క్లయింట్ (నా విషయంలో, IP చిరునామా మారలేదు)

ప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది
ఈ విధంగా, నేను నా స్మార్ట్‌ఫోన్ నుండి నా కంప్యూటర్‌కు కనెక్ట్ అవ్వగలిగాను. ఈ ఏర్పాటు ఎవరినైనా కనెక్ట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. OpenVPN-క్లయింట్.

ఆచరణలో

ఇది పడుతుంది:

# apt install openvpn stun-client sendemail

కొన్ని స్క్రిప్ట్‌లు, కొన్ని కాన్ఫిగరేషన్ ఫైల్‌లు రాసి, అవసరమైన సర్టిఫికేట్‌లను రూపొందించిన తర్వాత (స్మార్ట్‌ఫోన్‌లోని క్లయింట్ సర్టిఫికేట్‌లతో మాత్రమే పనిచేస్తుంది కాబట్టి), మేము ఒక ప్రామాణిక ఇంప్లిమెంటేషన్‌ను పొందాము. OpenVPN-సర్వర్లు.

కంప్యూటర్‌లో ప్రధాన స్క్రిప్ట్

# cat vpn11.sh
#!/bin/bash
until [[ -n "$iftosrv" ]]; do echo "$(date) Определяю сетевой интерфейс"; iftosrv=`ip route get 8.8.8.8 | head -n 1 | sed 's|.*dev ||' | awk '{print $1}'`; sleep 5; done
ABSOLUTE_FILENAME=`readlink -f "$0"`
DIR=`dirname "$ABSOLUTE_FILENAME"`
localport=11111
until [[ $a ]]; do
	address=`stun stun.sipnet.ru -v -p $localport 2>&1 | grep "MappedAddress" | sort | uniq | head -n 1 | sed 's/:/ /g' | awk '{print $3" "$4}'`
        ip=`echo "$address" | awk {'print $1'}`
        port=`echo "$address" | awk {'print $2'}`
	srv="openvpn --config $DIR/server.conf --port $localport --daemon"
	$srv
	echo "$(date) Сервер запущен с внешним адресом $ip:$port"
	$DIR/sendemail.sh "OpenVPN-Server" "$ip:$port"
	sleep 1
	openvpn --config $DIR/client.conf --remote $ip --port $port
	echo "$(date) Cоединение клиента с сервером разорвано"
	for i in `ps xa | grep "$srv" | grep -v grep | awk '{print $1}'`; do
		kill $i && echo "$(date) Завершен процесс сервера $i ($srv)"
		done
	echo "Жду 15 сек"
	sleep 15
	done

ఇమెయిల్ ద్వారా డేటాను పంపడానికి స్క్రిప్ట్:

# cat sendemail.sh 
#!/bin/bash
from="От кого"
pass="Пароль"
to="Кому"
theme="$1"
message="$2"
server="smtp.yandex.ru:587"
sendEmail -o tls=yes -f "$from" -t "$to" -s "$server" -xu "$from" -xp "$pass" -u "$theme" -m "$message"

సర్వర్ కాన్ఫిగరేషన్ ఫైల్:

# cat server.conf
proto udp
dev tun
ca      /home/vpn11-srv/ca.crt
cert    /home/vpn11-srv/server.crt
key     /home/vpn11-srv/server.key
dh      /home/vpn11-srv/dh2048.pem
server 10.2.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
tls-server
tls-auth /home/vpn11-srv/ta.key 0
tls-timeout 60
auth    SHA256
cipher  AES-256-CBC
client-to-client
keepalive 10 30
comp-lzo
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
log /var/log/vpn11-server.log
verb 3
mute 20

క్లయింట్ కాన్ఫిగరేషన్ ఫైల్:

# cat client.conf
client
dev tun
proto udp
ca      "/home/vpn11-srv/ca.crt"
cert    "/home/vpn11-srv/client1.crt"
key     "/home/vpn11-srv/client1.key"
tls-client
tls-auth "/home/vpn11-srv/ta.key" 1
auth SHA256
cipher AES-256-CBC
auth-nocache
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
log /var/log/vpn11-clent.log
verb 3
mute 20
ping 10
ping-exit 30

ఉపయోగించి సర్టిఫికెట్లు రూపొందించబడ్డాయి ఈ వ్యాసం.
స్క్రిప్ట్‌ను అమలు చేస్తోంది:

# ./vpn11.sh

మొదట దీన్ని ఎక్జిక్యూటబుల్ చేయడం ద్వారా

# chmod +x vpn11.sh

స్మార్ట్ఫోన్ వైపు

అప్లికేషన్‌ను ఇన్‌స్టాల్ చేయడం ద్వారా OpenVPN కోసం Android, కాన్ఫిగరేషన్ ఫైల్, సర్టిఫికేట్‌లను కాపీ చేసి, దానిని కాన్ఫిగర్ చేసిన తర్వాత, ఇది ఇలా మారింది:
నేను నా స్మార్ట్‌ఫోన్‌లో నా ఇమెయిల్‌ని తనిఖీ చేస్తున్నానుప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది
నేను సెట్టింగ్‌లలో పోర్ట్ నంబర్‌ని ఎడిట్ చేస్తానుప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది
నేను క్లయింట్‌ను ప్రారంభించి కనెక్ట్ చేస్తానుప్రొవైడర్ యొక్క NAT వెనుక VPN సర్వర్‌ని అమలు చేస్తోంది

ఈ కథనాన్ని వ్రాస్తున్నప్పుడు, నేను నా కంప్యూటర్ నుండి కాన్ఫిగరేషన్‌ను రాస్ప్బెర్రీ పై 3కి బదిలీ చేసాను మరియు మొత్తం విషయాన్ని LTE మోడెమ్‌లో అమలు చేయడానికి ప్రయత్నించాను, కానీ అది పని చేయలేదు! కమాండ్ ఫలితం

# stun stun.ekiga.net -p 11111

STUN క్లయింట్ వెర్షన్ 0.97
ప్రాథమిక: ఇండిపెండెంట్ మ్యాపింగ్, పోర్ట్ డిపెండెంట్ ఫిల్టర్, యాదృచ్ఛిక పోర్ట్, హెయిర్‌పిన్ అవుతుంది
రిటర్న్ విలువ 0x000006

అంటే పోర్ట్ డిపెండెంట్ ఫిల్టర్ వ్యవస్థను ప్రారంభించడానికి అనుమతించలేదు.
కానీ హోమ్ ప్రొవైడర్ ఎటువంటి సమస్యలు లేకుండా రాస్ప్బెర్రీ పై 3లో సిస్టమ్ను ప్రారంభించడానికి అనుమతించింది.
వెబ్‌క్యామ్‌తో కలిపి, VLC కోసం
వెబ్‌క్యామ్ నుండి RTSP స్ట్రీమ్‌ను సృష్టించడం

$ cvlc v4l2:///dev/video0:chroma=h264 :input-slave=alsa://hw:1,0 --sout '#transcode{vcodec=x264,venc=x264{preset=ultrafast,profile=baseline,level=31},vb=2048,fps=12,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://10.2.0.1:8554/}' --no-sout-all --sout-keep

మరియు వీక్షణ కోసం స్మార్ట్‌ఫోన్‌లో VLC (స్ట్రీమ్ rtsp://10.2.0.1:8554/), ఇది మంచి రిమోట్ వీడియో నిఘా వ్యవస్థగా మారింది, మీరు సాంబాను కూడా ఇన్‌స్టాల్ చేయవచ్చు, VPN ద్వారా ట్రాఫిక్‌ను రూట్ చేయవచ్చు, మీ కంప్యూటర్‌ను రిమోట్‌గా నియంత్రించవచ్చు మరియు చాలా ఎక్కువ మరింత...

తీర్మానం

ఆచరణలో తేలిందేమిటంటే, అద్దెకు తీసుకున్న సర్వర్ లాగా, డబ్బు చెల్లించాల్సిన బాహ్య IP చిరునామా లేకుండానే మీరు ఒక VPN సర్వర్‌ను ఏర్పాటు చేసుకోవచ్చు. VPS / VDSకానీ అదంతా ప్రొవైడర్‌పై ఆధారపడి ఉంటుంది. వాస్తవానికి, నేను వివిధ ప్రొవైడర్ల గురించి మరియు వారు ఉపయోగించే NATల రకాల గురించి మరింత సమాచారం తెలుసుకోవాలనుకుంటున్నాను, కానీ అది కేవలం ఆరంభం మాత్రమే...
Спасибо!

మూలం: www.habr.com

DDoS రక్షణ, VPS VDS సర్వర్‌లతో సైట్‌ల కోసం నమ్మకమైన హోస్టింగ్‌ను కొనుగోలు చేయండి 🔥 DDoS రక్షణతో కూడిన నమ్మకమైన వెబ్‌సైట్ హోస్టింగ్, VPS VDS సర్వర్‌లను కొనండి | ProHoster