A’ ruith frithealaiche VPN air cùl NAT an t-solaraiche

Artaigil mu mar a chaidh agam air frithealaiche VPN a ruith air cùl NAT an t-solaraiche dachaigh agam (às aonais seòladh IP geal). Leig leam glèidheadh ​​​​sa bhad: sin tha coileanadh a’ bhuileachadh seo gu dìreach an urra ris an t-seòrsa NAT a bhios an solaraiche agad a’ cleachdadh, a bharrachd air an router.
Mar sin, dh'fheumadh mi ceangal a dhèanamh bhon fhòn-smart Android agam gu mo choimpiutair dachaigh, tha an dà inneal ceangailte ris an eadar-lìon tro NATs solaraiche, agus tha an coimpiutair ceangailte tro router dachaigh, a tha cuideachd a 'ceangal NATs.
Cha deach beachdachadh air an sgeama clasaigeach a’ cleachdadh VPS/VDS air màl le seòladh IP geal, a bharrachd air seòladh IP geal air màl bho sholaraiche, airson grunn adhbharan.
A 'gabhail a-steach eòlas bho artaigilean a chaidh seachad, an dèidh grunn dheuchainnean a dhèanamh le STUNn agus NAT de sholaraichean. Cho-dhùin mi beagan deuchainn a dhèanamh le bhith a’ ruith an àithne air router dachaigh a ’ruith firmware OpenWRT:

$ stun stun.sipnet.ru

fhuair an toradh:

Tionndadh teachdaiche STUN 0.97
Bun-sgoil: Mapadh Neo-eisimeileach, Criathrag Neo-eisimeileach, port air thuaiream, bidh falt air
Tha luach tilleadh 0x000002

Eadar-theangachadh litireil:
Mapadh Neo-eisimeileach - mapadh neo-eisimeileach
Filter neo-eisimeileach - sìoltachan neo-eisimeileach
port air thuaiream - air thuaiream port
bidh hairpin - bidh hairpin
A 'ruith òrdugh coltach ris air a' PC agam, fhuair mi:

Tionndadh teachdaiche STUN 0.97
Bun-sgoil: Bidh mapadh neo-eisimeileach, criathrag a tha an urra ri Port, port air thuaiream, gu math teann
Tha luach tilleadh 0x000006

Filter a tha an urra ri port - sìoltachan a tha an urra ri port
Sheall an eadar-dhealachadh ann an toraidhean toradh an àithne gun robh an router dachaigh a’ cur “a thabhartas” ris a’ phròiseas airson pacaidean a chuir a-mach bhon eadar-lìn; chaidh seo fhoillseachadh nuair a chaidh an àithne a chuir an gnìomh air a’ choimpiutair:

stun stun.sipnet.ru -p 11111 -v

Fhuair mi an toradh:

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

aig an àm seo, chaidh seisean UDP fhosgladh airson ùine, ma chuireas tu iarrtas UDP aig an àm seo (mar eisimpleir: netcat XX.1XX.1X4.2XX 4398 -u), thàinig an t-iarrtas chun an router dachaigh, a bha air a dhearbhadh le TCPDump a’ ruith air, ach cha do ràinig an t-iarrtas an coimpiutair - leig IPtables, mar eadar-theangair NAT air an router, e.
A’ ruith frithealaiche VPN air cùl NAT an t-solaraiche
Ach thug an fhìrinn gun deach an t-iarrtas UDP tro NAT an t-solaraiche dòchas airson soirbheachas. Leis gu bheil an router suidhichte anns an uachdranas agam, dh ’fhuasgail mi an duilgheadas le bhith ag ath-stiùireadh port UDP / 11111 chun choimpiutair:

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

Mar sin, bha e comasach dhomh seisean UDP a thòiseachadh agus iarrtasan fhaighinn bhon eadar-lìn bho sheòladh IP sam bith. Aig an àm seo, chuir mi OpenVPN-server air bhog (às deidh dhomh a rèiteachadh roimhe) ag èisteachd ri port UDP / 11111, chomharraich mi an seòladh IP taobh a-muigh agus port (XX.1XX.1X4.2XX: 4398) air a ’fòn cliste agus cheangail e gu soirbheachail bhon fhòn-smart gu a' choimpiutair. Ach anns a’ bhuileachadh seo dh’ èirich duilgheadas: bha feum air dòigh air choireigin air an t-seisean UDP a chumail gus an robh an neach-dèiligidh OpenVPN ceangailte ris an fhrithealaiche; Cha bu toil leam an roghainn an neach-dèiligidh STUN a chuir air bhog bho àm gu àm - cha robh mi airson an luchd a chaitheamh air na frithealaichean STUN.
Mhothaich mi cuideachd an inntrig “bidh hairpin - bidh hairpin", am modh seo

Leigidh bearradh fuilt le aon inneal air lìonra ionadail air cùl NAT faighinn gu inneal eile air an aon lìonra aig seòladh a-muigh an router.

