VPN servera darbināŔana aiz pakalpojumu sniedzēja NAT

Raksts par to, kā man izdevās palaist VPN serveris aiz mājas pakalpojumu sniedzēja NAT (bez publiskas IP adreses). Ä»aujiet man uzreiz precizēt: Ŕīs ievieÅ”anas veiktspēja ir tieÅ”i atkarÄ«ga no jÅ«su pakalpojumu sniedzēja izmantotā NAT veida, kā arÄ« no marÅ”rutētāja.
Tātad, man bija nepiecieÅ”ams izveidot savienojumu no mana Android- viedtālrunis mājas datoram, abas ierÄ«ces ir savienotas ar internetu, izmantojot pakalpojumu sniedzēja NAT, turklāt dators ir savienots, izmantojot mājas marÅ”rutētāju, kas arÄ« NAT savienojumus.
Klasiskā shēma, kurā tiek izmantots nomāts VPS/VDS ar baltu IP adresi, kā arī baltas IP adreses noma no pakalpojumu sniedzēja, netika apsvērta vairāku iemeslu dēļ.
Ņemot vērā pieredze no iepriekŔējiem rakstiem, veicot vairākus eksperimentus ar pakalpojumu sniedzēju STUN un NAT. Es nolēmu veikt nelielu eksperimentu, palaižot komandu mājas marÅ”rutētājā, kurā darbojas OpenWRT programmaparatÅ«ra:

$ stun stun.sipnet.ru

ieguva rezultātu:

STUN klienta versija 0.97
Primārais: neatkarÄ«ga kartēŔana, neatkarÄ«gs filtrs, nejauÅ”s ports, matadata
Atdeves vērtība ir 0x000002

Burtiskais tulkojums:
Independent Mapping - neatkarÄ«ga kartēŔana
Neatkarīgais filtrs - neatkarīgs filtrs
nejauŔs ports - nejauŔs ports
būs matadata - būs matadata
Palaižot līdzīgu komandu savā datorā, es saņēmu:

STUN klienta versija 0.97
Primārais: neatkarÄ«ga kartēŔana, portatkarÄ«gais filtrs, nejauÅ”s ports, matadata
Atdeves vērtība ir 0x000006

PortatkarÄ«gais filtrs — no porta atkarÄ«gs filtrs
Komandas izvades rezultātu atŔķirÄ«ba liecināja, ka mājas marÅ”rutētājs sniedza ā€œsavu ieguldÄ«jumuā€ pakeÅ”u pārsÅ«tīŔanas procesā no interneta; tas izpaudās faktā, ka, izpildot komandu datorā:

stun stun.sipnet.ru -p 11111 -v

Es saņēmu rezultātu:

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

uz Å”o brÄ«di kādu laiku tika atvērta UDP sesija, ja Å”ajā brÄ«dÄ« nosÅ«tāt UDP pieprasÄ«jumu (piemēram: netcat XX.1XX.1X4.2XX 4398 -u), tad pieprasÄ«jums nonāca mājas marÅ”rutētājā, kas tika apstiprināja TCPDump, kas tajā darbojas, bet pieprasÄ«jums nesasniedza datoru - IPtables kā NAT tulkotājs marÅ”rutētājā to atmeta.
VPN servera darbināŔana aiz pakalpojumu sniedzēja NAT
Bet pats fakts, ka UDP pieprasÄ«jums tika nosÅ«tÄ«ts caur pakalpojumu sniedzēja NAT, deva cerÄ«bu uz panākumiem. Tā kā marÅ”rutētājs atrodas manā jurisdikcijā, es atrisināju problēmu, novirzot UDP/11111 portu uz datoru:

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

Tas man deva iespēju uzsākt UDP sesiju un saņemt pieprasÄ«jumus no interneta no jebkuras IP adreses. Tajā brÄ«dÄ« es palaidu OpenVPN-serveris (iepriekÅ” konfigurēts) klausās UDP/11111 portā, es viedtālrunÄ« norādÄ«ju ārējo IP adresi un portu (XX.1XX.1X4.2XX:4398) un veiksmÄ«gi izveidoju savienojumu no viedtālruņa ar datoru. Tomēr Ŕī ievieÅ”ana saskārās ar problēmu: man kaut kā bija jāuztur UDP sesija, lÄ«dz savienojums tika izveidots. OpenVPN-no klienta uz serveri, man nepatika iespēja periodiski palaist STUN klientu — es negribēju nevajadzÄ«gi noslogot STUN serverus.
Es arī pamanīju ierakstu "būs matadata - būs matadata", Ŕis režīms

