рджрд┐рди рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп!
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ () рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реБрдП, рдпреВрдбреАрдкреА рд╣реЛрд▓ рдкрдВрдЪрд┐рдВрдЧ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ NAT рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рджреЛ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯред Ubuntu/Debian.
рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
- рдПрдХ рдиреЛрдб рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд░рд┐рдореЛрдЯ рдиреЛрдб рдХреЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛;
- рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг;
- рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдХреЛ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛;
- рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рд╕реЗ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
- рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рдХрд╛ рд╕рдВрдЧрдарди;
- рдХрдиреЗрдХреНрд╢рди рдХреА рдирд┐рдЧрд░рд╛рдиреА;
- рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рд╣рдЯрд╛ рджреЗрдВред
рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрд╛ рдФрд░ рдЕрдм рднреА рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рддреЗрдЬрд╝ 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
рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрди-рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress"рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрдирд╛:
apt install stun-clientрд╕реБрд░рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, iproute2 рдкреИрдХреЗрдЬ рд╕реЗ рдорд╛рдирдХ OS рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореМрдЬреВрдж рдЬрд┐рд╕реЗ рдорд╛рдирдХ рд╕рд╛рдзрдиреЛрдВ (L2TPv3, GRE, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ IPIP рдХреЛ рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдиреНрдпреВрдирддрдо рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпреВрдбреАрдкреА рдкрд░ рдПрд▓2рдЯреАрдкреАрд╡реА3 рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдирд┐рд░рд╛рд╢ рд╣реБрдЖ, рдЧрддрд┐ 10 рдЧреБрдирд╛ рдХрдо рд╣реЛ рдЧрдИ, рд▓реЗрдХрд┐рди рдпреЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдмрдВрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ IPIP рд╕реБрд░рдВрдЧ IP рд╕реНрддрд░ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреА рд╣реИ, FOU рд╕реБрд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ UDP рдкреЛрд░реНрдЯ рд╕реНрддрд░ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- 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 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 рддрд╛рд▓рд┐рдХрд╛рдПрдБ рд╕рд╛рдлрд╝ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдкрд┐рдВрдЧ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рд╕реЗ рддреИрдпрд╛рд░реА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдпрдВ:
#!/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 &рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ IPIP рд╕реБрд░рдВрдЧ рдЗрд╕ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдЯреНрд░реИрдлрд╝рд┐рдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ IPsec рдУрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдпрд╣ рдореБрдЭреЗ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрд╛ред
рдореИрдВ рдХрдИ рд╣рдлреНрддреЛрдВ рд╕реЗ рд╡рд░реНрдХ рдкреАрд╕реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирдЬрд░ рдирд╣реАрдВ рдЖрдИ рд╣реИред рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рднреВрд▓рдиреЗ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ.
рд╢рд╛рдпрдж рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рд╕реБрдЭрд╛рд╡ рд╣реЛрдВрдЧреЗ, рдореБрдЭреЗ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдзрдиреНрдпрд╡рд╛рдж!
рд╕реНрд░реЛрдд: www.habr.com
