Би хэрхэн эхлүүлж чадсан тухай нийтлэл 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 орчуулагчийн хувьд үүнийг орхисон.

Гэхдээ 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-ийн ард байрлах дотоод сүлжээнд байгаа нэг машиныг чиглүүлэгчийн гадаад хаягаар ижил сүлжээнд байгаа өөр машинд хандах боломжийг олгодог.

Үүний үр дүнд би зүгээр л UDP сессийг хадгалах асуудлыг шийдсэн - би сервертэй нэг компьютер дээр үйлчлүүлэгчийг ажиллуулсан.
Энэ нь дараах байдлаар ажилласан:
- орон нутгийн порт 11111 дээр STUN клиентийг эхлүүлсэн
- гадаад IP хаяг болон XX.1XX.1X4.2XX:4398 порттой хариу хүлээн авсан
- ухаалаг гар утсан дээр тохируулсан гадаад IP хаяг, порт бүхий өгөгдлийг имэйл рүү илгээсэн (бусад ямар ч үйлчилгээ боломжтой).
- эхлүүлсэн OpenVPN- компьютер дээрх сервер UDP/11111 порт дээр сонсож байна
- эхлүүлсэн OpenVPN- холболтын хувьд XX.1XX.1X4.2XX:4398 гэж заасан компьютер дээрх клиент
- ямар ч үед нээгдсэн OpenVPN- холболтын хувьд IP хаяг болон порттой (миний хувьд IP хаяг өөрчлөгдөөгүй) ухаалаг гар утсан дээрх үйлчлүүлэгч

Ингэснээр би ухаалаг гар утсаараа компьютертээ холбогдох боломжтой болсон. Энэхүү хэрэгжилт нь танд хэнийг ч холбох боломжийг олгоно. 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.confproto 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.confclient
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, тохиргооны файл, гэрчилгээг хуулж, тохируулсны дараа дараах байдалтай болсон.
Би ухаалаг гар утсаараа имэйлээ шалгадаг
Би тохиргоонд портын дугаарыг засдаг
Би үйлчлүүлэгчийг ажиллуулж, холбогдоно
Энэ нийтлэлийг бичиж байхдаа би тохиргоог компьютерээсээ Raspberry Pi 3 руу шилжүүлж, LTE модем дээр бүгдийг нь ажиллуулахыг оролдсон боловч бүтсэнгүй! Тушаалын үр дүн
# stun stun.ekiga.net -p 11111STUN үйлчлүүлэгчийн хувилбар 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
