рджрд┐рдирдХреЛ рд░рд╛рдореНрд░реЛ рд╕рдордп!
рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмрддрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдореИрд▓реЗ рдХрд╕рд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реЗрдВ (
рдЬрдбрд╛рди рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдзреЗрд░реИ рдЪрд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН:
- рдиреЛрдб рд╕реБрд░реБ рдЧрд░реНрджреИ рд░ рд░рд┐рдореЛрдЯ рдиреЛрдб рддрдпрд╛рд░ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдБрджреИ;
- рдмрд╛рд╣реНрдп IP рдареЗрдЧрд╛рдирд╛ рд░ UDP рдкреЛрд░реНрдЯ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджреИ;
- рдмрд╛рд╣рд┐рд░реА IP рдареЗрдЧрд╛рдирд╛ рд░ UDP рдкреЛрд░реНрдЯрд▓рд╛рдИ рдЯрд╛рдврд╛рдХреЛ рд╣реЛрд╕реНрдЯрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджреИ;
- рдЯрд╛рдврд╛рдХреЛ рд╣реЛрд╕реНрдЯрдмрд╛рдЯ рдмрд╛рд╣рд┐рд░реА IP рдареЗрдЧрд╛рдирд╛ рд░ UDP рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ;
- рдПрдХ IPIP рд╕реБрд░реБрдЩ рдХреЛ рд╕рдВрдЧрдарди;
- рдЬрдбрд╛рди рдирд┐рдЧрд░рд╛рдиреА;
- рдпрджрд┐ рдЬрдбрд╛рди рд╣рд░рд╛рдПрдХреЛ рдЫ рднрдиреЗ, 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 рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЕрд╡рд╕реНрдерд┐рдд рдЫ
- 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$name
ip fou del port $localport
рдЯрдиреЗрд▓ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рд░рд┐рдореЛрдЯ рдиреЛрдб рдЯрдиреЗрд▓рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛ рдкрд┐рдВрдЧ рдЧрд░реЗрд░ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░рд┐рдиреНрдЫ:
ping -c 1 $peerip -s 0
рдЖрд╡рдзрд┐рдХ рдкрд┐рдЩ рдореБрдЦреНрдп рд░реВрдкрдорд╛ рдЪреНрдпрд╛рдирд▓ рдХрд╛рдпрдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЕрдиреНрдпрдерд╛, рдЬрдм рд╕реБрд░реБрдЩ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЫ, рд░рд╛рдЙрдЯрд░рд╣рд░реВрдорд╛ NAT рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдЦрд╛рд▓реА рд╣реБрди рд╕рдХреНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЬрдбрд╛рди рдмрд┐рдЪреНрдЫреЗрдж рд╣реБрдиреЗрдЫред
рдпрджрд┐ рдкрд┐рдЩ рдЧрд╛рдпрдм рд╣реБрдиреНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ IPIP рд╕реБрд░реБрдЩ рдореЗрдЯрд╛рдЗрдиреНрдЫ рд░ рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдмрд╛рдЯ рддрдпрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреНрдЫред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдлреИрдВ:
#!/bin/bash
username="[email protected]"
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