Matu piesprauÅ”ana ļauj vienai iekārtai lokālajā tÄ«klā aiz NAT piekļūt citai iekārtai tajā paŔā tÄ«klā marÅ”rutētāja ārējā adresē.

VPN servera darbināŔana aiz pakalpojumu sniedzēja NAT
Rezultātā es vienkārÅ”i atrisināju UDP sesijas uzturēŔanas problēmu - palaižu klientu vienā datorā ar serveri.
Tas strādāja Ŕādi:

  • palaida STUN klientu vietējā portā 11111
  • saņēma atbildi ar ārējo IP adresi un portu XX.1XX.1X4.2XX:4398
  • nosÅ«tÄ«ja datus ar ārējo IP adresi un portu uz viedtālrunÄ« konfigurētu e-pastu (iespējams jebkurÅ” cits pakalpojums).
  • palaists OpenVPN- serveris datorā, kas klausās UDP/11111 portā
  • palaists OpenVPN- klients datorā, kas savienojumam norāda XX.1XX.1X4.2XX:4398
  • palaists jebkurā laikā OpenVPN- klients viedtālrunÄ« ar IP adresi un portu (manā gadÄ«jumā IP adrese nemainÄ«jās) savienojumam

VPN servera darbināŔana aiz pakalpojumu sniedzēja NAT
Tādā veidā es varēju izveidot savienojumu ar datoru no viedtālruņa. Å Ä« ievieÅ”ana ļauj savienot jebkuru OpenVPN-klients.

Prakse

Jums būs nepiecieŔams:

# apt install openvpn stun-client sendemail

Uzrakstot pāris skriptus, pāris konfigurācijas failus un Ä£enerējot nepiecieÅ”amos sertifikātus (jo viedtālruņa klients darbojas tikai ar sertifikātiem), mēs ieguvām standarta ievieÅ”anu. OpenVPN-serveri.

Galvenais skripts datorā

# 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

Skripts datu nosūtīŔanai pa e-pastu:

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

Servera konfigurācijas fails:

# 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

Klienta konfigurācijas fails:

# 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

Sertifikāti tika ģenerēti, izmantojot Šis raksts.
Skripta palaiŔana:

# ./vpn11.sh

Vispirms padarot to izpildāmu

# chmod +x vpn11.sh

Viedtālruņa pusē

Instalējot lietojumprogrammu OpenVPN par Android, nokopējot konfigurācijas failu, sertifikātus un konfigurējot to, tas izrādÄ«jās Ŕādi:
Es pārbaudu savu e-pastu savā viedtālrunÄ«VPN servera darbināŔana aiz pakalpojumu sniedzēja NAT
IestatÄ«jumos rediģēju porta numuruVPN servera darbināŔana aiz pakalpojumu sniedzēja NAT
Palaižu klientu un izveidoju savienojumuVPN servera darbināŔana aiz pakalpojumu sniedzēja NAT

Rakstot Å”o rakstu, es pārsÅ«tÄ«ju konfigurāciju no sava datora uz Raspberry Pi 3 un mēģināju visu palaist LTE modemā, taču tas nedarbojās! Komandas rezultāts

# stun stun.ekiga.net -p 11111

STUN klienta versija 0.97
Primārais: neatkarÄ«ga kartēŔana, portatkarÄ«gais filtrs, nejauÅ”s ports, matadata
Atdeves vērtība ir 0x000006

vērtība Portatkarīgais filtrs neļāva sistēmai startēt.
Bet mājas pakalpojumu sniedzējs ļāva sistēmai startēt Raspberry Pi 3 bez problēmām.
Savienojumā ar tīmekļa kameru ar VLC priekŔ
izveidojot RTSP straumi no tīmekļa kameras

$ 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

un VLC viedtālrunÄ« skatīŔanai (straume rtsp://10.2.0.1:8554/), izrādÄ«jās laba attālinātā videonovēroÅ”anas sistēma, var arÄ« instalēt Samba, marÅ”rutēt trafiku caur VPN, attālināti vadÄ«t datoru un daudz ko citu vairāk...

secinājums

Kā rāda prakse, VPN servera organizēŔanai var iztikt bez ārējas IP adreses, par kuru jāmaksā, tāpat kā par Ä«rētu. VPS / VDSBet tas viss ir atkarÄ«gs no pakalpojumu sniedzēja. Protams, es vēlētos iegÅ«t vairāk informācijas par dažādiem pakalpojumu sniedzējiem un viņu izmantotajiem NAT veidiem, bet tas ir tikai sākums...
Дпасибо за внимание!

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster