Рӯзи нағз!
Дар ин мақола ман мехоҳам ба шумо бигӯям, ки ман чӣ гуна амалӣ кардам () скрипти Bash барои пайваст кардани ду компютер дар паси NAT бо истифода аз технологияи сӯрохиҳои UDP бо истифода аз Ubuntu/Debian OS ҳамчун мисол.
Таъсиси пайвастшавӣ аз якчанд марҳила иборат аст:
- Оғози гиреҳ ва интизори омода шудани гиреҳи дурдаст;
- Муайян кардани суроғаи IP берунӣ ва порти UDP;
- Интиқоли суроғаи IP берунӣ ва порти UDP ба ҳости дурдаст;
- Гирифтани суроғаи IP-и беруна ва порти UDP аз ҳости дурдаст;
- Ташкили нақби IPIP;
- Мониторинги пайвастшавӣ;
- Агар пайвастшавӣ гум шавад, нақби IPIP-ро нест кунед.
Ман муддати тӯлонӣ фикр мекардам ва ҳоло ҳам фикр мекунам, ки чӣ метавонад барои табодули маълумот байни гиреҳҳо истифода шавад, дар айни замон барои ман соддатарин ва зудтарин кор тавассути Yandex.disk аст.
- Аввалан, истифодаи он осон аст - ба шумо 3 амал лозим аст: эҷод кардан, хондан, нест кардан. Бо curl ин аст:
Эҷод кунед:curl -s -X MKCOL --user "$usename:$password" https://webdav.yandex.ru/$folderХондан:
curl -s --user "$usename:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$folderНест кардан:
curl -s -X DELETE --user "$usename:$password" https://webdav.yandex.ru/$folder - Дуюм, насб кардан осон аст:
apt install curl
Барои муайян кардани суроғаи IP берунӣ ва порти UDP, фармони stun-client -ро истифода баред:
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress"Насбкунӣ бо фармон:
apt install stun-clientБарои ташкили нақб, асбобҳои стандартии OS аз бастаи iproute2 истифода мешаванд. вуҷуд дорад ки онро бо истифода аз воситаҳои стандартӣ (L2TPv3, GRE ва ғайра) эҳё кардан мумкин аст, аммо ман IPIP-ро интихоб кардам, зеро он бори ҳадди ақали иловагиро дар система эҷод мекунад. Ман L2TPv3-ро бар UDP кӯшиш кардам ва ноумед шудам, суръат 10 маротиба паст шуд, аммо инҳо метавонанд маҳдудиятҳои мухталифи марбут ба провайдерҳо ё чизи дигар бошанд. Азбаски нақби IPIP дар сатҳи IP кор мекунад, нақби FOU барои кор дар сатҳи бандари UDP истифода мешавад. Барои ташкили нақби IPIP ба шумо лозим аст:
— модули FOU-ро бор кунед:
modprobe fou— ба порти маҳаллӣ гӯш диҳед:
ip fou add port $localport ipproto 4— нақб созед:
ip link add name fou$name type ipip remote $remoteip local $localip encap fou encap-sport $localport encap-dport $remoteport— баланд бардоштани интерфейси нақб:
ip link set up dev fou$name— таъин кардани суроғаҳои IP-и дохилӣ ва дохилии дурдасти нақб:
ip addr add $intIP peer $peerip dev fou$nameНест кардани нақб:
ip link del dev fou$nameip fou del port $localportҲолати нақб тавассути пинг кардани суроғаи IP-и дохилии нақби гиреҳи дурдаст бо фармони:
ping -c 1 $peerip -s 0Пинги даврӣ пеш аз ҳама барои нигоҳ доштани канал лозим аст, дар акси ҳол, вақте ки нақб бекор аст, ҷадвалҳои NAT дар роутерҳо тоза карда мешаванд ва сипас пайвастшавӣ канда мешавад.
Агар пинг нопадид шавад, он гоҳ нақби IPIP нест карда мешавад ва интизори омодагии ҳости дурдаст аст.
Худи скрипт:
#!/bin/bash
username="username@yandex.ru"
password="password"
folder="vpnid"
intip="10.0.0.1"
localport=`shuf -i 10000-65000 -n 1`
cid=`shuf -i 10000-99999 -n 1`
tid=`shuf -i 10-99 -n 1`
function yaread {
curl -s --user "$1:$2" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$3 | sed 's/></>n</g' | grep "displayname" | sed 's/<d:displayname>//g' | sed 's/</d:displayname>//g' | grep -v $3 | grep -v $4 | sort -r
}
function yacreate {
curl -s -X MKCOL --user "$1:$2" https://webdav.yandex.ru/$3
}
function yadelete {
curl -s -X DELETE --user "$1:$2" https://webdav.yandex.ru/$3
}
function myipport {
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress" | sort | uniq | awk '{print $3}' | head -n1
}
function tunnel-up {
modprobe fou
ip fou add port $4 ipproto 4
ip link add name fou$7 type ipip remote $1 local $3 encap fou encap-sport $4 encap-dport $2
ip link set up dev fou$7
ip addr add $6 peer $5 dev fou$7
}
function tunnel-check {
sleep 10
pings=0
until [[ $pings == 4 ]]; do
if ping -c 1 $1 -s 0 &>/dev/null;
then echo -n .; n=0
else echo -n !; ((pings++))
fi
sleep 15
done
}
function tunnel-down {
ip link del dev fou$1
ip fou del port $2
}
trap 'echo -e "nDisconnecting..." && yadelete $username $password $folder; tunnel-down $tunnelid $localport; echo "IPIP tunnel disconnected!"; exit 1' 1 2 3 8 9 14 15
until [[ -n $end ]]; do
yacreate $username $password $folder
until [[ -n $ip ]]; do
mydate=`date +%s`
timeout="60"
list=`yaread $username $password $folder $cid | head -n1`
yacreate $username $password $folder/$mydate:$cid
for l in $list; do
if [ `echo $l | sed 's/:/ /g' | awk {'print $1'}` -ge $(($mydate-65)) ]; then
#echo $list
myipport=`myipport $localport`
yacreate $username $password $folder/$mydate:$cid:$myipport:$intip:$tid
timeout=$(( $timeout + `echo $l | sed 's/:/ /g' | awk {'print $1'}` - $mydate + 3 ))
ip=`echo $l | sed 's/:/ /g' | awk '{print $3}'`
port=`echo $l | sed 's/:/ /g' | awk '{print $4}'`
peerip=`echo $l | sed 's/:/ /g' | awk '{print $5}'`
peerid=`echo $l | sed 's/:/ /g' | awk '{print $6}'`
if [[ -n $peerid ]]; then tunnelid=$(($peerid*$tid)); fi
fi
done
if ( [[ -z "$ip" ]] && [ "$timeout" -gt 0 ] ) ; then
echo -n "!"
sleep $timeout
fi
done
localip=`ip route get $ip | head -n1 | sed 's|.*src ||' | cut -d' ' -f1`
tunnel-up $ip $port $localip $localport $peerip $intip $tunnelid
tunnel-check $peerip
tunnel-down $tunnelid $localport
yadelete $username $password $folder
unset ip port myipport
done
exit 0Тағйирёбандаҳо Логин, гузарвожа и феҳрист бояд дар хар ду тараф як хел бошад, вале intip - гуногун, масалан: 10.0.0.1 ва 10.0.0.2. Вақт дар гиреҳҳо бояд ҳамоҳанг карда шавад. Шумо метавонед скриптро чунин иҷро кунед:
nohup script.sh &Ман мехоҳам таваҷҷӯҳи шуморо ба он ҷалб намоям, ки нақби IPIP аз нуқтаи назари он, ки трафик рамзгузорӣ нашудааст, хатарнок аст, аммо ин метавонад бо истифода аз IPsec ба осонӣ ҳал карда шавад. , ба назари ман содда ва фахмо менамуд.
Ман ин скриптро барои пайваст шудан ба компютери корӣ дар тӯли чанд ҳафта истифода мебарам ва ягон мушкилотро мушоҳида накардаам. Аз ҷиҳати танзим ва фаромӯш кардани он қулай аст.
Шояд шумо фикру мулоҳизаҳо ва пешниҳодҳо дошта бошед, ман аз шунидани он шод хоҳам шуд.
Ташаккур барои таваҷҷӯҳатон!
Манбаъ: will.com
