Masa yang baik hari ini!
Dalam artikel ini saya ingin memberitahu anda bagaimana saya melaksanakan (
Mewujudkan sambungan terdiri daripada beberapa langkah:
- Memulakan nod dan menunggu nod jauh siap;
- Menentukan alamat IP luaran dan port UDP;
- Memindahkan alamat IP luaran dan port UDP ke hos jauh;
- Mendapatkan alamat IP luaran dan port UDP daripada hos jauh;
- Organisasi terowong IPIP;
- Pemantauan sambungan;
- Jika sambungan terputus, padamkan terowong IPIP.
Saya berfikir untuk masa yang lama dan masih berfikir apa yang boleh digunakan untuk menukar data antara nod, yang paling mudah dan terpantas bagi saya pada masa ini adalah bekerja melalui Yandex.disk.
- Pertama, ia mudah digunakan - anda memerlukan 3 tindakan: buat, baca, padam. Dengan curl ini adalah:
Cipta:curl -s -X MKCOL --user "$usename:$password" https://webdav.yandex.ru/$folder
Baca:
curl -s --user "$usename:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$folder
Padam:
curl -s -X DELETE --user "$usename:$password" https://webdav.yandex.ru/$folder
- Kedua, ia mudah dipasang:
apt install curl
Untuk menentukan alamat IP luaran dan port UDP, gunakan perintah stun-client:
stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress"
Pemasangan dengan arahan:
apt install stun-client
Untuk mengatur terowong, alat OS standard dari pakej iproute2 digunakan. wujud
β muatkan modul FOU:
modprobe fou
β mendengar pelabuhan tempatan:
ip fou add port $localport ipproto 4
- buat terowong:
ip link add name fou$name type ipip remote $remoteip local $localip encap fou encap-sport $localport encap-dport $remoteport
β menaikkan antara muka terowong:
ip link set up dev fou$name
β tetapkan alamat IP jauh tempatan dan dalaman dalaman terowong:
ip addr add $intIP peer $peerip dev fou$name
Padamkan terowong:
ip link del dev fou$name
ip fou del port $localport
Keadaan terowong dipantau dengan ping secara berkala alamat IP dalaman terowong nod jauh dengan arahan:
ping -c 1 $peerip -s 0
Ping berkala diperlukan terutamanya untuk mengekalkan saluran, jika tidak, apabila terowong melahu, jadual NAT pada penghala mungkin dikosongkan dan kemudian sambungan akan terputus.
Jika ping hilang, maka terowong IPIP dipadamkan dan menunggu kesediaan daripada hos jauh.
Skrip itu sendiri:
#!/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
Pembolehubah nama pengguna, kata laluan ΠΈ folder sepatutnya sama di kedua-dua belah pihak, tetapi intip - berbeza, contohnya: 10.0.0.1 dan 10.0.0.2. Masa pada nod mesti disegerakkan. Anda boleh menjalankan skrip seperti ini:
nohup script.sh &
Saya ingin menarik perhatian anda kepada fakta bahawa terowong IPIP tidak selamat dari sudut pandangan fakta bahawa trafik tidak disulitkan, tetapi ini boleh diselesaikan dengan mudah menggunakan IPsec over
Saya telah menggunakan skrip ini untuk menyambung ke PC kerja selama beberapa minggu sekarang dan tidak menyedari sebarang masalah. Mudah dari segi menetapkannya dan melupakannya.
Mungkin anda akan mempunyai komen dan cadangan, saya akan senang mendengarnya.
Thank you!
Sumber: www.habr.com