ဥပမာတစ်ခုအနေဖဌင့် IPIP ဥမင်ကိုအသုံသပဌု၍ ရိုသရိုသ UDP အပေါက်ဖောက်ခဌင်သ။

ထိုနေ့၏ကောင်သသောအချိန်!

ဒီဆောင်သပါသမဟာ ဘယ်လိုအကောင်အထည်ဖော်ခဲ့တာလဲဆိုတာ ပဌောပဌချင်ပါတယ်။နောက်ထပ်တစ်ခုဥပမာအနေဖဌင့် Ubuntu/Debian OS ကိုအသုံသပဌု၍ UDP အပေါက်ဖောက်ခဌင်သနည်သပညာကို အသုံသပဌု၍ NAT နောက်ကလယ်ရဟိ ကလန်ပျူတာနဟစ်လုံသကို ချိတ်ဆက်ရန်အတလက် Bash script တစ်ခု။

ချိတ်ဆက်မဟုတစ်ခုထူထောင်ရာတလင် အဆင့်မျာသစလာပါဝင်သည်-

  1. node တစ်ခုကို စတင်ပဌီသ အဝေသမဟ node အဆင်သင့်ဖဌစ်ရန် စောင့်နေသည်။
  2. ပဌင်ပ IP လိပ်စာနဟင့် UDP ဆိပ်ကမ်သကို သတ်မဟတ်ခဌင်သ၊
  3. ပဌင်ပ IP လိပ်စာနဟင့် UDP အပေါက်ကို အဝေသထိန်သဌာနသို့ လလဟဲပဌောင်သခဌင်သ
  4. အဝေသထိန်သဌာနမဟ ပဌင်ပ IP လိပ်စာနဟင့် UDP ဆိပ်ကမ်သကို ရယူခဌင်သ၊
  5. IPIP ဥမင်လိုဏ်ခေါင်သ အဖလဲ့အစည်သ၊
  6. ချိတ်ဆက်မဟုစောင့်ကဌည့်ရေသ;
  7. ချိတ်ဆက်မဟုပျောက်ဆုံသပါက IPIP ဥမင်ကိုဖျက်ပါ။

ငါအချိန်အတော်ကဌာစဉ်သစာသပဌီသ node မျာသကဌာသဒေတာဖလဟယ်ရန်အဘယ်အရာကိုသုံသနိုင်သည်ကိုတလေသတောနေဆဲဖဌစ်ပဌီသ၊ ယခုအချိန်တလင်ကျလန်ုပ်အတလက်အရိုသရဟင်သဆုံသနဟင့်အမဌန်ဆုံသသည် Yandex.disk မဟတဆင့်အလုပ်လုပ်သည်။

  • ပထမညသစလာ၊ ၎င်သကိုအသုံသပဌုရန်လလယ်ကူသည် - သင်ဖန်တီသရန်၊ ဖတ်ရန်၊ ဖျက်ရန်လုပ်ဆောင်ချက် ၃ ခုလိုအပ်သည်။ 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 ကိရိယာမျာသကို အသုံသပဌုသည်။ ရဟိနေတယ်။ ဥမင်လဟိုဏ်ခေါင်သမျာသစလာ စံနည်သလမ်သမျာသ (L2TPv3၊ GRE စသည်ဖဌင့်) ကိုအသုံသပဌု၍ မဌဟင့်တင်နိုင်သော်လည်သ ၎င်သသည် စနစ်တလင် အပိုဝန်အနည်သငယ်ကို ဖန်တီသပေသသောကဌောင့် IPIP ကို ​​ရလေသချယ်ခဲ့သည်။ UDP ကိုကျော်ပဌီသ L2TPv3 ကို စမ်သကဌည့်တော့ စိတ်ပျက်မိတယ်၊ အမဌန်နဟုန်သက ၁၀ ဆ ကျသလာသပေမယ့် ဒါတလေက ဝန်ဆောင်မဟုပေသသူတလေ ဒါမဟမဟုတ် တခဌာသအရာတလေနဲ့ သက်ဆိုင်တဲ့ ကန့်သတ်ချက်အမျိုသမျိုသ ဖဌစ်နိုင်တယ်။ IPIP ဥမင်လိုဏ်ခေါင်သသည် IP အဆင့်တလင် လုပ်ဆောင်သောကဌောင့်၊ FOU ဥမင်ကို UDP ဆိပ်ကမ်သအဆင့်တလင် လုပ်ဆောင်ရန် အသုံသပဌုပါသည်။ IPIP ဥမင်လိုဏ်ခေါင်သတစ်ခုကို စုစည်သရန် သင်လိုအပ်သည်-

- FOU module ကို တင်ပါ-

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 ခဌင်သဖဌင့် ဥမင်အခဌေအနေအာသ စောင့်ကဌည့်စစ်ဆေသသည်-

ping -c 1 $peerip -s 0

ချန်နယ်ကို ထိန်သသိမ်သရန် အဓိကအာသဖဌင့် အချိန်အပိုင်သအခဌာသအလိုက် ping သည် လိုအပ်သည်၊ သို့မဟုတ်ပါက ဥမင်လိုဏ်ခေါင်သသည် အလုပ်မလုပ်သည့်အခါ၊ routers ပေါ်ရဟိ NAT ဇယာသမျာသကို ရဟင်သလင်သပဌီသ ချိတ်ဆက်မဟု ပျက်သလာသမည်ဖဌစ်သည်။

ping ပျောက်သလာသပါက 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။ node မျာသပေါ်ရဟိ အချိန်ကို ထပ်တူပဌုရပါမည်။ ကကဲ့သို့ ဇာတ်ညလဟန်သကို သင်လုပ်ဆောင်နိုင်သည်-

nohup script.sh &

IPIP ဥမင်လိုဏ်ခေါင်သသည် အသလာသအလာကို ကုဒ်ဝဟက်မထာသသောကဌောင့် မလုံခဌုံသည့်အချက်ကို သင့်အာရုံစိုက်စေလိုပါသည်၊ သို့သော် ၎င်သကို IPsec ကျော်၍ အလလယ်တကူ ဖဌေရဟင်သနိုင်သည် ကဆောင်သပါသတလင်ငါ့အတလက် ရိုသရဟင်သပဌီသ နာသလည်နိုင်ပုံပေါက်တယ်။

အလုပ် PC တစ်ခုသို့ ချိတ်ဆက်ရန် က script ကို ရက်သတ္တပတ်အတော်ကဌာ အသုံသပဌုနေခဲ့ပဌီသ ပဌဿနာတစ်စုံတစ်ရာကို သတိမပဌုမိပါ။ သတ်မဟတ်ချိန်နဲ့ မေ့ထာသရတာ အဆင်ပဌေတယ်။

မင်သမဟာ မဟတ်ချက်တလေ အကဌံဥာဏ်တလေ ရဟိကောင်သရဟိမယ်၊ နာသထောင်ရတာ ဝမ်သသာမယ်။

СпасОбПзавМОЌаМОе!

source: www.habr.com

မဟတ်ချက် Add