Provayderin NAT-ının arxasında VPN serverini başlatmaq

Məqalə, ev provayderinin NAT-ı arxasında (ağ IP ünvanı olmadan) necə başladığını izah edir. VPN-serverlərini İlk növbədə, bu reallaşmanın işləmə qabiliyyətinin provayderinizin istifadə etdiyi NAT tipindən, eləcə də routerdən birbaşa asılı olduğunu qeyd etmək istəyirəm. Beləcə, Android smartfonumdan evimdəki kompüterə qoşulmaq ehtiyacı yarandı; hər iki cihaz internetə provayderin NAT-ı vasitəsilə qoşulub, üstəlik kompüter ev routerinə qoşulub ki, o da bağlantıları NAT-layır..
Klassik sxem, ağ IP ünvanı olan kirayə VPS/VDS istifadə edilməsi və provayderdən ağ IP ünvanı icarə edilməsi bir neçə səbəbə görə nəzərdən keçirilmədi.
Təcrübələrə əsaslanaraq, provayderlərin STUN-ları və NAT-ları ilə bir neçə sınaq apararaq, ev routerimdə OpenWRT proqram təminatında işləyən bir komanda yerinə yetirməyə qərar verdim:
$ stun stun.sipnet.ru Nəticəni əldə etdim:STUN müştəri versiyası 0.97

Əsas: Müstəqil xəritələmə, Müstəqil filtr, təsadüfi port, hairpin edəcək

Qaytarma dəyəri

Düzbucaqlı tərcümə:
Müstəqil xəritələmə — müstəqil xəritələmə
Müstəqil filtr — müstəqil filtr 0x000002

Təsadüfi port — təsadüfi port
hairpin edəcək — şpilka olacaq
Eyni komandayı öz PC-də yerinə yetirdikdə, mən:
Əsas: Müstəqil xəritələmə, Port asılı filtr, təsadüfi port, hairpin edəcək
Port asılı filtr — portdan asılı filtr
Komanda nəticələrinin fərqi, ev routerinin internet paketlərinin tərcüməsinə „öz töhfəsini“ verdiyini göstərirdi, bu, komputerdə komandayı yerinə yetirdikdə özünü göstərirdi:

Düzbucaqlı tərcümə:
stun stun.sipnet.ru -p 11111 -v
Müstəqil filtr — müstəqil filtr 0x000006

Mən belə nəticə əldə etdim:
Xəritələşdirilmiş Ünvan = XX.1XX.1X4.2XX:4398

Bu dəqiqədə, bir müddət üçün UDP seansı açıldı; əgər bu dəqiqədə UDP sorğusu göndərsəm (məsələn: netcat XX.1XX.1X4.2XX 4398 -u), o zaman sorğu ev routerinə gəldi ki, bunu TCPDump-da təsdiqlədim, amma sorğu kompüterə çatmadı — routerdəki IPtables NAT tərcüməçisi onu atdı.

Amma provayderin NAT-ı vasitəsilə UDP sorğusunun keçməsi, müvəffəqiyyət ümid verdiyi üçün mənə bir ümid verdi. Router mənim yurisdiksiyamdadır və mən UDP/11111 portunu kompüterə yönləndirməklə problemi həll etdim:


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

Bununla, internetdən hər hansı bir IP ünvanından UDP seansını başlatma və sorğuları qəbul etmə imkanını əldə etdim. Bu dəqiqədə, OpenVPN-serverini (öncə konfiqurasiya etdikdən sonra) UDP/11111 portsunda dinləmək üçün başladım, smartfonda xarici IP ünvanını və portu (XX.1XX.1X4.2XX:4398) göstəriyərək, smartfondan kompüterə uğurla qoşuldum. Lakin bu reallaşmada bir problem meydana gəldi; OpenVPN müştərisinin serverə qoşulması üçün UDP seansını saxlamaq lazım idi; STUN müştərisini dövri olaraq işə salmaq mənim üçün uyğun gəlmədi — STUN serverlərini boşuna yükləmək istəmirdim.
Provayder NAT-ının arxasında VPN-serveri işə salmaq
Həmçinin, "

«

bu rejim
«Port asılı filtr — portdan asılı filtr»

Hairpinning bir NAT altında olan yerel ağdaki bir makinenin, aynı ağdaki başka bir makineye yönlendirici dış adresi üzerinden erişim sağlamasını mümkün kılar.

