Mandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy

Lahatsoratra iray momba ny fomba nahafahako nitondra mpizara VPN ao ambadiky ny NAT an'ny mpamatsy tranoko (tsy misy adiresy IP fotsy). Avelao aho hanao famandrihana avy hatrany: izany Ny fanatanterahana an'io fampiharana io dia miankina mivantana amin'ny karazana NAT ampiasain'ny mpamatsy anao, ary koa ny router.
Noho izany, mila mifandray avy amin'ny finday Android ho an'ny solosaina an-trano aho, ny fitaovana roa dia mifandray amin'ny Internet amin'ny alΓ lan'ny mpamatsy NATs, miampy ny solosaina dia mifandray amin'ny alΓ lan'ny router an-trano, izay koa ny fifandraisana NATs.
Ny rafitra mahazatra mampiasa VPS/VDS nofaina miaraka amin'ny adiresy IP fotsy, ary koa ny fanofana adiresy IP fotsy amin'ny mpamatsy iray, dia tsy nodinihina noho ny antony maro.
Raha raisina traikefa avy amin'ny lahatsoratra taloha, rehefa nanao andrana maromaro niaraka tamin'ny STUN sy NAT an'ny mpamatsy. Nanapa-kevitra ny hanao andrana kely aho amin'ny alΓ lan'ny fampandehanana ny baiko amin'ny router an-trano mampiasa firmware OpenWRT:

$ stun stun.sipnet.ru

nahazo ny vokatra:

STUN mpanjifa kinova 0.97
Kilonga: Sarintany mahaleo tena, sivana mahaleo tena, seranan-tsambo kisendrasendra, dia hihety volo
Ny sanda miverina dia 0x000002

Dikanteny ara-bakiteny:
Sarintany tsy miankina - sarintany tsy miankina
Sivana tsy miankina - sivana tsy miankina
seranana kisendrasendra - seranana kisendrasendra
will hairpin - hisy hairpin
Nahazo baiko mitovy amin'izany amin'ny PC-ko aho:

STUN mpanjifa kinova 0.97
Kilonga: Sarintany mahaleo tena, sivana miankina amin'ny seranan-tsambo, seranan-tsambo kisendrasendra, dia hihety volo
Ny sanda miverina dia 0x000006

Port Dependent Filter - sivana miankina amin'ny seranana
Ny fahasamihafan'ny vokatry ny baikon'ny baiko dia nanondro fa ny router an-trano dia nanao "ny fandraisany anjara" amin'ny dingan'ny fandefasana fonosana avy amin'ny Internet; izany dia hita tamin'ny zava-misy fa rehefa manatanteraka ny baiko amin'ny ordinatera:

stun stun.sipnet.ru -p 11111 -v

Nahazo ny valiny aho:

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

Amin'izao fotoana izao dia nisokatra nandritra ny fotoana kelikely ny fivoriana UDP, raha toa ka mandefa fangatahana UDP ianao amin'izao fotoana izao (ohatra: netcat XX.1XX.1X4.2XX 4398 -u), dia tonga tany amin'ny router an-trano ny fangatahana, izay nohamafisin'ny TCPDump mihazakazaka eo, fa ny fangatahana dia tsy tonga amin'ny solosaina - IPtables, toy ny NAT mpandika teny amin'ny router, nandatsaka izany.
Mandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy
Saingy ny tena zava-misy fa ny fangatahana UDP nandalo tamin'ny NAT mpamatsy dia nanome fanantenana ny fahombiazana. Satria ao amin'ny fari-piadidiako no misy ny router, dia namaha ny olana aho tamin'ny alΓ lan'ny fandefasana ny seranan-tsambo UDP/11111 amin'ny solosaina:

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

Noho izany, afaka nanomboka fivoriana UDP aho ary nahazo fangatahana avy amin'ny Internet avy amin'ny adiresy IP rehetra. Amin'izao fotoana izao, nanangana OpenVPN-server aho (rehefa nanamboatra azy teo aloha) nihaino ny seranan-tsambo UDP/11111, nanondro ny adiresy IP ivelany sy ny seranan-tsambo (XX.1XX.1X4.2XX:4398) amin'ny finday ary nifandray soa aman-tsara avy amin'ny finday mankany amin'ny finday. ny solosaina. Saingy tamin'ity fampiharana ity dia nisy olana: ilaina ny mitazona ny fivoriana UDP mandra-pahatongan'ny mpanjifa OpenVPN mifandray amin'ny mpizara; Tsy tiako ny safidy handefasana tsindraindray ny mpanjifa STUN - tsy te handany ny entana aho. ny mpizara STUN.
Voamariko koa ny fidirana "will hairpin - hisy hairpin", ity fomba ity

Ny fametahana volo dia ahafahan'ny milina iray ao amin'ny tambajotra eo an-toerana ao ambadiky ny NAT miditra amin'ny milina iray hafa amin'ny tambajotra mitovy amin'ny adiresy ivelany an'ny router.

Mandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy
Vokatr'izany dia namaha ny olan'ny fitazonana fivoriana UDP fotsiny aho - Natomboko tamin'ny solosaina iray ihany ny mpanjifa miaraka amin'ny mpizara.
Niasa toy izao izany:

  • nanangana ny mpanjifa STUN amin'ny seranan-tsambo 11111 eo an-toerana
  • nahazo valiny misy adiresy IP ivelany sy seranan-tsambo XX.1XX.1X4.2XX:4398
  • nandefa angon-drakitra miaraka amin'ny adiresy IP ivelany sy seranan-tsambo mankany amin'ny mailaka (izay serivisy hafa azo atao) voarindra amin'ny smartphone
  • nanangana ny mpizara OpenVPN amin'ny solosaina iray mihaino ny seranan-tsambo UDP/11111
  • nanangana ny mpanjifa OpenVPN amin'ny solosaina manondro XX.1XX.1X4.2XX:4398 ho an'ny fifandraisana
  • na oviana na oviana dia nandefa ny mpanjifa OpenVPN amin'ny finday avo lenta manondro ny adiresy IP sy ny seranan-tsambo (raha ny ahy dia tsy niova ny adiresy IP) hifandraisana

Mandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy
Tamin'izany fomba izany dia afaka nifandray tamin'ny solosainako tamin'ny findaiko aho. Ity fampiharana ity dia ahafahanao mampifandray ny mpanjifa OpenVPN rehetra.

fampiharana

Haka:

# apt install openvpn stun-client sendemail

Rehefa avy nanoratra script roa, fisie fisie roa, ary namorona ny mari-pankasitrahana ilaina (satria ny mpanjifa amin'ny finday dia tsy miasa afa-tsy amin'ny mari-pankasitrahana), nahazo ny fampiharana mahazatra ny mpizara OpenVPN izahay.

Endri-tsoratra lehibe amin'ny solosaina

# 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 ho an'ny fandefasana data amin'ny mailaka:

# 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 fikirakirana mpizara:

# 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

fisie fanamafisana mpanjifa:

# 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

Namboarina tamin'ny fampiasana ny taratasy fanamarinana ity lahatsoratra ity.
Mandeha ny script:

# ./vpn11.sh

Amin'ny fanaovana azy ho executable voalohany

# chmod +x vpn11.sh

Amin'ny lafiny smartphone

Amin'ny fametrahana ny fampiharana OpenVPN ho an'ny Android, rehefa avy nandika ny fisie fanamafisana, ny mari-pankasitrahana ary nanamboatra azy, dia toy izao no niseho:
Manamarina ny mailaka amin'ny findaiko ahoMandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy
Ovaiko ny laharan'ny seranan-tsambo ao amin'ny fikandranaMandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy
Manokatra ny mpanjifa aho ary mifandrayMandeha mpizara VPN ao ambadiky ny NAT an'ny mpamatsy

Teo am-panoratana ity lahatsoratra ity aho dia nafindrako tao amin'ny solosainako ho any amin'ny Raspberry Pi 3 ny fanamafisam-peo ary nanandrana nanamboatra ny zava-drehetra tamin'ny modem LTE aho, saingy tsy nety izany! Vokatry ny baiko

# stun stun.ekiga.net -p 11111

STUN mpanjifa kinova 0.97
Kilonga: Sarintany mahaleo tena, sivana miankina amin'ny seranan-tsambo, seranan-tsambo kisendrasendra, dia hihety volo
Ny sanda miverina dia 0x000006

izay midika hoe Sivana miankina amin'ny seranana tsy namela ny rafitra hanomboka.
Saingy ny mpamatsy trano dia namela ny rafitra hanomboka amin'ny Raspberry Pi 3 tsy misy olana.
Miaraka amin'ny webcam, miaraka amin'ny VLC ho an'ny
mamorona stream RTSP avy amin'ny 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

ary VLC amin'ny finday avo lenta ho an'ny fijerena (stream rtsp://10.2.0.1:8554/), dia hita fa tsara lavitra video fanaraha-maso rafitra, dia afaka ihany koa ny mametraka Samba, lalana fifamoivoizana amin'ny alalan'ny VPN, lavitra mifehy ny solosaina sy ny maro. Bebe kokoa...

famaranana

Araka ny nasehon'ny fanazaran-tena, mba handaminana mpizara VPN dia azonao atao tsy misy adiresy IP ivelany izay tokony aloanao, toy ny ho an'ny VPS/VDS nohofana. Saingy miankina amin'ny mpamatsy izany. Mazava ho azy fa te hahazo fampahalalana bebe kokoa momba ireo mpamatsy sy karazana NAT samihafa ampiasaina aho, saingy vao fanombohana izany ...
Fidio ny Fiteninao

Source: www.habr.com

Add a comment