Պրովայդերի NAT-ի հետևում VPN սերվերի գործարկում

Հոդված այն մասին, թե ինչպես ես կարողացա գործարկել VPN սերվեր իմ տնային մատակարարի NAT-ի հետևում (առանց սպիտակ IP հասցեի). Անմիջապես վերապահում անեմ Այս իրականացման կատարումն ուղղակիորեն կախված է ձեր մատակարարի կողմից օգտագործվող NAT-ի տեսակից, ինչպես նաև երթուղիչից.
Այսպիսով, ես պետք է միացնեի իմ Android սմարթֆոնից իմ տնային համակարգչին, երկու սարքերը միացված են ինտերնետին պրովայդեր NAT-ների միջոցով, գումարած համակարգիչը միացված է տնային երթուղիչի միջոցով, որը նույնպես միանում է NAT-ին:
Սպիտակ IP հասցեով վարձակալված VPS/VDS-ի օգտագործմամբ դասական սխեման, ինչպես նաև մատակարարից սպիտակ IP հասցե վարձելը, հաշվի չի առնվել մի քանի պատճառներով:
Հաշվի առնելով փորձ անցյալ հոդվածներից, մի քանի փորձեր կատարելով մատակարարների STUN-ների և NAT-ների հետ: Ես որոշեցի մի փոքր փորձ անել՝ հրամանը գործարկելով OpenWRT որոնվածով աշխատող տնային երթուղիչի վրա.

$ stun stun.sipnet.ru

ստացավ արդյունք.

STUN հաճախորդի տարբերակը 0.97
Առաջնային. Անկախ քարտեզագրում, Անկախ զտիչ, պատահական միացք, մազակալ
Վերադարձի արժեքն է 0x000002

Բառացի թարգմանություն.
Անկախ քարտեզագրում - անկախ քարտեզագրում
Անկախ զտիչ - անկախ զտիչ
պատահական նավահանգիստ - պատահական նավահանգիստ
կլինի մազակալ - կլինի մազակալ
Աշխատելով նմանատիպ հրաման իմ համակարգչի վրա՝ ես ստացա.

STUN հաճախորդի տարբերակը 0.97
Հիմնական. Անկախ քարտեզագրում, նավահանգիստից կախված զտիչ, պատահական միացք, սանրվածք
Վերադարձի արժեքն է 0x000006

Port Dependent Filter - պորտից կախված զտիչ
Հրամանի ելքի արդյունքների տարբերությունը ցույց էր տալիս, որ տնային երթուղիչը «իր ներդրումն է ունենում» ինտերնետից փաթեթների փոխանցման գործընթացում, դա դրսևորվում է նրանով, որ համակարգչում հրամանը կատարելիս.

stun stun.sipnet.ru -p 11111 -v

Ես ստանում էի արդյունքը.

...
MappedAddress = 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 հասցեից: Այս պահին ես գործարկեցի OpenVPN սերվերը (նախկինում այն ​​կարգավորելով)՝ լսելով UDP/11111 պորտը, նշելով արտաքին IP հասցեն և պորտը (XX.1XX.1X4.2XX:4398) սմարթֆոնի վրա և հաջողությամբ միացա սմարթֆոնից դեպի համակարգիչը։ Բայց այս իրականացման ժամանակ խնդիր առաջացավ. անհրաժեշտ էր ինչ-որ կերպ պահպանել UDP նիստը, մինչև OpenVPN հաճախորդը միանա սերվերին; ինձ դուր չեկավ STUN հաճախորդը պարբերաբար գործարկելու տարբերակը. ես չէի ուզում վատնել բեռը: STUN սերվերները:
Ես նաև նկատեցի մուտքը «կլինի մազակալ - կլինի մազակալ», այս ռեժիմը

Hairpinning-ը թույլ է տալիս NAT-ի հետևում գտնվող լոկալ ցանցի մի մեքենայի մուտք գործել նույն ցանցի մեկ այլ սարք՝ երթուղիչի արտաքին հասցեով:

Պրովայդերի NAT-ի հետևում VPN սերվերի գործարկում
Արդյունքում, ես պարզապես լուծեցի UDP նիստի պահպանման խնդիրը. ես գործարկեցի հաճախորդը սերվերի հետ նույն համակարգչում:
Այն աշխատում էր այսպես.

  • գործարկեց STUN հաճախորդը տեղական նավահանգստում 11111
  • ստացել է պատասխան արտաքին 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 սերվերի գործարկում

Այս հոդվածը գրելիս ես իմ համակարգչից կոնֆիգուրացիան տեղափոխեցի Raspberry Pi 3 և փորձեցի ամբողջը գործարկել LTE մոդեմի վրա, բայց այն չաշխատեց: Հրամանի արդյունք

# stun stun.ekiga.net -p 11111

STUN հաճախորդի տարբերակը 0.97
Հիմնական. Անկախ քարտեզագրում, նավահանգիստից կախված զտիչ, պատահական միացք, սանրվածք
Վերադարձի արժեքն է 0x000006

արժեք Պորտից կախված զտիչ թույլ չտվեց համակարգի գործարկումը:
Բայց տնային մատակարարը թույլ տվեց, որ համակարգը գործարկվի Raspberry Pi 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 սմարթֆոնի վրա դիտելու համար (stream rtsp://10.2.0.1:8554/), պարզվեց, որ լավ հեռակառավարման տեսահսկման համակարգ է, կարող եք նաև տեղադրել Samba, երթևեկել երթևեկությունը VPN-ի միջոցով, հեռակա կարգով կառավարել ձեր համակարգիչը և այլն: ավելին...

Արտադրողականություն

Ինչպես ցույց է տվել պրակտիկան, VPN սերվեր կազմակերպելու համար դուք կարող եք անել առանց արտաքին IP հասցեի, որի համար պետք է վճարեք, ինչպես վարձակալված VPS/VDS-ի համար: Բայց ամեն ինչ կախված է մատակարարից: Իհարկե, ես ուզում էի ավելի շատ տեղեկություններ ստանալ օգտագործվող NAT-ների տարբեր մատակարարների և տեսակների մասին, բայց սա դեռ սկիզբն է...
Շնորհակալություն ձեր ուշադրության համար:

Source: www.habr.com

Добавить комментарий