Qanday qilib men uy provayderimning NAT orqasida (oq IP-manzilsiz) VPN serverini ishga tushirganim haqidagi maqola. Darhol band qilishimga ruxsat bering: bu ushbu dasturning ishlashi to'g'ridan-to'g'ri provayderingiz, shuningdek router tomonidan ishlatiladigan NAT turiga bog'liq.
Shunday qilib, men Android smartfonimdan uy kompyuterimga ulanishim kerak edi, ikkala qurilma ham NAT provayderlari orqali Internetga ulangan, shuningdek, kompyuter uy router orqali ulangan, u ham NATs ulanishlari.
Oq IP-manzilga ega ijaraga olingan VPS/VDS-dan foydalanadigan klassik sxema, shuningdek, provayderdan oq IP-manzilni ijaraga olish bir necha sabablarga ko'ra ko'rib chiqilmadi.
Hisobga olgan holda
$ stun stun.sipnet.ru
natija oldi:
STUN mijoz versiyasi 0.97
Birlamchi: Mustaqil xaritalash, Mustaqil filtr, tasodifiy port, soch turmagi
Qaytish qiymati 0x000002
So'zma-so'z tarjimasi:
Independent Mapping - mustaqil xaritalash
Mustaqil filtr - mustaqil filtr
tasodifiy port - tasodifiy port
soch turmagi bo'ladi - soch turmagi bo'ladi
Shaxsiy kompyuterimda shunga o'xshash buyruqni ishga tushirib, men oldim:
STUN mijoz versiyasi 0.97
Birlamchi: Mustaqil xaritalash, Portga bog'liq filtr, tasodifiy port, soch turmagi
Qaytish qiymati 0x000006
Portga bog'liq filtr - portga bog'liq filtr
Buyruqning chiqishi natijalaridagi farq uy routeri Internetdan paketlarni uzatish jarayoniga "o'z hissasini" qo'shayotganligini ko'rsatdi; bu kompyuterda buyruqni bajarishda namoyon bo'ldi:
stun stun.sipnet.ru -p 11111 -v
Men natijaga erishdim:
...
MappedAddress = XX.1XX.1X4.2XX:4398
...
Ayni paytda UDP seansi biroz vaqt ochildi, agar siz hozirda UDP so'rovini yuborsangiz (masalan: netcat XX.1XX.1X4.2XX 4398 -u), so'rov uy routerga keldi. unda ishlaydigan TCPDump tomonidan tasdiqlangan, ammo so'rov kompyuterga etib bormadi - IPtables, routerda NAT tarjimoni sifatida uni tashlab yubordi.
Ammo UDP so'rovi provayderning NAT orqali o'tganligi muvaffaqiyatga umid qildi. Router mening yurisdiktsiyamda joylashganligi sababli, men UDP/11111 portini kompyuterga yo'naltirish orqali muammoni hal qildim:
iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX
Shunday qilib, men UDP seansini boshlashga va istalgan IP manzildan Internetdan so'rovlarni qabul qilishga muvaffaq bo'ldim. Ayni paytda men UDP/11111 portini tinglovchi OpenVPN-serverni ishga tushirdim (uni avvaldan sozlaganman), smartfonda tashqi IP-manzil va portni (XX.1XX.1X4.2XX:4398) ko'rsatdim va smartfondan muvaffaqiyatli ulandim. Kompyuter. Ammo bu amalga oshirishda muammo yuzaga keldi: OpenVPN mijozi serverga ulanmaguncha qandaydir tarzda UDP seansini saqlab turish kerak edi; Menga STUN mijozini vaqti-vaqti bilan ishga tushirish varianti yoqmadi - yukni behuda sarflashni xohlamadim. STUN serverlari.
Men ham yozuvga e'tibor qaratdim "
Soch kesish NAT orqasidagi mahalliy tarmoqdagi bitta mashinaga routerning tashqi manzilidagi bir tarmoqdagi boshqa mashinaga kirish imkonini beradi.
Natijada, men shunchaki UDP seansini saqlash muammosini hal qildim - men mijozni server bilan bir xil kompyuterda ishga tushirdim.
Bu shunday ishladi:
- 11111 mahalliy portida STUN mijozini ishga tushirdi
- tashqi IP manzili va XX.1XX.1X4.2XX:4398 porti bilan javob oldi
- smartfonda sozlangan tashqi IP-manzil va port bilan ma'lumotlarni elektron pochtaga yubordi (har qanday boshqa xizmat ham mumkin).
- UDP/11111 portini tinglovchi kompyuterda OpenVPN serverini ishga tushirdi
- ulanish uchun XX.1XX.1X4.2XX:4398 ko'rsatuvchi kompyuterda OpenVPN mijozini ishga tushirdi.
- istalgan vaqtda ulanish uchun smartfonda IP-manzil va portni (mening holimda IP-manzil o'zgarmagan) ko'rsatuvchi OpenVPN mijozini ishga tushirdi.
Shu tarzda men smartfonimdan kompyuterimga ulanishga muvaffaq bo'ldim. Ushbu dastur har qanday OpenVPN mijozini ulash imkonini beradi.
Amaliyot
Siz kerak bo'ladi:
# apt install openvpn stun-client sendemail
Bir nechta skriptlarni, bir nechta konfiguratsiya fayllarini yozib, kerakli sertifikatlarni yaratgandan so'ng (chunki smartfondagi mijoz faqat sertifikatlar bilan ishlaydi), biz OpenVPN serverining odatiy amaliyotiga ega bo'ldik.
Kompyuterda asosiy skript
# 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
Elektron pochta orqali ma'lumotlarni yuborish uchun skript:
# 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"
Server konfiguratsiya fayli:
# 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
Mijoz konfiguratsiya fayli:
# 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
Sertifikatlar yordamida yaratilgan
Skriptni ishga tushirish:
# ./vpn11.sh
Avval uni bajariladigan qilish orqali
# chmod +x vpn11.sh
Smartfon tomonida
Ilovani o'rnatish orqali Android uchun OpenVPN, konfiguratsiya faylini, sertifikatlarni nusxa ko'chirgan va uni sozlagandan so'ng, shunday bo'ldi:
Men elektron pochtamni smartfonimda tekshiraman
Sozlamalarda port raqamini tahrir qilaman
Men mijozni ishga tushiraman va ulanaman
Ushbu maqolani yozish paytida men konfiguratsiyani kompyuterimdan Raspberry Pi 3 ga o'tkazdim va LTE modemida hamma narsani ishga tushirishga harakat qildim, lekin u ishlamadi! Buyruq natijasi
# stun stun.ekiga.net -p 11111
STUN mijoz versiyasi 0.97
Birlamchi: Mustaqil xaritalash, Portga bog'liq filtr, tasodifiy port, soch turmagi
Qaytish qiymati 0x000006
ma'no Portga bog'liq filtr tizimni ishga tushirishga ruxsat bermadi.
Ammo uy provayderi tizimni Raspberry Pi 3 da muammosiz ishga tushirishga ruxsat berdi.
VLC uchun veb-kamera bilan birgalikda
veb-kameradan RTSP oqimini yaratish
$ 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
va ko'rish uchun smartfonda VLC (stream rtsp://10.2.0.1:8554/), bu yaxshi masofaviy video kuzatuv tizimi bo'lib chiqdi, siz Samba-ni o'rnatishingiz, VPN orqali trafikni yo'naltirishingiz, kompyuteringizni masofadan boshqarishingiz va boshqalar. Ko'proq...
xulosa
Amaliyot shuni ko'rsatadiki, VPN serverini tashkil qilish uchun siz ijaraga olingan VPS/VDS kabi to'lashingiz kerak bo'lgan tashqi IP-manzilsiz ham qilishingiz mumkin. Ammo barchasi provayderga bog'liq. Albatta, men turli xil provayderlar va ishlatiladigan NAT turlari haqida ko'proq ma'lumot olishni xohlardim, ammo bu faqat boshlanishi...
E'tiboringiz uchun tashakkur!
Manba: www.habr.com