Sağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma

Ev sağlayıcımın NAT'ının arkasında (beyaz IP adresi olmadan) bir VPN sunucusunu nasıl çalıştırmayı başardığımla ilgili bir makale. Hemen rezervasyon yaptırayım: bu uygulamanın performansı doğrudan sağlayıcınız tarafından kullanılan NAT türüne ve yönlendiriciye bağlıdır.
Bu nedenle, Android akıllı telefonumdan ev bilgisayarıma bağlanmam gerekiyordu; her iki cihaz da internete sağlayıcı NAT'ları aracılığıyla bağlı, ayrıca bilgisayar da NAT bağlantıları olan bir ev yönlendiricisi aracılığıyla bağlı.
Beyaz bir IP adresine sahip kiralık bir VPS/VDS kullanan ve bir sağlayıcıdan beyaz bir IP adresi kiralayan klasik plan, çeşitli nedenlerden dolayı dikkate alınmadı.
dikkate alarak geçmiş makalelerden edinilen deneyimlersağlayıcıların STUN'ları ve NAT'leri ile çeşitli deneyler gerçekleştirdik. Komutu OpenWRT ürün yazılımını çalıştıran bir ev yönlendiricisinde çalıştırarak küçük bir deney yapmaya karar verdim:

$ stun stun.sipnet.ru

sonucu aldım:

STUN istemci sürümü 0.97
Birincil: Bağımsız Haritalama, Bağımsız Filtre, rastgele bağlantı noktası, keskin toka
Dönüş değeri: 0x000002

Edebi çeviri:
Bağımsız Haritalama - bağımsız haritalama
Bağımsız Filtre - bağımsız filtre
rastgele bağlantı noktası - rastgele bağlantı noktası
saç tokası olacak - bir saç tokası olacak
Benzer bir komutu bilgisayarımda çalıştırdığımda şunu elde ettim:

STUN istemci sürümü 0.97
Birincil: Bağımsız Haritalama, Bağlantı Noktasına Bağlı Filtre, rastgele bağlantı noktası, keskin bir şekilde sabitlenir
Dönüş değeri: 0x000006

Bağlantı Noktasına Bağlı Filtre - bağlantı noktasına bağlı filtre
Komut çıktısının sonuçlarındaki fark, ev yönlendiricisinin İnternet'ten paket aktarma sürecine “katkıda bulunduğunu” gösterdi; bu, bilgisayarda komut yürütülürken şu şekilde ortaya çıktı:

stun stun.sipnet.ru -p 11111 -v

Şu sonucu alıyordum:

...
EşlenenAdres = XX.1XX.1X4.2XX:4398
...

şu anda bir süredir bir UDP oturumu açıldı, şu anda bir UDP isteği gönderirseniz (örneğin: netcat XX.1XX.1X4.2XX 4398 -u), o zaman istek ev yönlendiricisine geldi; üzerinde çalışan TCPDump tarafından onaylandı, ancak istek bilgisayara ulaşmadı - yönlendiricideki bir NAT çeviricisi olarak IPtables onu düşürdü.
Sağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma
Ancak UDP isteğinin sağlayıcının NAT'ından geçmesi başarı için umut verdi. Yönlendirici benim yetki alanımda bulunduğundan, UDP/11111 bağlantı noktasını bilgisayara yeniden yönlendirerek sorunu çözdüm:

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

Böylece UDP oturumu başlatıp internetten herhangi bir IP adresinden istek alabildim. Şu anda, UDP/11111 bağlantı noktasını dinleyen OpenVPN sunucusunu (daha önce yapılandırmıştım) başlattım, akıllı telefondaki harici IP adresini ve bağlantı noktasını (XX.1XX.1X4.2XX:4398) belirttim ve akıllı telefondan başarılı bir şekilde bağlandım. bilgisayar. Ancak bu uygulamada bir sorun ortaya çıktı: OpenVPN istemcisi sunucuya bağlanana kadar UDP oturumunu bir şekilde sürdürmek gerekiyordu; STUN istemcisini periyodik olarak başlatma seçeneğini beğenmedim - yükü boşa harcamak istemedim STUN sunucuları.
Ayrıca “girişini de fark ettim”saç tokası olacak - bir saç tokası olacak", bu mod

Saç tokalama, NAT arkasındaki yerel ağdaki bir makinenin, yönlendiricinin harici adresinden aynı ağdaki başka bir makineye erişmesine olanak tanır.

Sağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma
Sonuç olarak, UDP oturumunu sürdürme sorununu çözdüm - istemciyi sunucuyla aynı bilgisayarda başlattım.
Bu şekilde çalıştı:

  • STUN istemcisini yerel bağlantı noktası 11111'de başlattı
  • harici bir IP adresi ve XX.1XX.1X4.2XX:4398 bağlantı noktasını içeren bir yanıt alındı
  • akıllı telefonda yapılandırılmış harici bir IP adresi ve e-postaya bağlantı noktası (başka herhangi bir hizmet mümkündür) ile gönderilen veriler
  • UDP/11111 bağlantı noktasını dinleyen bir bilgisayarda OpenVPN sunucusunu başlattı
  • bağlantı için XX.1XX.1X4.2XX:4398'i belirten bilgisayarda OpenVPN istemcisini başlattı
  • herhangi bir zamanda akıllı telefonda bağlanmak için IP adresini ve bağlantı noktasını (benim durumumda IP adresi değişmedi) belirten OpenVPN istemcisini başlattım

Sağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma
Bu şekilde akıllı telefonumdan bilgisayarıma bağlanabildim. Bu uygulama herhangi bir OpenVPN istemcisine bağlanmanıza olanak tanır.

Uygulama

İhtiyacınız olanlar:

# apt install openvpn stun-client sendemail

Birkaç komut dosyası, birkaç yapılandırma dosyası yazdıktan ve gerekli sertifikaları oluşturduktan sonra (akıllı telefondaki istemci yalnızca sertifikalarla çalıştığı için), bir OpenVPN sunucusunun olağan uygulamasını elde ettik.

Bilgisayardaki ana komut dosyası

# 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-postayla göndermek için komut dosyası:

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

Sertifikalar kullanılarak oluşturuldu Bu makalede.
Komut dosyasını çalıştırma:

# ./vpn11.sh

İlk önce onu çalıştırılabilir hale getirerek

# chmod +x vpn11.sh

Akıllı telefon tarafında

Uygulamayı yükleyerek Android için OpenVPN, yapılandırma dosyasını, sertifikaları kopyalayıp yapılandırdıktan sonra şu şekilde ortaya çıktı:
Akıllı telefonumdan e-postalarımı kontrol ediyorumSağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma
Ayarlarda port numarasını düzenliyorumSağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma
İstemciyi başlatıyorum ve bağlanıyorumSağlayıcının NAT'ının arkasında bir VPN sunucusu çalıştırma

Bu yazıyı yazarken bilgisayarımdaki konfigürasyonu Raspberry Pi 3'e aktardım ve tümünü LTE modem üzerinde çalıştırmayı denedim ama olmadı! Komut Sonucu

# stun stun.ekiga.net -p 11111

STUN istemci sürümü 0.97
Birincil: Bağımsız Haritalama, Bağlantı Noktasına Bağlı Filtre, rastgele bağlantı noktası, keskin bir şekilde sabitlenir
Dönüş değeri: 0x000006

değer Bağlantı Noktasına Bağlı Filtre sistemin başlatılmasına izin vermedi.
Ancak ev sağlayıcısı sistemin Raspberry Pi 3'te sorunsuz bir şekilde başlamasına izin verdi.
Bir web kamerasıyla birlikte, VLC ile
web kamerasından RTSP akışı oluşturma

$ 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

ve görüntüleme için bir akıllı telefonda VLC (stream rtsp://10.2.0.1:8554/), iyi bir uzaktan video gözetim sistemi olduğu ortaya çıktı, ayrıca Samba'yı kurabilir, trafiği VPN üzerinden yönlendirebilir, bilgisayarınızı uzaktan kontrol edebilir ve çok daha fazlasını yapabilirsiniz. Daha...

Aviator apk

Uygulamada görüldüğü gibi, bir VPN sunucusu düzenlemek için, tıpkı kiralık bir VPS/VDS'de olduğu gibi, ödemeniz gereken harici bir IP adresi olmadan da yapabilirsiniz. Ancak her şey sağlayıcıya bağlıdır. Elbette farklı sağlayıcılar ve kullanılan NAT türleri hakkında daha fazla bilgi almak istedim ama bu sadece başlangıç...
Teşekkürler!

Kaynak: habr.com

Yorum ekle