En VPN Server hannert dem NAT vum Provider lafen

En Artikel iwwer wéi ech et fäerdeg bruecht hunn e VPN Server hannert dem NAT vu mengem Heem Provider ze lafen (ouni wäiss IP Adress). Loosst mech direkt reservéieren: dat d'Performance vun dëser Ëmsetzung hänkt direkt vun der Aart vun NAT vun Ärem Provider benotzt, wéi och vum Router.
Also, ech brauche vu mengem Android Smartphone mat mengem Heemcomputer ze verbannen, béid Apparater si mam Internet duerch Provider NATs ugeschloss, plus de Computer ass duerch en Heemrouter ugeschloss, deen och NATs Verbindungen ass.
De klassesche Schema mat engem gepachte VPS / VDS mat enger wäisser IP Adress, wéi och eng wäiss IP Adress vun engem Provider ze lounen, gouf aus verschiddene Grënn net berücksichtegt.
Rechnung huelen Erfahrung aus fréieren Artikelen, e puer Experimenter mat STUNs an NATs vun Ubidder gemaach. Ech hu beschloss e klengen Experiment ze maachen andeems Dir de Kommando op engem Heemrouter laaft OpenWRT Firmware:

$ stun stun.sipnet.ru

krut d'Resultat:

STUN Client Versioun 0.97
Primärschoul: Onofhängeg Mapping, Onofhängeg Filter, zoufälleg port, wäert Hoerpin
Retour Wäert ass 0x000002

Literal Iwwersetzung:
Onofhängeg Mapping - onofhängeg Mapping
Onofhängeg Filter - onofhängeg Filter
zoufälleg port - zoufälleg port
wäert Haarnadel - et gëtt eng Haarnadel
En ähnleche Kommando op mengem PC lafen, krut ech:

STUN Client Versioun 0.97
Primärschoul: Onofhängeg Mapping, Port Ofhängeg Filter, zoufälleg port, wäert Hoerpin
Retour Wäert ass 0x000006

Port ofhängeg Filter - port ofhängeg Filter
Den Ënnerscheed an de Resultater vum Kommandoausgang huet uginn datt den Heemrouter "säi Bäitrag" zum Prozess vun der Verëffentlechung vu Pakete vum Internet mécht; dëst war an der Tatsaach manifestéiert datt wann de Kommando um Computer ausféiert:

stun stun.sipnet.ru -p 11111 -v

Ech krut d'Resultat:

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

zu dësem Moment gouf eng UDP Sessioun fir eng Zäit opgemaach, wann Dir an dësem Moment eng UDP Ufro schéckt (zum Beispill: netcat XX.1XX.1X4.2XX 4398 -u), da koum d'Ufro un den Heemrouter, deen war bestätegt vun TCPDump op et laafen, awer d'Ufro huet de Computer net erreecht - IPtables, als NAT Iwwersetzer um Router, hunn et erofgelooss.
En VPN Server hannert dem NAT vum Provider ausféieren
Awer déi ganz Tatsaach datt d'UDP Ufro duerch den NAT vum Provider passéiert huet huet Hoffnung op Erfolleg ginn. Well de Router a menger Juridictioun läit, hunn ech de Problem geléist andeems Dir den UDP/11111 Hafen op de Computer ëmgeleet:

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

Sou konnt ech eng UDP Sessioun initiéieren an Ufroe vum Internet vun all IP Adress kréien. Zu dësem Moment hunn ech den OpenVPN-Server lancéiert (huet et virdru konfiguréiert) lauschteren op den UDP/11111 Hafen, déi extern IP Adress an den Hafen (XX.1XX.1X4.2XX:4398) um ​​Smartphone uginn an erfollegräich vum Smartphone verbonne mat de Computer. Awer an dëser Ëmsetzung ass e Problem entstanen: et war néideg d'UDP Sessioun iergendwéi z'erhalen bis den OpenVPN Client mam Server ugeschloss ass; Ech hunn d'Optioun net gär de STUN Client periodesch ze starten - ech wollt d'Laascht net verschwenden op de STUN Serveren.
Ech hunn och den Entrée gemierkt "wäert Haarnadel - et gëtt eng Haarnadel", dësem Modus

Hairpinning erlaabt eng Maschinn op engem lokalen Netzwierk hannert engem NAT eng aner Maschinn am selwechte Netz op der externer Adress vum Router ze kréien.

