Etxeko hornitzaile baten NATaren atzean VPN zerbitzari bat exekutatzeko nola lortu nuen (IP helbide zuririk gabe) buruzko artikulu bat. Esango dizut berehala: ezarpen honen errendimendua zuzenean zure hornitzaileak erabiltzen duen NAT motaren araberakoa da, baita bideratzaileak ere.
Beraz, nire Android telefonotik nire etxeko ordenagailura konektatu beharra nuen, bi gailuak Internetera konektatzen dira hornitzaileen NATen bidez, gainera ordenagailua etxeko bideratzaile baten bidez konektatuta dago, eta horrek ere NAT konexioak egiten ditu.
IP helbide zuria duen VPS / VDS alokatutako eskema klasikoa erabiltzeaz gain, hornitzailearen IP helbide zuria alokatzeaz gain, ez zen kontuan hartu hainbat arrazoirengatik.
Kontuan hartuta
$ stun stun.sipnet.ru
emaitza lortu du:
STUN bezeroaren bertsioa 0.97
Lehena: mapa independentea, iragazki independentea, ausazko ataka, ilea izango da
itzultzeko balioa da 0x000002
Itzulpen literala:
Independent Mapping - pantaila independentea
Independent Filter - iragazki independentea
random port - ausazko ataka
ilea izango da - ilea izango da
Nire ordenagailuan antzeko komando bat exekutatu ondoren, lortu nuen:
STUN bezeroaren bertsioa 0.97
Lehena: mapa independentea, portuen menpeko iragazkia, ausazko ataka, ilea izango da
itzultzeko balioa da 0x000006
Port Dependent Filter - portuen menpeko iragazkia
Komandoen irteerako emaitzen desberdintasunak adierazi zuen etxeko bideratzaileak "bere ekarpena" egin zuela Internetetik paketeak igortzeko prozesuan, hau da, komandoa ordenagailuan exekutatzen zenean:
stun stun.sipnet.ru -p 11111 -v
emaitza lortu dut:
...
MappedAddress = XX.1XX.1X4.2XX:4398
...
une horretan, UDP saio bat ireki zen denbora batez, une horretan UDP eskaera bat bidali bazen (adibidez: netcat XX.1XX.1X4.2XX 4398 -u), orduan eskaera etxeko bideratzailera iritsi zen, hau da. bertan exekutatzen ari den TCPDump-ek baieztatu zuen, baina eskaera ez zen ordenagailura iritsi - IPtables-ek bideratzaileko NAT itzultzaile gisa erori egin zuen.
Baina hornitzailearen NAT bidez UDP eskaera bat pasatzeak arrakastarako itxaropena eman zuen. Bideratzailea nire jurisdikzioan dagoenez, arazoa konpondu nuen UDP / 11111 ataka ordenagailura birbideratuz:
iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.1XX.2XX.XXX --dport 11111 -j DNAT --to-destination 192.168.X.XXX
Hala, aukera izan nuen UDP saio bat hasteko eta Internetetik eskaerak jasotzeko edozein IP helbidetatik. Momentu honetan, OpenVPN zerbitzaria abiarazi nuen (konfiguratu ondoren) UDP/11111 ataka entzuten, kanpoko IP helbidea eta ataka (XX.1XX.1X4.2XX:4398) adierazi nituen telefonoan eta ondo konektatu nintzen telefonotik telefonora. ordenagailua. Baina inplementazio honetan, arazo bat sortu zen, beharrezkoa zen nolabait UDP saioa mantentzea OpenVPN bezeroa zerbitzarira konektatu arte, ez zitzaidan gustatu STUN bezeroa aldian-aldian abiarazteko aukera - ez nuen STUN zerbitzariak kargatu nahi. Alferrik.
Sarreran ere arreta jarri zuen "
Hairpinning-ak NAT atzean dagoen sare lokaleko makina bati sare bereko beste makina bat sartzea ahalbidetzen dio bideratzailearen kanpoko helbidean.
Ondorioz, UDP saio bat mantentzeko arazoa besterik gabe konpondu nuen: bezeroa zerbitzariaren ordenagailu berean abiarazi nuen.
Honela funtzionatu zuen:
- STUN bezeroa abiarazi zuen 11111 ataka lokalarekin
- erantzuna jaso du kanpoko IP helbidearekin eta XX.1XX.1X4.2XX:4398 atakarekin
- kanpoko IP helbide eta ataka batekin datuak bidali ditu telefonoan konfiguratutako postara (beste edozein zerbitzu posible da).
- OpenVPN zerbitzari bat abiarazi zuen UDP/11111 atakan entzuten ari den ordenagailu batean
- OpenVPN bezero bat abiarazi zuen ordenagailu batean XX.1XX.1X4.2XX:4398 zehazten zuen konektatzeko
- edozein unetan abiarazi zuen OpenVPN bezeroa telefonoan, IP helbidea eta ataka zehaztuz (nire kasuan, IP helbidea ez zen aldatu) konektatzeko
Horrela, nire ordenagailura konektatzeko aukera izan nuen smartphone batetik. Inplementazio honek edozein OpenVPN bezero konektatzeko aukera ematen du.
Praktika
Hartuko du:
# apt install openvpn stun-client sendemail
Script pare bat, konfigurazio fitxategi pare bat idatzi ondoren, beharrezko ziurtagiriak sortuz (smartphoneko bezeroak ziurtagiriekin soilik funtzionatzen duenez), OpenVPN zerbitzariaren ohiko inplementazioa lortu dugu.
Ordenagailuko gidoi nagusia
# 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
Posta elektronikoa bidaltzeko gidoia:
# 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"
Zerbitzariaren konfigurazio fitxategia:
# 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
Bezeroaren konfigurazio fitxategia:
# 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
Horren arabera sortu ziren ziurtagiriak
Gidoia exekutatzen:
# ./vpn11.sh
Lehenik eta behin exekutagarria izatea
# chmod +x vpn11.sh
Smartphone aldean
Aplikazioa instalatuz Ireki VPN Androiderako, konfigurazio fitxategia, ziurtagiriak kopiatu eta konfiguratuz, honela geratu zen:
Nire telefonoan posta elektronikoa egiaztatzen
Portuaren zenbakia editatzen dut ezarpenetan
Bezeroa abiarazten dut eta konektatzen naiz
Artikulua idazteko prozesuan, konfigurazioa ordenagailutik Raspberry Pi 3ra transferitu nuen eta guztia LTE modem batean exekutatzen saiatu nintzen, baina ez zuen funtzionatu! aginduaren emaitza
# stun stun.ekiga.net -p 11111
STUN bezeroaren bertsioa 0.97
Lehena: mapa independentea, portuen menpeko iragazkia, ausazko ataka, ilea izango da
itzultzeko balioa da 0x000006
balioa Portuaren menpeko iragazkia sistema abiaraztea eragotzi zuen.
Baina etxeko hornitzaileak sistema Raspberry Pi 3-n exekutatzen utzi zuen arazorik gabe.
Webcam batekin batera, VLC-rekin
Webcam batetik RTSP korrontea sortzea
$ 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
eta VLC telefonoan ikusteko (korrontea rtsp://10.2.0.1:8554/), ez zen bideo-zaintza sistema txarra urrundik atera, Samba ere konfigura dezakezu, VPN bidez trafikoa bideratu, ordenagailu bat urrunetik kontrolatu. eta askoz gehiago...
Irteera
Praktikak erakutsi duenez, VPN zerbitzari bat antolatzeko, ordaindu behar duzun kanpoko IP helbiderik gabe egin dezakezu, baita alokatutako VPS / VDS bat ere. Baina dena hornitzailearen araberakoa da. Noski, erabilitako NAT mota eta hornitzaileei buruzko informazio gehiago lortu nahi nuen, baina hau hasiera baino ez da...
Eskerrik asko zure arreta!
Iturria: www.habr.com