Izvajanje strežnika VPN za ponudnikovim NAT

Članek o tem, kako mi je uspelo zagnati strežnik VPN za NAT domačega ponudnika (brez belega naslova IP). Naj takoj rezerviram: to Učinkovitost te izvedbe je neposredno odvisna od tipa NAT, ki ga uporablja vaš ponudnik, pa tudi od usmerjevalnika.
Torej, moral sem se povezati iz svojega pametnega telefona Android z domačim računalnikom, obe napravi sta povezani z internetom prek NAT ponudnika, poleg tega je računalnik povezan prek domačega usmerjevalnika, ki prav tako povezuje NAT.
Klasična shema z uporabo zakupljenega VPS/VDS z belim IP naslovom, kot tudi najem belega IP naslova pri ponudniku, nista bila upoštevana iz več razlogov.
Ob upoštevanju izkušnje iz preteklih člankov, ki je izvedel več poskusov s STUN in NAT ponudnikov. Odločil sem se, da naredim majhen poskus, tako da zaženem ukaz na domačem usmerjevalniku, ki uporablja programsko opremo OpenWRT:

$ stun stun.sipnet.ru

dobil rezultat:

Odjemalec STUN različica 0.97
Primarno: neodvisno preslikavo, neodvisni filter, naključna vrata, bo lasje
Povratna vrednost je 0x000002

Dobesedni prevod:
Independent Mapping - neodvisno preslikavo
Independent Filter - neodvisni filter
naključna vrata - naključna vrata
bo lasnica - bo lasnica
Z izvajanjem podobnega ukaza na svojem računalniku sem dobil:

Odjemalec STUN različica 0.97
Primarno: neodvisno preslikavo, filter, odvisen od vrat, naključna vrata, bo pripeta
Povratna vrednost je 0x000006

Port Dependent Filter - filter, odvisen od vrat
Razlika v rezultatih izhoda ukaza je pokazala, da domači usmerjevalnik daje "svoj prispevek" k procesu prenosa paketov iz interneta; to se je pokazalo v dejstvu, da pri izvajanju ukaza v računalniku:

stun stun.sipnet.ru -p 11111 -v

Dobil sem rezultat:

...
Preslikani naslov = XX.1XX.1X4.2XX:4398
...

v tem trenutku je bila nekaj časa odprta seja UDP, če v tem trenutku pošljete zahtevo UDP (na primer: netcat XX.1XX.1X4.2XX 4398 -u), potem je zahteva prišla na domači usmerjevalnik, ki je bil potrdil TCPDump, ki se izvaja na njem, vendar zahteva ni dosegla računalnika - IPtables, kot prevajalnik NAT na usmerjevalniku, jo je spustil.
Izvajanje strežnika VPN za ponudnikovim NAT
Toda že dejstvo, da je UDP zahteva prešla skozi NAT ponudnika, je vlivalo upanje na uspeh. Ker se usmerjevalnik nahaja v moji pristojnosti, sem težavo rešil tako, da sem vrata UDP/11111 preusmeril na računalnik:

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

Tako sem lahko začel sejo UDP in prejemal zahteve iz interneta s katerega koli naslova IP. V tem trenutku sem zagnal strežnik OpenVPN (poprej sem ga konfiguriral), ki posluša vrata UDP/11111, na pametnem telefonu navedel zunanji naslov IP in vrata (XX.1XX.1X4.2XX:4398) ter se uspešno povezal s pametnega telefona na Računalnik. Toda pri tej izvedbi se je pojavila težava: nekako je bilo treba vzdrževati sejo UDP, dokler se odjemalec OpenVPN ne poveže s strežnikom; ni mi bila všeč možnost občasnega zagona odjemalca STUN - nisem želel zapravljati obremenitve strežniki STUN.
Opazil sem tudi zapis "bo lasnica - bo lasnica", ta način

Pripenjanje omogoča enemu stroju v lokalnem omrežju za NAT dostop do drugega stroja v istem omrežju na zunanjem naslovu usmerjevalnika.

Izvajanje strežnika VPN za ponudnikovim NAT
Posledično sem preprosto rešil problem vzdrževanja seje UDP - odjemalca sem zagnal na istem računalniku s strežnikom.
Delovalo je takole:

  • zagnal odjemalca STUN na lokalnih vratih 11111
  • je prejel odgovor z zunanjim naslovom IP in vrati XX.1XX.1X4.2XX:4398
  • poslane podatke z zunanjim naslovom IP in vrati za e-pošto (katera koli druga storitev je možna), konfiguriranim na pametnem telefonu
  • zagnal strežnik OpenVPN na računalniku, ki posluša vrata UDP/11111
  • zagnal odjemalca OpenVPN na računalniku, pri čemer je za povezavo določil XX.1XX.1X4.2XX:4398
  • kadar koli zagnal odjemalca OpenVPN na pametnem telefonu z navedbo naslova IP in vrat (v mojem primeru se naslov IP ni spremenil) za povezavo

Izvajanje strežnika VPN za ponudnikovim NAT
Tako sem se lahko iz pametnega telefona povezal z računalnikom. Ta izvedba vam omogoča povezavo katerega koli odjemalca OpenVPN.

Practice

Potrebovali boste:

# apt install openvpn stun-client sendemail

Ko smo napisali nekaj skript, nekaj konfiguracijskih datotek in generirali potrebne certifikate (saj odjemalec na pametnem telefonu deluje samo s certifikati), smo dobili običajno izvedbo strežnika OpenVPN.

Glavni skript v računalniku

# 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

Skripta za pošiljanje podatkov po elektronski pošti:

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

Konfiguracijska datoteka strežnika:

# 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

Konfiguracijska datoteka odjemalca:

# 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

Certifikati so bili ustvarjeni z uporabo ta članek.
Izvajanje skripta:

# ./vpn11.sh

Tako, da ga najprej naredite izvršljivega

# chmod +x vpn11.sh

Na strani pametnega telefona

Z namestitvijo aplikacije OpenVPN za Android, ko ste kopirali konfiguracijsko datoteko, potrdila in jo konfigurirali, se je izkazalo takole:
Preverjam e-pošto na pametnem telefonuIzvajanje strežnika VPN za ponudnikovim NAT
Številko vrat uredim v nastavitvahIzvajanje strežnika VPN za ponudnikovim NAT
Zaženem odjemalca in se povežemIzvajanje strežnika VPN za ponudnikovim NAT

Med pisanjem tega članka sem prenesel konfiguracijo iz svojega računalnika na Raspberry Pi 3 in poskusil celotno stvar zagnati na modemu LTE, vendar ni delovalo! Rezultat ukaza

# stun stun.ekiga.net -p 11111

Odjemalec STUN različica 0.97
Primarno: neodvisno preslikavo, filter, odvisen od vrat, naključna vrata, bo pripeta
Povratna vrednost je 0x000006

vrednost Filter, odvisen od vrat ni dovolil zagona sistema.
Toda domači ponudnik je brez težav dovolil zagon sistema na Raspberry Pi 3.
V povezavi s spletno kamero, z VLC za
ustvarjanje toka RTSP iz spletne kamere

$ 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

in VLC na pametnem telefonu za ogled (stream rtsp://10.2.0.1:8554/), se je izkazal za dober sistem za videonadzor na daljavo, lahko namestite tudi Sambo, usmerjate promet prek VPN, daljinsko upravljate računalnik in še marsikaj. več ...

Izhod

Kot je pokazala praksa, za organizacijo strežnika VPN lahko storite brez zunanjega naslova IP, za katerega morate plačati, tako kot za najeti VPS / VDS. Je pa vse odvisno od ponudnika. Seveda sem želel dobiti več informacij o različnih ponudnikih in vrstah uporabljenih NAT, vendar je to šele začetek ...
Спасибо за внимание!

Vir: www.habr.com

Dodaj komentar