En VPN Server hannert dem NAT vum Provider ausféieren
Als Resultat hunn ech einfach de Problem geléist fir eng UDP Sessioun z'erhalen - ech lancéiert de Client um selwechte Computer mam Server.
Et huet esou geschafft:

  • lancéiert de STUN Client um lokalen Hafen 11111
  • krut eng Äntwert mat enger externer IP Adress a Port XX.1XX.1X4.2XX:4398
  • geschéckt Daten mat enger externer IP Adress an port un E-Mail (all aner Service ass méiglech) konfiguréiert um Smartphone
  • lancéiert den OpenVPN Server op engem Computer no UDP / 11111 Hafen lauschteren
  • lancéiert den OpenVPN Client um Computer mat XX.1XX.1X4.2XX: 4398 fir Verbindung
  • zu all Moment den OpenVPN Client um Smartphone lancéiert deen d'IP Adress an den Hafen uginn (a mengem Fall huet d'IP Adress net geännert) fir ze verbannen

En VPN Server hannert dem NAT vum Provider ausféieren
Sou konnt ech vu mengem Smartphone mat mengem Computer konnektéieren. Dës Implementatioun erlaabt Iech all OpenVPN Client ze verbannen.

Praxis

Et wäert sinn:

# apt install openvpn stun-client sendemail

Nodeems e puer Scripten, e puer Konfiguratiounsdateien geschriwwen hunn an déi néideg Certificaten generéiert hunn (well de Client op engem Smartphone nëmme mat Zertifikater funktionnéiert), krute mir déi üblech Ëmsetzung vun engem OpenVPN Server.

Main Skript um Computer

# 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 fir Daten per E-Mail ze schécken:

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

Server Konfiguratiounsdatei:

# 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

Client Konfiguratiounsdatei:

# 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

Certificaten goufen generéiert benotzt dësen Artikel.
D'Skript lafen:

# ./vpn11.sh

Andeems Dir et als éischt ausféierbar mécht

# chmod +x vpn11.sh

Op der Smartphone Säit

Andeems Dir d'Applikatioun installéiert OpenVPN fir Android, nodeems Dir d'Konfiguratiounsdatei, d'Zertifikater kopéiert an se konfiguréiert hutt, ass et esou erausgaang:
Ech kontrolléieren meng E-Mail op mengem SmartphoneEn VPN Server hannert dem NAT vum Provider ausféieren
Ech änneren d'Portnummer an den AstellungenEn VPN Server hannert dem NAT vum Provider ausféieren
Ech starten de Client a verbannenEn VPN Server hannert dem NAT vum Provider ausféieren

Beim Schreiwen vun dësem Artikel hunn ech d'Konfiguratioun vu mengem Computer op de Raspberry Pi 3 iwwerdroen a probéiert déi ganz Saach op engem LTE Modem ze lafen, awer et huet net geschafft! Kommando Resultat

# stun stun.ekiga.net -p 11111

STUN Client Versioun 0.97
Primärschoul: Onofhängeg Mapping, Port Ofhängeg Filter, zoufälleg port, wäert Hoerpin
Retour Wäert ass 0x000006

Bedeitung Port ofhängeg Filter huet de System net erlaabt ze starten.
Awer den Heemprovider huet de System erlaabt op der Raspberry Pi 3 ouni Probleemer ze starten.
A Verbindung mat enger Webcam, mat VLC fir
en RTSP Stream vun enger Webcam erstellen

$ 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 op engem Smartphone fir ze kucken (Stream rtsp://10.2.0.1:8554/), et huet sech als e gudde Fernvideoiwwerwaachungssystem erausgestallt, Dir kënnt och Samba installéieren, Traffic iwwer VPN routen, Äre Computer op Fernbedienung a vill méi...

Konklusioun

Wéi d'Praxis gewisen huet, fir e VPN-Server z'organiséieren, kënnt Dir ouni eng extern IP Adress maachen, fir déi Dir musst bezuelen, sou wéi fir e gelounten VPS / VDS. Mee et hänkt alles vum Provider of. Natierlech wollt ech méi Informatioun iwwer déi verschidde Ubidder an Aarte vun NATs kréien, déi benotzt ginn, awer dëst ass just den Ufank ...
Merci fir Är Opmierksamkeet!

Source: will.com

Setzt e Commentaire