āĻĻāĻŋāύ āĻāĻžāϞ āϏāĻŽāϝāĻŧ!
āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻāĻŽāĻŋ āĻāĻĒāύāĻžāĻā§ āĻŦāϞāϤ⧠āĻāĻžāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻŽāĻŋ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ āĻāϰā§āĻāĻŋ (āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽāĻā§ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠UDP āĻšā§āϞ āĻĒāĻžāĻā§āĻāĻŋāĻ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠NAT-āĻāϰ āĻĒā§āĻāύ⧠āĻĨāĻžāĻāĻž āĻĻā§āĻāĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āϏāĻāϝā§āĻ āĻāϰāĻžāϰ āĻŦā§āϝāĻžāĻļ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĨ¤ Ubuntu/Debian.
āĻāĻāĻāĻŋ āϏāĻāϝā§āĻ āϏā§āĻĨāĻžāĻĒāύ⧠āĻāϝāĻŧā§āĻāĻāĻŋ āϧāĻžāĻĒ āϰāϝāĻŧā§āĻā§:
- āĻāĻāĻāĻŋ āύā§āĻĄ āĻļā§āϰ⧠āĻāϰāĻž āĻāĻŦāĻ āĻĻā§āϰāĻŦāϰā§āϤ⧠āύā§āĻĄ āĻĒā§āϰāϏā§āϤā§āϤ āĻšāĻāϝāĻŧāĻžāϰ āĻāύā§āϝ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāĻž;
- āĻŦāĻžāĻšā§āϝāĻŋāĻ IP āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ UDP āĻĒā§āϰā§āĻ āύāĻŋāϰā§āϧāĻžāϰāĻŖ;
- āĻĻā§āϰāĻŦāϰā§āϤ⧠āĻšā§āϏā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻšāĻŋāϰāĻžāĻāϤ IP āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ UDP āĻĒā§āϰā§āĻ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰāĻž;
- āĻĻā§āϰāĻŦāϰā§āϤ⧠āĻšā§āϏā§āĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻšāĻŋāϰāĻžāĻāϤ āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāύāĻž āĻāĻŦāĻ UDP āĻĒā§āϰā§āĻ āĻĒā§āϰāĻžāĻĒā§āϤ āĻāϰāĻž;
- āĻāĻāĻāĻŋ āĻāĻāĻĒāĻŋāĻāĻāĻĒāĻŋ āĻāĻžāύā§āϞā§āϰ āϏāĻāĻāĻ āύ;
- āϏāĻāϝā§āĻ āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ;
- āϏāĻāϝā§āĻ āĻšāĻžāϰāĻŋāϝāĻŧā§ āĻā§āϞā§, IPIP āĻāĻžāύā§āϞāĻāĻŋ āĻŽā§āĻā§āύāĨ¤
āĻāĻŽāĻŋ āĻĻā§āϰā§āĻ āϏāĻŽāϝāĻŧā§āϰ āĻāύā§āϝ āĻā§āĻŦā§āĻāĻŋāϞāĻžāĻŽ āĻāĻŦāĻ āĻāĻāύāĻ āĻŽāύ⧠āĻāϰāĻŋ āύā§āĻĄāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻŦāĻŋāύāĻŋāĻŽāϝāĻŧ āĻāϰāϤ⧠āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āĻāĻŽāĻžāϰ āĻāύā§āϝ āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻšāĻ āĻāĻŦāĻ āĻĻā§āϰā§āϤāϤāĻŽ āĻāĻžāĻāĻāĻŋ Yandex.disk āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻžāĻ āĻāϰāĻā§āĨ¤
- āĻĒā§āϰāĻĨāĻŽāϤ, āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϏāĻšāĻ - āĻāĻĒāύāĻžāϰ 3āĻāĻŋ āĻā§āϰāĻŋāϝāĻŧāĻž āĻĻāϰāĻāĻžāϰ: āϤā§āϰāĻŋ āĻāϰā§āύ, āĻĒāĻĄāĻŧā§āύ, āĻŽā§āĻā§āύāĨ¤ āĻāĻžāϰā§āϞ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻŋ āĻšāϞ:
āϏā§āώā§āĻāĻŋ: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āĻāĻāĻāĻŋ āĻāĻžāύā§āϞ āϏāĻāĻāĻ āĻŋāϤ āĻāϰāϤā§, iproute2 āĻĒā§āϝāĻžāĻā§āĻ āĻĨā§āĻā§ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ OS āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϝāĻž āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āĻāĻĒāĻžāϝāĻŧ (L2TPv3, GRE, āĻāϤā§āϝāĻžāĻĻāĻŋ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϤā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻŽāĻŋ IPIP āĻŦā§āĻā§ āύāĻŋāϝāĻŧā§āĻāĻŋ āĻāĻžāϰāĻŖ āĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽā§ āύā§āϝā§āύāϤāĻŽ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϞā§āĻĄ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āĻāĻŽāĻŋ UDP-āĻāϰ āĻāĻĒāϰ L2TPv3 āĻā§āώā§āĻāĻž āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āĻšāϤāĻžāĻļ āĻšāϝāĻŧā§āĻāĻŋ, āĻāϤāĻŋ 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āĻāĻŽāĻžāύā§āĻĄ āϏāĻš āĻĻā§āϰāĻŦāϰā§āϤ⧠āύā§āĻĄ āĻāĻžāύā§āϞā§āϰ āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāύāĻžāĻāĻŋ āĻĒāϰā§āϝāĻžāϝāĻŧāĻā§āϰāĻŽā§ āĻĒāĻŋāĻ āĻāϰ⧠āĻāĻžāύā§āϞā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧ:
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āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻļā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āύāĻžāĻŽ, āĻĒāĻžāϏāĻāϝāĻŧāĻžāϰā§āĻĄ и āĻĢā§āϞā§āĻĄāĻžāϰā§āϰ āĻāĻāϝāĻŧ āĻĒāĻā§āώā§āϰ āĻāĻāĻ āĻšāϤ⧠āĻšāĻŦā§, āĻāĻŋāύā§āϤ⧠āĻāĻāĻāĻŋ - āĻāĻŋāύā§āύ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ: 10.0.0.1 āĻāĻŦāĻ 10.0.0.2āĨ¤ āύā§āĻĄā§āϰ āϏāĻŽāϝāĻŧ āĻ āĻŦāĻļā§āϝāĻ āϏāĻŋāĻā§āĻā§āϰā§āύāĻžāĻāĻ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āĻāĻĒāύāĻŋ āĻāĻ āĻŽāϤ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύ:
nohup script.sh &āĻāĻŽāĻŋ āĻāĻĒāύāĻžāϰ āĻĻā§āώā§āĻāĻŋ āĻāĻāϰā§āώāĻŖ āĻāϰāϤ⧠āĻāĻžāĻ āϝ⧠āĻāĻāĻĒāĻŋāĻāĻāĻĒāĻŋ āĻāĻžāύā§āϞāĻāĻŋ āĻā§āϰā§āϝāĻžāĻĢāĻŋāĻ āĻāύāĻā§āϰāĻŋāĻĒā§āĻ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋ āĻāĻŽāύ āĻĻā§āώā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§ āĻ āύāĻŋāϰāĻžāĻĒāĻĻ, āϤāĻŦā§ āĻāĻāĻŋ āĻāĻāĻĒāĻŋāϏā§āĻ āĻāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻšāĻā§āĻ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠, āĻāĻāĻž āĻāĻŽāĻžāϰ āĻāĻžāĻā§ āϏāĻšāĻ āĻāĻŦāĻ āĻŦā§āϧāĻāĻŽā§āϝ āĻŦāϞ⧠āĻŽāύ⧠āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤
āĻāĻŽāĻŋ āĻāĻāύ āĻŦā§āĻļ āĻāϝāĻŧā§āĻ āϏāĻĒā§āϤāĻžāĻš āϧāϰ⧠āĻāĻāĻāĻŋ āĻāĻžāĻā§āϰ āĻĒāĻŋāϏāĻŋāϤ⧠āϏāĻāϝā§āĻ āĻāϰāϤ⧠āĻāĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻāĻŋ āĻāĻŦāĻ āĻā§āύ⧠āϏāĻŽāϏā§āϝāĻž āϞāĻā§āώā§āϝ āĻāϰāĻŋāύāĻŋāĨ¤ āĻāĻāĻŋ āϏā§āĻ āĻāϰāĻž āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āϞ⧠āϝāĻžāĻāϝāĻŧāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻāĨ¤
āϏāĻŽā§āĻāĻŦāϤ āĻāĻĒāύāĻžāϰ āĻŽāύā§āϤāĻŦā§āϝ āĻāĻŦāĻ āĻĒāϰāĻžāĻŽāϰā§āĻļ āĻĨāĻžāĻāĻŦā§, āĻāĻŽāĻŋ āĻļā§āύāϤ⧠āĻā§āĻļāĻŋ āĻšāĻŦāĨ¤
āĻāĻĒāύāĻžāϰ āĻŽāύā§āϝā§āĻā§āϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āϧāύā§āϝāĻŦāĻžāĻĻ!
āĻāϤā§āϏ: www.habr.com