Provayder NAT-ının arxasında VPN-serveri işə salmaq
Sonuç olarak, UDP oturumu tutma sorununu basitçe çözdüm — bu aynı bilgisayarda sunucuyla birlikte istemciyi başlatarak.
Bu şekilde çalıştı:

  • yerel 11111 portu ile STUN istemcisini başlattım
  • dış IP adresi ve XX.1XX.1X4.2XX:4398 portu ile yanıt aldım
  • dış IP adresi ve port ile verileri, akıllı telefona ayarlanmış bir e-posta hizmetine (herhangi bir başka hizmet de olabilir) gönderdim
  • UDP/11111 portunu dinleyen bilgisayarda OpenVPN sunucusunu başlattım
  • XX.1XX.1X4.2XX:4398 belirtisi ile bilgisayarda OpenVPN istemcisini başlattım
  • Herhangi bir zamanda, IP adresi ve porta (benim durumumda IP adresi değişmemişti) belirtisi ile akıllı telefonda OpenVPN istemcisini başlattım

Provayder NAT-ının arxasında VPN-serveri işə salmaq
Bu şekilde, akıllı telefondan bilgisayarıma bağlanabilme imkanı elde ettim. Bu uygulama, herhangi bir OpenVPN istemcisinin bağlanmasına olanak tanır.

Təcrübə

Gerekli olacak:

# apt install openvpn stun-client sendemail

Birkaç betik yazdıktan, birkaç yapılandırma dosyası oluşturduktan ve gerekli sertifikaları ürettikten sonra (çünkü akıllı telefondaki istemci yalnızca sertifikalarla çalışıyor), sıradan bir OpenVPN sunucu uygulaması elde ettim.

Bilgisayardaki ana betik

# 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

Verileri e-posta ile gönderen betik:

# 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"

Sunucu yapılandırma dosyası:

# 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

İstemci yapılandırma dosyası:

# 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-client.log
verb 3
mute 20
ping 10
ping-exit 30

Sertifikaların oluşturulması sırasında bu makalede.
Betik çalıştırma:

# ./vpn11.sh

Öncelikle çalıştırılabilir hale getirdim

# chmod +x vpn11.sh

Akıllı telefonda

Uygulama kurarak OpenVPN for Android, yapılandırma dosyasını, sertifikaları kopyalayarak ve ayarlayarak şöyle oldu:
Akıllı telefonda e-postayı kontrol ediyorumProvayder NAT-ının arxasında VPN-serveri işə salmaq
Ayarlarımda port numarasını düzeltiyorumProvayder NAT-ının arxasında VPN-serveri işə salmaq
İstemciyi başlatıyorum ve bağlanıyorumProvayder NAT-ının arxasında VPN-serveri işə salmaq

Makale yazarken, yapılandırmayı bilgisayardan Raspberry Pi 3'e taşımış ve bunu LTE modemi üzerinde çalıştırmayı denemiştim, ancak olmadı! Komutun sonucu

# stun stun.ekiga.net -p 11111

Düzbucaqlı tərcümə:
stun stun.sipnet.ru -p 11111 -v
Müstəqil filtr — müstəqil filtr 0x000006

değer Port Dependent Filter sistemin çalışmasını engelledi.
Ancak evdeki sağlayıcı, Raspberry Pi 3 üzerinde sistemin çalışmasına izin verdi.
Bir web kamerası ile, VLC kullanarak
web kamerasından RTSP akışı oluşturmak için

$ 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 tətbiqi ilə smartfondan görüntü baxışı (rtsp://10.2.0.1:8554/) üçün mən yaxşı bir video nəzarət sistemi yarada bildim, eyni zamanda Samba quraşdıra, trafiki VPN üzərindən yönləndirə, kompüteri uzaqdan idarə edə və daha çox şey edə bilərəm…

Çıktı

Təcrübə göstərdi ki, VPN-server təşkil etmək üçün ödənişli xarici IP ünvanına ehtiyac olmaya bilər, eləcə də icarəyə götürülən IP ünvanına… VPS/VDSAmma hər şey provayderdən asılıdır. Əlbəttə, müxtəlif provayderlər və istifadədə olan NAT tipləri haqqında daha çox məlumat almaq istədim, amma bu yalnız başlanğıcdır…
Diqqətiniz üçün təşəkkür edirəm!

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster