Rhedeg gweinydd VPN y tu ôl i NAT y darparwr

Erthygl am sut y llwyddais i redeg gweinydd VPN y tu ôl i NAT fy narparwr cartref (heb gyfeiriad IP gwyn). Gadewch i mi wneud archeb ar unwaith: hynny mae perfformiad y gweithrediad hwn yn dibynnu'n uniongyrchol ar y math o NAT a ddefnyddir gan eich darparwr, yn ogystal â'r llwybrydd.
Felly, roedd angen i mi gysylltu o'm ffôn clyfar Android i'm cyfrifiadur cartref, mae'r ddau ddyfais wedi'u cysylltu â'r Rhyngrwyd trwy NATs darparwr, ac mae'r cyfrifiadur wedi'i gysylltu trwy lwybrydd cartref, sydd hefyd yn gysylltiadau NATs.
Ni chafodd y cynllun clasurol sy'n defnyddio VPS/VDS ar brydles gyda chyfeiriad IP gwyn, yn ogystal â rhentu cyfeiriad IP gwyn gan ddarparwr, ei ystyried am sawl rheswm.
Gan gymryd i ystyriaeth profiad o erthyglau yn y gorffennol, ar ôl cynnal nifer o arbrofion gyda STUNs a NATs darparwyr. Penderfynais wneud ychydig o arbrawf trwy redeg y gorchymyn ar lwybrydd cartref sy'n rhedeg firmware OpenWRT:

$ stun stun.sipnet.ru

wedi cael y canlyniad:

Fersiwn cleient STUN 0.97
Cynradd: Mapio Annibynnol, Hidlydd Annibynnol, porthladd ar hap, bydd hairpin
Gwerth dychwelyd yn 0x000002

Cyfieithiad llythrennol:
Mapio Annibynnol - mapio annibynnol
Hidlo Annibynnol - hidlydd annibynnol
porthladd ar hap - porthladd ar hap
will hairpin - bydd hairpin
Gan redeg gorchymyn tebyg ar fy PC, cefais:

Fersiwn cleient STUN 0.97
Cynradd: Mapio Annibynnol, Porthladd Dibynnol Hidlydd, porthladd ar hap, bydd hairpin
Gwerth dychwelyd yn 0x000006

Hidlydd Dibynnol ar Borth - hidlydd sy'n dibynnu ar borthladd
Roedd y gwahaniaeth yng nghanlyniadau'r allbwn gorchymyn yn nodi bod y llwybrydd cartref yn gwneud "ei gyfraniad" i'r broses o drosglwyddo pecynnau o'r Rhyngrwyd; amlygwyd hyn yn y ffaith wrth weithredu'r gorchymyn ar y cyfrifiadur:

stun stun.sipnet.ru -p 11111 -v

Roeddwn i'n cael y canlyniad:

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

ar hyn o bryd, agorwyd sesiwn CDU ers peth amser, os ydych chi'n anfon cais CDU ar hyn o bryd (er enghraifft: netcat XX.1XX.1X4.2XX 4398 -u), yna daeth y cais i'r llwybrydd cartref, sef wedi'i gadarnhau gan TCPDump yn rhedeg arno, ond ni chyrhaeddodd y cais y cyfrifiadur - fe wnaeth IPtables, fel cyfieithydd NAT ar y llwybrydd, ei ollwng.
Rhedeg gweinydd VPN y tu ôl i NAT y darparwr
Ond roedd yr union ffaith bod cais y CDU wedi'i basio drwy NAT y darparwr yn rhoi gobaith am lwyddiant. Gan fod y llwybrydd wedi'i leoli yn fy awdurdodaeth, fe wnes i ddatrys y broblem trwy ailgyfeirio'r porthladd CDU / 11111 i'r cyfrifiadur:

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

Felly, llwyddais i gychwyn sesiwn CDU a derbyn ceisiadau o'r Rhyngrwyd o unrhyw gyfeiriad IP. Ar hyn o bryd, lansiais OpenVPN-server (ar ôl ei ffurfweddu o'r blaen) yn gwrando ar borthladd CDU/11111, yn nodi'r cyfeiriad IP allanol a'r porthladd (XX.1XX.1X4.2XX: 4398) ar y ffôn clyfar ac wedi cysylltu'n llwyddiannus o'r ffôn clyfar i y cyfrifiadur. Ond yn y gweithrediad hwn cododd problem: roedd angen rhywsut cynnal y sesiwn CDU nes i'r cleient OpenVPN gysylltu â'r gweinydd; Doeddwn i ddim yn hoffi'r opsiwn o lansio'r cleient STUN o bryd i'w gilydd - doeddwn i ddim eisiau gwastraffu'r llwyth ymlaen y gweinyddion STUN.
Sylwais hefyd ar y cofnod “will hairpin - bydd hairpin", y modd hwn

Mae pinio gwallt yn caniatáu i un peiriant ar rwydwaith lleol y tu ôl i NAT gael mynediad at beiriant arall ar yr un rhwydwaith yng nghyfeiriad allanol y llwybrydd.

Rhedeg gweinydd VPN y tu ôl i NAT y darparwr
O ganlyniad, yr wyf yn syml datrys y broblem o gynnal sesiwn CDU - lansiais y cleient ar yr un cyfrifiadur gyda'r gweinydd.
Roedd yn gweithio fel hyn:

  • lansio'r cleient STUN ar borthladd lleol 11111
  • wedi derbyn ymateb gyda chyfeiriad IP allanol a phorthladd XX.1XX.1X4.2XX:4398
  • anfon data gyda chyfeiriad IP allanol a phorth i e-bost (unrhyw wasanaeth arall yn bosibl) ffurfweddu ar y ffôn clyfar
  • lansio'r gweinydd OpenVPN ar gyfrifiadur yn gwrando ar borthladd CDU/11111
  • lansio'r cleient OpenVPN ar y cyfrifiadur gan nodi XX.1XX.1X4.2XX: 4398 ar gyfer cysylltiad
  • lansio'r cleient OpenVPN ar unrhyw adeg ar y ffôn clyfar gan nodi'r cyfeiriad IP a'r porthladd (yn fy achos i ni newidiodd y cyfeiriad IP) i gysylltu

Rhedeg gweinydd VPN y tu ôl i NAT y darparwr
Fel hyn roeddwn yn gallu cysylltu â fy nghyfrifiadur o fy ffôn clyfar. Mae'r gweithrediad hwn yn caniatáu ichi gysylltu unrhyw gleient OpenVPN.

Ymarfer

Bydd yn cymryd:

# apt install openvpn stun-client sendemail

Ar ôl ysgrifennu cwpl o sgriptiau, cwpl o ffeiliau ffurfweddu, a chynhyrchu'r tystysgrifau angenrheidiol (gan fod y cleient ar ffôn clyfar yn gweithio gyda thystysgrifau yn unig), cawsom weithrediad arferol gweinydd OpenVPN.

Prif sgript ar y cyfrifiadur

# 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

Sgript ar gyfer anfon data trwy e-bost:

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

Ffeil ffurfweddu gweinydd:

# 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

Ffeil ffurfweddu cleient:

# 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

Cynhyrchwyd tystysgrifau gan ddefnyddio Mae'r erthygl hon yn.
Rhedeg y sgript:

# ./vpn11.sh

Trwy ei wneud yn weithredadwy yn gyntaf

# chmod +x vpn11.sh

Ar ochr y ffôn clyfar

Trwy osod y cais OpenVPN ar gyfer Android, ar ôl copïo'r ffeil ffurfweddu, tystysgrifau a'i ffurfweddu, trodd allan fel hyn:
Rwy'n gwirio fy e-bost ar fy ffôn clyfarRhedeg gweinydd VPN y tu ôl i NAT y darparwr
Rwy'n golygu rhif y porthladd yn y gosodiadauRhedeg gweinydd VPN y tu ôl i NAT y darparwr
Rwy'n lansio'r cleient ac yn cysylltuRhedeg gweinydd VPN y tu ôl i NAT y darparwr

Wrth ysgrifennu'r erthygl hon, trosglwyddais y cyfluniad o'm cyfrifiadur i'r Raspberry Pi 3 a cheisio rhedeg yr holl beth ar fodem LTE, ond ni weithiodd! Canlyniad Gorchymyn

# stun stun.ekiga.net -p 11111

Fersiwn cleient STUN 0.97
Cynradd: Mapio Annibynnol, Porthladd Dibynnol Hidlydd, porthladd ar hap, bydd hairpin
Gwerth dychwelyd yn 0x000006

значение Hidlydd Dibynnol ar Borth ni adawodd i'r system gychwyn.
Ond caniataodd y darparwr cartref i'r system gychwyn ar y Raspberry Pi 3 heb unrhyw broblemau.
Ar y cyd â gwe-gamera, gyda VLC ar gyfer
creu ffrwd RTSP o we-gamera

$ 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

a VLC ar ffôn clyfar i'w wylio (ffrwd rtsp://10.2.0.1:8554/), trodd allan i fod yn system gwyliadwriaeth fideo o bell dda, gallwch hefyd osod Samba, llwybr traffig trwy VPN, rheoli'ch cyfrifiadur o bell a llawer mwy...

Allbwn

Fel y dangosodd arfer, i drefnu gweinydd VPN, gallwch wneud heb gyfeiriad IP allanol y mae angen i chi dalu amdano, yn union fel ar gyfer VPS / VDS ar rent. Ond mae'r cyfan yn dibynnu ar y darparwr. Wrth gwrs, roeddwn i eisiau cael mwy o wybodaeth am y gwahanol ddarparwyr a mathau o NATs a ddefnyddir, ond dim ond y dechrau yw hyn...
Diolch am eich sylw!

Ffynhonnell: hab.com

Ychwanegu sylw