Үйлчилгээ үзүүлэгчийн NAT-ийн ард VPN сервер ажиллуулж байна

Би хэрхэн эхлүүлж чадсан тухай нийтлэл VPN сервер гэрийн үйлчилгээ үзүүлэгчийн NAT-ийн ард (нийтийн IP хаяггүйгээр). Одоо шууд тодруулъя: Энэхүү хэрэгжилтийн гүйцэтгэл нь таны үйлчилгээ үзүүлэгч, чиглүүлэгчийн ашигладаг NAT-ийн төрлөөс шууд хамаарна.
Тиймээс би өөрийнхөөсөө холбогдох шаардлагатай болсон Android- ухаалаг гар утсыг гэрийн компьютерт холбоход хоёр төхөөрөмж хоёулаа NAT үйлчилгээ үзүүлэгчээр дамжуулан интернетэд холбогдсон бөгөөд компьютер нь гэрийн чиглүүлэгчээр холбогдсон бөгөөд энэ нь мөн холболтуудыг NAT болгодог.
Цагаан IP хаягтай түрээсийн VPS/VDS ашиглах, мөн үйлчилгээ үзүүлэгчээс цагаан IP хаяг түрээслэх сонгодог схемийг хэд хэдэн шалтгааны улмаас авч үзээгүй.
анхааралдаа авч байна өмнөх нийтлэлүүдийн туршлага, үйлчилгээ үзүүлэгчдийн STUN болон NAT-уудтай хэд хэдэн туршилт хийсэн. Би OpenWRT програм хангамжийг ажиллуулж байгаа гэрийн чиглүүлэгч дээр тушаал ажиллуулж бага зэрэг туршилт хийхээр шийдсэн:

$ stun stun.sipnet.ru

үр дүнд хүрсэн:

STUN үйлчлүүлэгчийн хувилбар 0.97
Анхдагч: Бие даасан зураглал, бие даасан шүүлтүүр, санамсаргүй порт, үсний хавчаар
Буцах утга нь 0x000002

Шууд орчуулга:
Independent Mapping - бие даасан зураглал
Бие даасан шүүлтүүр - бие даасан шүүлтүүр
санамсаргүй порт - санамсаргүй порт
үсний хавчаар болно - үсний хавчаар байх болно
Үүнтэй төстэй командыг компьютер дээрээ ажиллуулснаар би:

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 серверүүдийг шаардлагагүйгээр ачаалахыг хүсээгүй.
Би ч гэсэн оруулгыг анзаарсан "үсний хавчаар болно - үсний хавчаар байх болно", энэ горим

Үсний хавчаар нь 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 сервер ажиллуулж байна

Энэ нийтлэлийг бичиж байхдаа би тохиргоог компьютерээсээ 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-ийн төрлүүдийн талаар илүү их мэдээлэл авахыг хүсч байна, гэхдээ энэ бол зөвхөн эхлэл нь...
Таны анхаарлын төвд баярлалаа!

Эх сурвалж: www.habr.com

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster