Tmexxi server VPN wara n-NAT tal-fornitur

Artiklu dwar kif irnexxieli nħaddem server VPN wara n-NAT tal-fornitur tad-dar tiegħi (mingħajr indirizz IP abjad). Ħa nagħmel riserva mill-ewwel: dik il-prestazzjoni ta 'din l-implimentazzjoni tiddependi direttament fuq it-tip ta' NAT użat mill-fornitur tiegħek, kif ukoll ir-router.
Allura, kelli bżonn nikkonnettja mill-smartphone Android tiegħi mal-kompjuter tad-dar tiegħi, iż-żewġ apparati huma konnessi mal-Internet permezz ta 'NATs tal-fornitur, kif ukoll il-kompjuter huwa konness permezz ta' router tad-dar, li wkoll konnessjonijiet NATs.
L-iskema klassika li tuża VPS/VDS mikrija b'indirizz IP abjad, kif ukoll il-kiri ta 'indirizz IP abjad mingħand fornitur, ma kinitx ikkunsidrata għal diversi raġunijiet.
B'kont meħud esperjenza minn artikli tal-passat, wara li wettaq diversi esperimenti ma 'STUNs u NATs ta' fornituri. Iddeċidejt li nagħmel esperiment żgħir billi nħaddem il-kmand fuq router tad-dar li jħaddem il-firmware OpenWRT:

$ stun stun.sipnet.ru

kiseb ir-riżultat:

STUN verżjoni tal-klijent 0.97
Primarja: Immappjar Indipendenti, Filtru Indipendenti, port każwali, se hairpin
Il-valur tar-ritorn huwa 0x000002

Traduzzjoni letterali:
Immappjar Indipendenti - mapping indipendenti
Filtru Indipendenti - filtru indipendenti
random port - port każwali
se hairpin - se jkun hemm hairpin
Tmexxi kmand simili fuq il-PC tiegħi, sibt:

STUN verżjoni tal-klijent 0.97
Primarja: Immappjar Indipendenti, Filtru Dipendenti tal-Port, port każwali, se hairpin
Il-valur tar-ritorn huwa 0x000006

Port Dependent Filter - filtru dipendenti fuq il-port
Id-differenza fir-riżultati tal-output tal-kmand indikat li r-router tad-dar kien qed jagħmel "il-kontribut tiegħu" għall-proċess ta 'trażmissjoni ta' pakketti mill-Internet; dan kien manifestat fil-fatt li meta tesegwixxi l-kmand fuq il-kompjuter:

stun stun.sipnet.ru -p 11111 -v

Kont qed nikseb ir-riżultat:

...
MappedAddress = XX.1XX.1X4.2XX:4398
...

f'dan il-mument, infetħet sessjoni UDP għal xi żmien, jekk f'dan il-mument tibgħat talba UDP (per eżempju: netcat XX.1XX.1X4.2XX 4398 -u), allura t-talba waslet lir-router tad-dar, li kien ikkonfermat minn TCPDump li qed jaħdem fuqu, iżda t-talba ma laħqitx il-kompjuter - IPtables, bħala traduttur NAT fuq ir-router, niżelha.
Tmexxi server VPN wara n-NAT tal-fornitur
Iżda l-fatt stess li t-talba UDP għaddiet min-NAT tal-fornitur ta tama għas-suċċess. Peress li r-router jinsab fil-ġurisdizzjoni tiegħi, sollejt il-problema billi ddawwar mill-ġdid il-port UDP/11111 lejn il-kompjuter:

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

Għalhekk, stajt nibda sessjoni UDP u nirċievi talbiet mill-Internet minn kwalunkwe indirizz IP. F'dan il-mument, nediet OpenVPN-server (wara li kkonfigurajtu qabel) nisma 'port UDP/11111, indika l-indirizz IP estern u l-port (XX.1XX.1X4.2XX:4398) fuq l-smartphone u konness b'suċċess mill-smartphone għal il-kompjuter. Iżda f'din l-implimentazzjoni qamet problema: kien meħtieġ li b'xi mod tinżamm is-sessjoni UDP sakemm il-klijent OpenVPN konness mas-server; Ma għoġobni l-għażla li perjodikament inniedi l-klijent STUN - ma ridtx naħli t-tagħbija fuq is-servers STUN.
Innutajt ukoll id-daħla “se hairpin - se jkun hemm hairpin", din il-modalità

Hairpinning jippermetti magna waħda fuq netwerk lokali wara NAT biex taċċessa magna oħra fuq l-istess netwerk fl-indirizz estern tar-router.

Tmexxi server VPN wara n-NAT tal-fornitur
Bħala riżultat, jien sempliċement solvut il-problema taż-żamma ta 'sessjoni UDP - nediet il-klijent fuq l-istess kompjuter mas-server.
Ħadem hekk:

  • nediet il-klijent STUN fuq il-port lokali 11111
  • irċieva tweġiba b'indirizz IP estern u port XX.1XX.1X4.2XX:4398
  • mibgħuta data b'indirizz IP estern u port għall-email (kwalunkwe servizz ieħor huwa possibbli) ikkonfigurat fuq l-smartphone
  • nediet is-server OpenVPN fuq kompjuter li jisma 'port UDP/11111
  • nediet il-klijent OpenVPN fuq il-kompjuter li jispeċifika XX.1XX.1X4.2XX:4398 għall-konnessjoni
  • fi kwalunkwe ħin nediet il-klijent OpenVPN fuq l-ismartphone li jindika l-indirizz IP u l-port (fil-każ tiegħi l-indirizz IP ma nbidilx) biex tikkonnettja

Tmexxi server VPN wara n-NAT tal-fornitur
B'dan il-mod stajt nikkonnettja mal-kompjuter tiegħi mill-ismartphone tiegħi. Din l-implimentazzjoni tippermettilek tikkonnettja kwalunkwe klijent OpenVPN.

Prattika

Se tieħu:

# apt install openvpn stun-client sendemail

Wara li ktibna ftit skripts, ftit fajls ta 'konfigurazzjoni, u ġġeneraw iċ-ċertifikati meħtieġa (peress li l-klijent fuq smartphone jaħdem biss b'ċertifikati), ksibna l-implimentazzjoni tas-soltu ta' server OpenVPN.

Iskrittura prinċipali fuq il-kompjuter

# 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

Skript biex tintbagħat id-dejta bl-email:

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

Fajl tal-konfigurazzjoni tas-server:

# 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

Fajl tal-konfigurazzjoni tal-klijent:

# 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

Iċ-ċertifikati ġew iġġenerati bl-użu Dan l-artikolu.
Tmexxi l-iskript:

# ./vpn11.sh

Billi l-ewwel tagħmilha eżekutibbli

# chmod +x vpn11.sh

Fuq in-naħa tal-ismartphone

Billi tinstalla l-applikazzjoni OpenVPN għal Android, wara li kkuppjat il-fajl tal-konfigurazzjoni, iċ-ċertifikati u kkonfigurawh, irriżulta hekk:
Niċċekkja l-email tiegħi fuq l-ismartphone tiegħiTmexxi server VPN wara n-NAT tal-fornitur
Ni editja n-numru tal-port fis-settingsTmexxi server VPN wara n-NAT tal-fornitur
Inniedi l-klijent u nqabbadTmexxi server VPN wara n-NAT tal-fornitur

Waqt li kont nikteb dan l-artikolu, ittrasferijt il-konfigurazzjoni mill-kompjuter tiegħi għall-Raspberry Pi 3 u ppruvajt tħaddem il-ħaġa sħiħa fuq modem LTE, iżda ma ħadmitx! Riżultat tal-Kmand

# stun stun.ekiga.net -p 11111

STUN verżjoni tal-klijent 0.97
Primarja: Immappjar Indipendenti, Filtru Dipendenti tal-Port, port każwali, se hairpin
Il-valur tar-ritorn huwa 0x000006

tifsira Filtru Dipendenti tal-Port ma ppermettiex li s-sistema tibda.
Iżda l-fornitur tad-dar ippermetta li s-sistema tibda fuq il-Raspberry Pi 3 mingħajr problemi.
Flimkien ma 'webcam, ma' VLC għal
toħloq fluss RTSP minn webcam

$ 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

u VLC fuq smartphone għall-wiri (stream rtsp://10.2.0.1:8554/), irriżulta li kien sistema tajba ta 'sorveljanza bil-vidjo mill-bogħod, tista' wkoll tinstalla Samba, rotta traffiku permezz VPN, tikkontrolla mill-bogħod il-kompjuter tiegħek u ħafna aktar...

Output

Kif uriet il-prattika, biex torganizza server VPN, tista’ tgħaddi mingħajr indirizz IP estern li għalih trid tħallas, l-istess bħal għal VPS/VDS mikrija. Iżda kollox jiddependi fuq il-fornitur. Naturalment, ridt nikseb aktar informazzjoni dwar il-fornituri differenti u t-tipi ta 'NATs użati, iżda dan huwa biss il-bidu...
Grazzi tal-attenzjoni tiegħek!

Sors: www.habr.com

Żid kumment