Usa ka artikulo bahin sa kung giunsa nako pagdumala ang usa ka VPN server sa luyo sa NAT sa akong taghatag sa balay (walay puti nga IP address). Tugoti ako nga magpareserba dayon: kana ang pasundayag niini nga pagpatuman direkta nagdepende sa matang sa NAT nga gigamit sa imong provider, ingon man sa router.
Mao nga, kinahanglan nako nga magkonektar gikan sa akong Android smartphone sa akong computer sa balay, ang duha nga mga aparato konektado sa Internet pinaagi sa mga NAT sa provider, ug ang kompyuter konektado pinaagi sa usa ka router sa balay, nga mao usab ang mga koneksyon sa NAT.
Ang klasiko nga laraw gamit ang usa ka giabangan nga VPS/VDS nga adunay puti nga IP address, ingon man ang pag-abang sa puti nga IP address gikan sa usa ka provider, wala gikonsiderar sa daghang mga hinungdan.
Gikonsiderar
$ stun stun.sipnet.ru
nakuha ang resulta:
STUN nga bersyon sa kliyente 0.97
Primary: Independent Mapping, Independent Filter, random port, mag-hairpin
Ang bili sa pagbalik mao ang 0x000002
Literal nga paghubad:
Independent Mapping - independente nga pagmapa
Independent Filter - independente nga filter
random port - random port
will hairpin - adunay usa ka hairpin
Ang pagpadagan sa susama nga sugo sa akong PC, nakuha nako:
STUN nga bersyon sa kliyente 0.97
Primary: Independent Mapping, Port Dependent Filter, random port, mag-hairpin
Ang bili sa pagbalik mao ang 0x000006
Port Dependent Filter - filter nga nagsalig sa port
Ang kalainan sa mga resulta sa command output nagpakita nga ang home router naghimo sa "kontribusyon niini" sa proseso sa pagpadala sa mga packet gikan sa Internet; kini gipakita sa kamatuoran nga sa dihang gipatuman ang command sa computer:
stun stun.sipnet.ru -p 11111 -v
Nakuha nako ang resulta:
...
MappedAddress = XX.1XX.1X4.2XX:4398
...
Niining higayona, usa ka sesyon sa UDP ang giablihan sulod sa pipila ka panahon, kung niining higayona nagpadala ka og hangyo sa UDP (pananglitan: netcat XX.1XX.1X4.2XX 4398 -u), unya ang hangyo miabut sa home router, nga mao gipamatud-an sa TCPDump nga nagdagan niini, apan ang hangyo wala makaabot sa kompyuter - IPtables, isip usa ka tighubad sa NAT sa router, naghulog niini.
Apan ang mismong kamatuoran nga ang hangyo sa UDP nga gipasa sa NAT sa provider naghatag paglaum alang sa kalampusan. Tungod kay ang router nahimutang sa akong hurisdiksyon, akong nasulbad ang problema pinaagi sa pag-redirect sa UDP/11111 port sa kompyuter:
iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX
Sa ingon, nakahimo ako sa pagsugod sa usa ka sesyon sa UDP ug nakadawat mga hangyo gikan sa Internet gikan sa bisan unsang IP address. Niining higayona, gilusad nako ang OpenVPN-server (nga na-configure na kini kaniadto) nga naminaw sa UDP/11111 port, nagpakita sa external IP address ug port (XX.1XX.1X4.2XX:4398) sa smartphone ug malampuson nga konektado gikan sa smartphone ngadto sa ang kompyuter. Apan sa kini nga pagpatuman usa ka problema ang mitungha: kinahanglan nga sa usa ka paagi mapadayon ang sesyon sa UDP hangtod ang kliyente sa OpenVPN nga konektado sa server; Dili ko gusto ang kapilian nga matag karon nga paglansad sa kliyente sa STUN - dili ko gusto nga usikan ang load sa ang mga server sa STUN.
Nakabantay pud ko sa entry"
Ang hairpinning nagtugot sa usa ka makina sa lokal nga network luyo sa NAT nga maka-access sa laing makina sa samang network sa eksternal nga adres sa router.
Ingon usa ka sangputanan, nasulbad ra nako ang problema sa pagpadayon sa usa ka sesyon sa UDP - gilusad nako ang kliyente sa parehas nga kompyuter nga adunay server.
Nagtrabaho kini sama niini:
- gilansad ang kliyente sa STUN sa lokal nga pantalan 11111
- nakadawat og tubag nga adunay external IP address ug port XX.1XX.1X4.2XX:4398
- nagpadala og data nga adunay eksternal nga IP address ug port sa email (bisan unsa nga serbisyo posible) nga gi-configure sa smartphone
- gilusad ang OpenVPN server sa usa ka kompyuter nga naminaw sa UDP/11111 port
- gilusad ang OpenVPN nga kliyente sa kompyuter nga nagpiho sa XX.1XX.1X4.2XX:4398 alang sa koneksyon
- bisan unsang orasa gilunsad ang OpenVPN nga kliyente sa smartphone nga nagpakita sa IP address ug port (sa akong kaso ang IP address wala mausab) aron makonektar
Niining paagiha nakakonektar ko sa akong computer gikan sa akong smartphone. Kini nga pagpatuman nagtugot kanimo sa pagkonektar sa bisan unsang OpenVPN nga kliyente.
Pagpraktis
Mahitabo kini:
# apt install openvpn stun-client sendemail
Ang pagsulat sa usa ka magtiayon nga mga script, usa ka pares nga mga file sa pag-configure, ug nakamugna sa kinahanglan nga mga sertipiko (tungod kay ang kliyente sa usa ka smartphone nagtrabaho lamang sa mga sertipiko), nakuha namon ang naandan nga pagpatuman sa usa ka OpenVPN server.
Panguna nga script sa kompyuter
# 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 alang sa pagpadala sa datos pinaagi sa email:
# 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"
File sa pag-configure sa server:
# 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 configuration file:
# 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
Ang mga sertipiko gihimo gamit
Pagpadagan sa script:
# ./vpn11.sh
Pinaagi sa una nga paghimo niini nga ma-executable
# chmod +x vpn11.sh
Sa kilid sa smartphone
Pinaagi sa pag-instalar sa aplikasyon OpenVPN alang sa Android, nga gikopya ang configuration file, mga sertipiko ug gi-configure kini, kini nahimong sama niini:
Gisusi nako ang akong email sa akong smartphone
Gi-edit nako ang numero sa port sa mga setting
Gilunsad nako ang kliyente ug nagkonektar
Samtang nagsulat niini nga artikulo, akong gibalhin ang configuration gikan sa akong computer ngadto sa Raspberry Pi 3 ug misulay sa pagpadagan sa tibuok butang sa usa ka LTE modem, apan wala kini molihok! Resulta sa Sugo
# stun stun.ekiga.net -p 11111
STUN nga bersyon sa kliyente 0.97
Primary: Independent Mapping, Port Dependent Filter, random port, mag-hairpin
Ang bili sa pagbalik mao ang 0x000006
kahulugan Filter nga Nagsalig sa Port wala motugot sa sistema sa pagsugod.
Apan gitugotan sa taghatag sa balay nga magsugod ang sistema sa Raspberry Pi 3 nga wala’y mga problema.
Inubanan sa usa ka webcam, uban sa VLC alang sa
paghimo og RTSP stream gikan sa 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
ug VLC sa usa ka smartphone alang sa pagtan-aw (stream rtsp://10.2.0.1:8554/), kini nahimo nga usa ka maayo nga hilit nga video surveillance system, mahimo usab nimo i-install ang Samba, ruta sa trapiko pinaagi sa VPN, layo nga pagkontrol sa imong kompyuter ug daghan dugang pa...
konklusyon
Sama sa gipakita sa praktis, aron maorganisar ang usa ka VPN server, mahimo nimo nga wala ang usa ka eksternal nga IP address nga kinahanglan nimo nga bayran, sama sa usa ka giabangan nga VPS/VDS. Apan kini tanan nagdepende sa tighatag. Siyempre, gusto ko nga makakuha og dugang nga impormasyon mahitungod sa lain-laing mga providers ug mga matang sa NATs nga gigamit, apan kini mao lamang ang sinugdanan...
Спасибо за внимание!
Source: www.habr.com