Raksts par to, kÄ man izdevÄs palaist VPN serveri aiz sava mÄjas pakalpojumu sniedzÄja NAT (bez baltas IP adreses). Ä»aujiet man nekavÄjoties veikt rezervÄciju: tas Ŕī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 vajadzÄja izveidot savienojumu no sava Android viedtÄlruÅa ar mÄjas datoru, abas ierÄ«ces ir savienotas ar internetu, izmantojot pakalpojumu sniedzÄja NAT, kÄ arÄ« dators ir savienots, izmantojot mÄjas marÅ”rutÄtÄju, kas arÄ« ir savienots ar NAT.
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Ä
$ stun stun.sipnet.ru
ieguva 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 -v
Es 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.XXX
TÄdÄjÄdi es varÄju uzsÄkt UDP sesiju un saÅemt pieprasÄ«jumus no interneta no jebkuras IP adreses. Å ajÄ brÄ«dÄ« es palaižu OpenVPN-serveri (to iepriekÅ” konfigurÄjot), kas klausÄs UDP/11111 portu, norÄdÄ«ju viedtÄlruÅa ÄrÄjo IP adresi un portu (XX.1XX.1X4.2XX:4398) un veiksmÄ«gi izveidoju savienojumu no viedtÄlruÅa ar datoru. Bet Å”ajÄ realizÄcijÄ radÄs problÄma: bija nepiecieÅ”ams kaut kÄ uzturÄt UDP sesiju, lÄ«dz OpenVPN klients ir izveidojis savienojumu ar serveri; man nepatika iespÄja periodiski palaist STUN klientu - es negribÄju tÄrÄt slodzi STUN serveriem.
Es arī pamanīju ierakstu "
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).
- palaida OpenVPN serveri datorÄ, kas klausÄs UDP/11111 portu
- palaida OpenVPN klientu datorÄ, savienojumam norÄdot XX.1XX.1X4.2XX:4398
- jebkurÄ laikÄ viedtÄlrunÄ« palaida OpenVPN klientu, norÄdot IP adresi un portu (manÄ gadÄ«jumÄ IP adrese nemainÄ«jÄs), lai izveidotu savienojumu
TÄdÄ veidÄ es varÄju izveidot savienojumu ar datoru no sava viedtÄlruÅa. Å Ä« ievieÅ”ana ļauj izveidot savienojumu ar jebkuru OpenVPN klientu.
Prakse
Jums būs nepiecieŔams:
# apt install openvpn stun-client sendemail
UzrakstÄ«juÅ”i pÄris skriptus, pÄris konfigurÄcijas failus un Ä£enerÄjuÅ”i nepiecieÅ”amos sertifikÄtus (tÄ kÄ klients viedtÄlrunÄ« strÄdÄ tikai ar sertifikÄtiem), mÄs ieguvÄm parasto OpenVPN servera ievieÅ”anu.
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
done
Skripts 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.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
Klienta konfigurÄcijas fails:
# 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
SertifikÄti tika Ä£enerÄti, izmantojot
Skripta palaiŔana:
# ./vpn11.sh
Vispirms padarot to izpildÄmu
# chmod +x vpn11.sh
ViedtÄlruÅa pusÄ
InstalÄjot lietojumprogrammu OpenVPN operÄtÄjsistÄmai 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 11111
STUN 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-keep
un 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Ä liecina prakse, VPN servera organizÄÅ”anai jÅ«s varat iztikt bez ÄrÄjÄs IP adreses, par kuru jums ir jÄmaksÄ, tÄpat kÄ par Ä«rÄtu VPS/VDS. Bet tas viss ir atkarÄ«gs no pakalpojumu sniedzÄja. Protams, es gribÄju iegÅ«t vairÄk informÄcijas par dažÄdiem pakalpojumu sniedzÄjiem un izmantotajiem NAT veidiem, taÄu tas ir tikai sÄkums...
Š”ŠæŠ°ŃŠøŠ±Š¾ Š·Š° Š²Š½ŠøŠ¼Š°Š½ŠøŠµ!
Avots: www.habr.com