A’ ruith frithealaiche VPN air cùl NAT an t-solaraiche
Mar thoradh air an sin, dh 'fhuasgail mi an duilgheadas a thaobh cumail suas seisean UDP - chuir mi air bhog an neach-dèiligidh air an aon choimpiutair leis an fhrithealaiche.
Dh'obraich e mar seo:

  • chuir e air bhog an neach-dèiligidh STUN air port ionadail 11111
  • fhuair sinn freagairt le seòladh IP taobh a-muigh agus port XX.1XX.1X4.2XX:4398
  • chuir sinn dàta le seòladh IP taobh a-muigh agus port gu post-d (tha seirbheis sam bith eile comasach) air a rèiteachadh air a’ fòn cliste
  • chuir e air bhog am frithealaiche OpenVPN air coimpiutair ag èisteachd ri port UDP/11111
  • chuir e air bhog an cleachdaiche OpenVPN air a 'choimpiutair a' sònrachadh XX.1XX.1X4.2XX: 4398 airson ceangal
  • aig àm sam bith chuir an neach-dèiligidh OpenVPN air bhog air a’ fòn cliste a ’nochdadh an seòladh IP agus am port (na mo chùis cha do dh’ atharraich an seòladh IP) gus ceangal

A’ ruith frithealaiche VPN air cùl NAT an t-solaraiche
San dòigh seo bha e comasach dhomh ceangal ris a’ choimpiutair agam bhon fhòn-smart agam. Leigidh am buileachadh seo leat teachdaiche OpenVPN sam bith a cheangal.

Cleachdaich

Gabhaidh e:

# apt install openvpn stun-client sendemail

Às deidh dhuinn sgriobt no dhà a sgrìobhadh, faidhle rèiteachaidh no dhà, agus na teisteanasan riatanach a ghineadh (leis gu bheil an neach-dèiligidh air fòn cliste ag obair le teisteanasan a-mhàin), fhuair sinn am buileachadh àbhaisteach air frithealaiche OpenVPN.

Prìomh sgriobt air a ' choimpiutair

# 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

Sgriobt airson dàta a chuir air post-d:

# 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"

Faidhle rèiteachaidh an fhrithealaiche:

# 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

Faidhle rèiteachaidh teachdaiche:

# 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

Chaidh teisteanasan a chruthachadh a’ cleachdadh an artaigil seo.
A 'ruith an sgriobt:

# ./vpn11.sh

Le bhith ga dhèanamh comasach an toiseach

# chmod +x vpn11.sh

Air an taobh fòn 'smart'

Le bhith a 'stàladh an aplacaid OpenVPN airson Android, an dèidh lethbhreac a dhèanamh den fhaidhle rèiteachaidh, teisteanasan agus a rèiteachadh, thionndaidh e a-mach mar seo:
Bheir mi sùil air a’ phost-d agam air an fhòn-smart agamA’ ruith frithealaiche VPN air cùl NAT an t-solaraiche
Deasaich mi àireamh a’ phuirt anns na roghainneanA’ ruith frithealaiche VPN air cùl NAT an t-solaraiche
Bidh mi a 'cur air bhog an neach-dèiligidh agus a' ceangalA’ ruith frithealaiche VPN air cùl NAT an t-solaraiche

Fhad ‘s a bha mi a’ sgrìobhadh an artaigil seo, ghluais mi an rèiteachadh bhon choimpiutair agam chun Raspberry Pi 3 agus dh ’fheuch mi ris an rud gu lèir a ruith air modem LTE, ach cha do dh’ obraich e! Toradh Command

# stun stun.ekiga.net -p 11111

Tionndadh teachdaiche STUN 0.97
Bun-sgoil: Bidh mapadh neo-eisimeileach, criathrag a tha an urra ri Port, port air thuaiream, gu math teann
Tha luach tilleadh 0x000006

ciallachadh Filter a tha an urra ri port cha do leig leis an t-siostam tòiseachadh.
Ach leig an solaraiche dachaigh leis an t-siostam tòiseachadh air an Raspberry Pi 3 gun duilgheadas sam bith.
Ann an co-bhuinn ri camara-lìn, le VLC airson
cruthachadh sruth RTSP bho chamara-lìn

$ 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

agus VLC air fòn cliste airson coimhead (sruth rtsp: //10.2.0.1:8554/), thionndaidh e a-mach gur e deagh shiostam sgrùdaidh bhidio iomallach a bh’ ann, faodaidh tu cuideachd Samba a chuir a-steach, trafaic slighe tro VPN, smachd a chumail air do choimpiutair air astar agus mòran barrachd...

co-dhùnadh

Mar a tha cleachdadh air sealltainn, gus frithealaiche VPN a chuir air dòigh, faodaidh tu a dhèanamh às aonais seòladh IP taobh a-muigh a dh’ fheumas tu pàigheadh, dìreach mar airson VPS / VDS air màl. Ach tha e uile an urra ris an t-solaraiche. Gu dearbh, bha mi airson barrachd fiosrachaidh fhaighinn mu na diofar sholaraichean agus seòrsaichean NATn a chaidh a chleachdadh, ach chan eil an seo ach toiseach ...
Спасибо за внимание!

Source: www.habr.com

Cuir beachd ann