ΠΠΎΠ±ΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠΎΠΊ!
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ
ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊ Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» (
ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°Π³ΠΎΠ²:
- ΠΠ°ΠΏΡΡΠΊ ΡΠ·Π»Π° ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π°;
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ UDP-ΠΏΠΎΡΡΠ°;
- ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ UDP-ΠΏΠΎΡΡΠ° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠ·Π»Ρ;
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ UDP-ΠΏΠΎΡΡΠ° ΠΎΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π°;
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ IPIP-ΡΡΠ½Π½Π΅Π»Ρ;
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ;
- ΠΡΠΈ ΠΎΠ±ΡΡΠ²Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΄Π°Π»ΡΡΡ IPIP ΡΡΠ½Π½Π΅Π»Ρ.
Π― Π΄ΠΎΠ»Π³ΠΎ Π΄ΡΠΌΠ°Π» ΠΈ Π΅ΡΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ·Π»Π°ΠΌΠΈ, ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ Π±ΡΡΡΡΠΎΠ΅ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π―Π½Π΄Π΅ΠΊΡ.Π΄ΠΈΡΠΊ.
- ΠΠΎ ΠΏΠ΅ΡΠ²ΡΡ
, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΡΠ° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ β Π½ΡΠΆΠ½ΠΎ 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
ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½Π½Π΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΠ‘ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° iproute2. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
β Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ 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$name
ip fou del port $localport
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΡΠ½Π½Π΅Π»Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΈΠ½Π³Π° Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΡΡΠ½Π½Π΅Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π°, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
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/\ | 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/\
}
function yadelete {
curl -s -X DELETE --user "$1:$2" https://webdav.yandex.ru/\
}
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
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ username, password ΠΈ folder Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π½Π° ΠΎΠ±ΠΎΠΈΡ ΡΡΠΎΡΠΎΠ½Π°Ρ , Π° Π²ΠΎΡ intip β ΡΠ°Π·Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: 10.0.0.1 ΠΈ 10.0.0.2. ΠΡΠ΅ΠΌΡ Π½Π° ΡΠ·Π»Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ. ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
nohup script.sh &
ΠΠ±ΡΠ°ΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ IPIP-ΡΠ΅Π½Π½Π΅Π»Ρ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠ°ΡΠΈΠΊ Π½Π΅ ΡΠΈΡΡΡΠ΅ΡΡΡ, Π½ΠΎ ΡΡΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ IPsec ΠΏΠΎ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π°Π½Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΠΠ ΡΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π΄Π΅Π»Ρ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π». Π£Π΄ΠΎΠ±Π½ΠΎ Π² ΠΏΠ»Π°Π½Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°ΡΡΡΠΎΠΈΠ» ΠΈ Π·Π°Π±ΡΠ».
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΠ°Ρ Π±ΡΠ΄ΡΡ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±ΡΠ΄Ρ ΡΠ°Π΄ Π²ΡΡΠ»ΡΡΠ°ΡΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com