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
$ 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ü.
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ç 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.
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
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
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 ediyorum
Ayarlarda port numarasını düzenliyorum
İstemciyi başlatıyorum ve bağlanıyorum
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