اچھا دن!
اس آرٹیکل میں میں آپ کو بتانا چاہتا ہوں کہ میں نے کیسے لاگو کیا (
کنکشن قائم کرنا کئی مراحل پر مشتمل ہے:
- نوڈ شروع کرنا اور ریموٹ نوڈ کے تیار ہونے کا انتظار کرنا؛
- بیرونی IP ایڈریس اور UDP پورٹ کا تعین کرنا؛
- ایک بیرونی IP ایڈریس اور UDP پورٹ کو دور دراز کے میزبان کو منتقل کرنا؛
- ریموٹ میزبان سے بیرونی IP ایڈریس اور UDP پورٹ حاصل کرنا؛
- آئی پی آئی پی سرنگ کی تنظیم؛
- کنکشن کی نگرانی؛
- اگر کنکشن منقطع ہو جائے تو IPIP ٹنل کو حذف کر دیں۔
میں نے ایک طویل عرصے تک سوچا اور اب بھی سوچتا ہوں کہ نوڈس کے درمیان ڈیٹا کا تبادلہ کرنے کے لیے کیا استعمال کیا جا سکتا ہے، اس وقت میرے لیے سب سے آسان اور تیز ترین Yandex.disk کے ذریعے کام کر رہا ہے۔
- سب سے پہلے، یہ استعمال کرنا آسان ہے - آپ کو 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 پیکیج سے معیاری 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 پتے تفویض کریں:
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
متغیرات۔ کا صارف کا نام, پاس ورڈ и فولڈر دونوں طرف یکساں ہونا چاہیے، لیکن intip - مختلف، مثال کے طور پر: 10.0.0.1 اور 10.0.0.2۔ نوڈس پر وقت مطابقت پذیر ہونا ضروری ہے. آپ اسکرپٹ کو اس طرح چلا سکتے ہیں:
nohup script.sh &
میں آپ کی توجہ اس حقیقت کی طرف مبذول کرانا چاہتا ہوں کہ IPIP سرنگ اس حقیقت کے نقطہ نظر سے غیر محفوظ ہے کہ ٹریفک کو خفیہ نہیں کیا گیا ہے، لیکن اسے IPsec over کا استعمال کرتے ہوئے آسانی سے حل کیا جا سکتا ہے۔
میں اس اسکرپٹ کو کام کے پی سی سے منسلک کرنے کے لیے کئی ہفتوں سے استعمال کر رہا ہوں اور مجھے کوئی پریشانی محسوس نہیں ہوئی۔ اسے ترتیب دینے اور بھولنے کے لحاظ سے آسان ہے۔
شاید آپ کے تبصرے اور مشورے ہوں، مجھے سن کر خوشی ہوگی۔
آپ کا شکریہ!
ماخذ: www.habr.com