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.ruieguva 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 -vEs 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.

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.XXXTas 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Ä.

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

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 sendemailUzrakstot 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
doneSkripts 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.confproto 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 20Klienta konfigurÄcijas fails:
# cat client.confclient
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 30SertifikÄti tika Ä£enerÄti, izmantojot Å is raksts.
Skripta palaiŔana:
# ./vpn11.shVispirms padarot to izpildÄmu
# chmod +x vpn11.shViedtÄ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Ä«
IestatÄ«jumos rediÄ£Äju porta numuru
Palaižu klientu un izveidoju savienojumu
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 11111STUN 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-keepun 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
