Kouri yon sèvè VPN dèyè NAT founisè a

Yon atik sou fason mwen jere yo kouri yon sèvè VPN dèyè NAT founisè lakay mwen (san yon adrès IP blan). Kite m fè yon rezèvasyon touswit: sa pèfòmans aplikasyon sa a depann dirèkteman sou kalite NAT founisè w la itilize, osi byen ke routeur la.
Se konsa, mwen te bezwen konekte soti nan smartphone android mwen an nan òdinatè lakay mwen, tou de aparèy yo konekte ak entènèt la atravè founisè NAT, plis òdinatè a konekte atravè yon routeur lakay, ki tou koneksyon NAT.
Konplo a klasik lè l sèvi avèk yon VPS/VDS lwe pou lontan ak yon adrès IP blan, osi byen ke lwe yon adrès IP blan nan men yon founisè, pa te konsidere pou plizyè rezon.
Pran an kont eksperyans nan atik sot pase yo, li te fè plizyè eksperyans ak STUN ak NAT founisè yo. Mwen deside fè yon ti eksperyans nan kouri lòd la sou yon routeur lakay ki kouri OpenWRT firmwèr:

$ stun stun.sipnet.ru

jwenn rezilta a:

STUN kliyan vèsyon 0.97
Prensipal: Kat Endepandan, Filtè Endepandan, pò o aza, pral epengl
Valè retounen se 0x000002

Tradiksyon literal:
Independent Mapping - kat endepandan
Independent Filter - filtre endepandan
random port - random port
pral epengl - pral gen yon epengl
Kouri yon kòmandman menm jan an sou PC mwen an, mwen te resevwa:

STUN kliyan vèsyon 0.97
Prensipal: Kat Endepandan, Filtè Port Depandan, pò o aza, pral epengl
Valè retounen se 0x000006

Port Dependent Filter - filtre pò depandan
Diferans nan rezilta yo nan pwodiksyon lòd la endike ke routeur lakay la te fè "kontribisyon li" nan pwosesis la nan transmèt pakè soti nan entènèt la; sa a te manifeste nan lefèt ke lè egzekite lòd la sou òdinatè a:

stun stun.sipnet.ru -p 11111 -v

Mwen te jwenn rezilta a:

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

nan moman sa a, yon sesyon UDP te louvri pou kèk tan, si nan moman sa a ou voye yon demann UDP (pa egzanp: netcat XX.1XX.1X4.2XX 4398 -u), Lè sa a, demann lan te vini nan routeur kay la, ki te konfime pa TCPDump kouri sou li, men demann lan pa t 'rive nan òdinatè a - IPtables, kòm yon tradiktè NAT sou routeur la, tonbe li.
Kouri yon sèvè VPN dèyè NAT founisè a
Men, lefèt ke demann UDP a te pase nan NAT founisè a te bay espwa pou siksè. Depi routeur la sitiye nan jiridiksyon mwen an, mwen rezoud pwoblèm nan pa redireksyon pò UDP/11111 nan òdinatè a:

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

Kidonk, mwen te kapab kòmanse yon sesyon UDP epi resevwa demann soti nan entènèt la nan nenpòt adrès IP. Nan moman sa a, mwen te lanse OpenVPN-sèvè (gen li te deja konfigirasyon) koute UDP/11111 pò, endike adrès la ekstèn IP ak pò (XX.1XX.1X4.2XX:4398) sou smartphone la ak siksè konekte soti nan smartphone la. òdinatè a. Men, nan aplikasyon sa a, yon pwoblèm te parèt: li te nesesè pou yon jan kanmenm kenbe sesyon UDP a jiskaske kliyan OpenVPN konekte ak sèvè a; mwen pa t renmen opsyon pou lanse kliyan STUN detanzantan - mwen pa t vle gaspiye chay la sou sèvè STUN yo.
Mwen remake tou antre nan "pral epengl - pral gen yon epengl", mòd sa a

Hairpinning pèmèt yon machin sou yon rezo lokal dèyè yon NAT jwenn aksè nan yon lòt machin sou menm rezo a nan adrès ekstèn routeur la.

