Að keyra VPN netþjón á bak við NAT þjónustuveitunnar

Grein um hvernig mér tókst að keyra VPN netþjón á bak við NAT heimaveitunnar (án hvítrar IP tölu). Leyfðu mér að gera fyrirvara strax: það árangur þessarar útfærslu fer beint eftir tegund NAT sem þjónustuveitan þín notar, sem og beini.
Svo ég þurfti að tengjast frá Android snjallsímanum mínum við heimilistölvuna mína, bæði tækin eru tengd við internetið í gegnum NATs veitu, auk þess sem tölvan er tengd í gegnum heimabeini, sem einnig NAT tengingar.
Klassískt kerfi sem notar leigðan VPS/VDS með hvítu IP-tölu, auk þess að leigja hvíta IP-tölu frá þjónustuveitanda, kom ekki til greina af ýmsum ástæðum.
Taka með í reikninginn reynslu af fyrri greinum, eftir að hafa gert nokkrar tilraunir með STUN og NAT veitenda. Ég ákvað að gera smá tilraun með því að keyra skipunina á heimabeini sem keyrir OpenWRT fastbúnað:

$ stun stun.sipnet.ru

fékk niðurstöðuna:

STUN viðskiptavinur útgáfa 0.97
Aðal: Óháð kortlagning, óháð sía, handahófskennd höfn, mun hárnála
Skilagildi er 0x000002

Bókstafleg þýðing:
Óháð kortlagning - óháð kortlagning
Óháð sía - óháð sía
handahófi port - handahófi port
mun hárnál - það verður hárnál
Með því að keyra svipaða skipun á tölvunni minni fékk ég:

STUN viðskiptavinur útgáfa 0.97
Aðal: Óháð kortlagning, höfn háð sía, handahófskennd höfn, mun hárnála
Skilagildi er 0x000006

Port Dependent Filter - Port dependent filter
Munurinn á niðurstöðum skipanaúttaksins gaf til kynna að heimabeinin væri að leggja sitt af mörkum til að senda pakka af internetinu; þetta kom fram í þeirri staðreynd að þegar skipunin var framkvæmd á tölvunni:

stun stun.sipnet.ru -p 11111 -v

Ég var að fá niðurstöðuna:

...
Kortaðaddress = XX.1XX.1X4.2XX:4398
...

á þessu augnabliki var UDP fundur opnaður í nokkurn tíma, ef þú sendir UDP beiðni á þessu augnabliki (til dæmis: netcat XX.1XX.1X4.2XX 4398 -u), þá kom beiðnin til heimabeins, sem var staðfest af TCDPump sem keyrir á því, en beiðnin barst ekki í tölvuna - IPtables, sem NAT þýðandi á beini, sleppti því.
Að keyra VPN netþjón á bak við NAT þjónustuveitunnar
En sú staðreynd að UDP beiðnin fór í gegnum NAT þjónustuveitunnar gaf von um árangur. Þar sem beininn er staðsettur í lögsögu minni leysti ég vandamálið með því að beina UDP/11111 tenginu yfir á tölvuna:

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

Þannig gat ég sett af stað UDP lotu og tekið á móti beiðnum af internetinu frá hvaða IP tölu sem er. Á þessari stundu ræsti ég OpenVPN-miðlara (hefur stillt hann áður) og hlustaði á UDP/11111 tengi, gaf til kynna ytri IP tölu og tengi (XX.1XX.1X4.2XX:4398) á snjallsímanum og tókst að tengja úr snjallsímanum til tölvan. En í þessari útfærslu kom upp vandamál: það var nauðsynlegt á einhvern hátt að viðhalda UDP lotunni þar til OpenVPN viðskiptavinurinn tengdist þjóninum; Mér líkaði ekki möguleikinn á að ræsa STUN biðlarann ​​reglulega - ég vildi ekki sóa álaginu á STUN netþjónarnir.
Ég tók líka eftir færslunni „mun hárnál - það verður hárnál", þessi háttur

Hárfesting gerir einni vél á staðarneti á bak við NAT kleift að fá aðgang að annarri vél á sama neti á ytra heimilisfangi beinisins.

Að keyra VPN netþjón á bak við NAT þjónustuveitunnar
Fyrir vikið leysti ég einfaldlega vandamálið við að viðhalda UDP lotu - ég ræsti biðlarann ​​á sömu tölvu og netþjóninn.
Þetta virkaði svona:

  • hóf STUN viðskiptavininn á staðbundinni höfn 11111
  • fékk svar með ytri IP tölu og porti XX.1XX.1X4.2XX:4398
  • send gögn með ytri IP tölu og tengi í tölvupóst (hver önnur þjónusta er möguleg) stillt á snjallsímanum
  • ræsti OpenVPN netþjóninn á tölvu sem hlustar á UDP/11111 tengi
  • ræsti OpenVPN biðlarann ​​á tölvunni sem tilgreindi XX.1XX.1X4.2XX:4398 fyrir tengingu
  • hvenær sem er ræsti OpenVPN viðskiptavininn á snjallsímanum sem gefur til kynna IP tölu og höfn (í mínu tilfelli breyttist IP vistfangið ekki) til að tengjast

Að keyra VPN netþjón á bak við NAT þjónustuveitunnar
Þannig gat ég tengst tölvunni minni úr snjallsímanum mínum. Þessi útfærsla gerir þér kleift að tengja hvaða OpenVPN viðskiptavin sem er.

Practice

Það mun taka:

# apt install openvpn stun-client sendemail

Eftir að hafa skrifað nokkrar forskriftir, nokkrar stillingarskrár og búið til nauðsynleg vottorð (þar sem viðskiptavinurinn á snjallsíma virkar aðeins með skilríkjum), fengum við venjulega útfærslu á OpenVPN netþjóni.

Aðalhandrit á tölvunni

# 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

Forskrift til að senda gögn með tölvupósti:

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

Stillingarskrá miðlara:

# 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

Stillingarskrá viðskiptavinar:

# 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

Vottorð voru búin til með því að nota Þessi grein.
Keyrir handritið:

# ./vpn11.sh

Með því að gera það fyrst keyranlegt

# chmod +x vpn11.sh

Á snjallsímahliðinni

Með því að setja upp forritið OpenVPN fyrir Android, eftir að hafa afritað stillingarskrána, vottorð og stillt hana, varð þetta svona:
Ég skoða tölvupóstinn minn á snjallsímanum mínumAð keyra VPN netþjón á bak við NAT þjónustuveitunnar
Ég breyti portnúmerinu í stillingunumAð keyra VPN netþjón á bak við NAT þjónustuveitunnar
Ég ræsir biðlarann ​​og tengistAð keyra VPN netþjón á bak við NAT þjónustuveitunnar

Þegar ég skrifaði þessa grein flutti ég stillingarnar úr tölvunni minni yfir á Raspberry Pi 3 og reyndi að keyra allt á LTE mótald, en það virkaði ekki! Skipunarniðurstaða

# stun stun.ekiga.net -p 11111

STUN viðskiptavinur útgáfa 0.97
Aðal: Óháð kortlagning, höfn háð sía, handahófskennd höfn, mun hárnála
Skilagildi er 0x000006

значение Sía sem er háð höfn leyfði kerfinu ekki að byrja.
En heimaveitan leyfði kerfinu að byrja á Raspberry Pi 3 án vandræða.
Í tengslum við vefmyndavél, með VLC fyrir
búa til RTSP straum frá vefmyndavél

$ 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

og VLC á snjallsíma til að skoða (straumur rtsp://10.2.0.1:8554/), þetta reyndist vera gott fjarvídeóeftirlitskerfi, einnig er hægt að setja upp Samba, leiða umferð í gegnum VPN, fjarstýra tölvunni og margt fleira meira...

Output

Eins og æfingin hefur sýnt, til að skipuleggja VPN netþjón, geturðu verið án ytri IP tölu sem þú þarft að borga fyrir, alveg eins og fyrir leigðan VPS/VDS. En það veltur allt á þjónustuveitunni. Auðvitað vildi ég fá frekari upplýsingar um mismunandi veitendur og tegundir NAT sem notaðar eru, en þetta er bara byrjunin...
Svara með tilvísun!

Heimild: www.habr.com

Bæta við athugasemd