рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рдпреВрдбреАрдкреА рдЫреЗрдж рдЫрд┐рджреНрд░рдг

рджрд┐рди рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп!

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ (рдПрдХ рдФрд░) рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реБрдП, рдпреВрдбреАрдкреА рд╣реЛрд▓ рдкрдВрдЪрд┐рдВрдЧ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ NAT рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рджреЛ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯред Ubuntu/Debian.

рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдПрдХ рдиреЛрдб рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд░рд┐рдореЛрдЯ рдиреЛрдб рдХреЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛;
  2. рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг;
  3. рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдХреЛ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛;
  4. рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рд╕реЗ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддрд╛ рдФрд░ рдпреВрдбреАрдкреА рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
  5. рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рдХрд╛ рд╕рдВрдЧрдарди;
  6. рдХрдиреЗрдХреНрд╢рди рдХреА рдирд┐рдЧрд░рд╛рдиреА;
  7. рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдИрдкреАрдЖрдИрдкреА рд╕реБрд░рдВрдЧ рд╣рдЯрд╛ рджреЗрдВред

рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрд╛ рдФрд░ рдЕрдм рднреА рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рддреЗрдЬрд╝ 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$name

ip 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

DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрд╡рд░ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реАрджреЗрдВ ЁЯФе рдбреАрдбреАрдУрдПрд╕ рд╕реБрд░рдХреНрд╖рд╛, рд╡реАрдкреАрдПрд╕ рдФрд░ рд╡реАрдбреАрдПрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реАрджреЗрдВ | ProHoster