Kouri yon sèvè VPN dèyè NAT founisè a
Kòm yon rezilta, mwen tou senpleman rezoud pwoblèm nan nan kenbe yon sesyon UDP - mwen te lanse kliyan an sou òdinatè a menm ak sèvè a.
Li te travay tankou sa a:

  • te lanse kliyan STUN sou pò lokal 11111
  • te resevwa yon repons ak yon adrès IP ekstèn ak pò XX.1XX.1X4.2XX:4398
  • voye done ak yon adrès IP ekstèn ak pò nan imèl (nenpòt lòt sèvis posib) configuré sou smartphone la
  • te lanse sèvè OpenVPN la sou yon òdinatè k ap koute pò UDP/11111
  • te lanse kliyan an OpenVPN sou òdinatè a ki espesifye XX.1XX.1X4.2XX:4398 pou koneksyon.
  • a nenpòt ki lè te lanse kliyan an OpenVPN sou smartphone la ki endike adrès la IP ak pò (nan ka mwen an adrès IP pa t 'chanje) konekte

Kouri yon sèvè VPN dèyè NAT founisè a
Nan fason sa a mwen te kapab konekte ak òdinatè mwen an nan smartphone mwen an. Aplikasyon sa a pèmèt ou konekte nenpòt kliyan OpenVPN.

Pratike

Li pral pran:

# apt install openvpn stun-client sendemail

Lè w te ekri yon koup nan Scripts, yon koup nan dosye konfigirasyon, ak pwodwi sètifika ki nesesè yo (depi kliyan an sou yon smartphone travay sèlman ak sètifika), nou te resevwa aplikasyon an nòmal nan yon sèvè OpenVPN.

Script prensipal sou òdinatè a

# 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

Script pou voye done pa imel:

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

Fichye konfigirasyon sèvè:

# 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

Fichye konfigirasyon kliyan:

# 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

Sètifika yo te pwodwi lè l sèvi avèk atik sa a.
Kouri script la:

# ./vpn11.sh

Pa premye fè li ègzekutabl

# chmod +x vpn11.sh

Sou bò smartphone

Lè w enstale aplikasyon an OpenVPN pou android, li te kopye fichye konfigirasyon an, sètifika ak konfigirasyon li, li te tounen tankou sa a:
Mwen tcheke imèl mwen sou smartphone mwen anKouri yon sèvè VPN dèyè NAT founisè a
Mwen modifye nimewo pò a nan paramèt yoKouri yon sèvè VPN dèyè NAT founisè a
Mwen lanse kliyan an epi konekteKouri yon sèvè VPN dèyè NAT founisè a

Pandan m t ap ekri atik sa a, mwen te transfere konfigirasyon an nan òdinatè mwen an nan Franbwaz Pi 3 a epi mwen te eseye kouri tout bagay la sou yon modèm LTE, men li pa t travay! Kòmand rezilta

# stun stun.ekiga.net -p 11111

STUN kliyan vèsyon 0.97
Prensipal: Kat Endepandan, Filtè Port Depandan, pò o aza, pral epengl
Valè retounen se 0x000006

siyifikasyon Filtè Port Depandan pa t pèmèt sistèm lan kòmanse.
Men, founisè kay la pèmèt sistèm lan kòmanse sou Franbwaz Pi 3 a san okenn pwoblèm.
An konjonksyon avèk yon webcam, ak VLC pou
kreye yon kouran RTSP soti nan yon 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

ak VLC sou yon smartphone pou gade (kouran rtsp://10.2.0.1:8554/), li te tounen yon bon sistèm siveyans videyo aleka, ou ka tou enstale Samba, wout trafik atravè VPN, kontwole òdinatè w ak anpil bagay. plis...

Sòti

Kòm pratik te montre, yo òganize yon sèvè VPN, ou ka fè san yo pa yon adrès IP ekstèn pou ki ou bezwen peye, jis tankou pou yon VPS / VDS lwe. Men, tout depann sou founisè a. Natirèlman, mwen te vle jwenn plis enfòmasyon sou diferan founisè ak kalite NAT yo itilize, men sa a se jis kòmansman an ...
Mèsi pou atansyon ou!

Sous: www.habr.com

Add nouvo kòmantè