የአይፒአይፒ ዋሻን እንደ ምሳሌ በመጠቀም ቀላል የ UDP ቀዳዳ ጡጫ

የቀኑ መልካም ጊዜ!

በዚህ ጽሑፍ ውስጥ እንዴት እንደተገበርኩ ልነግርዎ እፈልጋለሁ (አንድ ተጨማሪ) ኡቡንቱ/ዴቢያን ኦኤስን እንደ ምሳሌ በመጠቀም የUDP ቀዳዳ ጡጫ ቴክኖሎጂን በመጠቀም ከናቲ ጀርባ የሚገኙትን ሁለት ኮምፒውተሮች ለማገናኘት የባሽ ስክሪፕት።

ግንኙነት መመስረት ብዙ ደረጃዎችን ያቀፈ ነው-

  1. መስቀለኛ መንገድ መጀመር እና የርቀት መስቀለኛ መንገድ ዝግጁ እንዲሆን መጠበቅ;
  2. የውጭውን የአይፒ አድራሻ እና የ UDP ወደብ መወሰን;
  3. ውጫዊ የአይፒ አድራሻ እና የ UDP ወደብ ወደ ሩቅ አስተናጋጅ ማስተላለፍ;
  4. ከርቀት አስተናጋጅ ውጫዊ የአይፒ አድራሻ እና የ UDP ወደብ ማግኘት;
  5. የአይፒአይፒ ዋሻ አደረጃጀት;
  6. የግንኙነት ክትትል;
  7. ግንኙነቱ ከጠፋ የ IPIP ዋሻውን ሰርዝ።

ለረጅም ጊዜ አሰብኩ እና አሁንም በኖዶች መካከል ውሂብ ለመለዋወጥ ምን ጥቅም ላይ ሊውል እንደሚችል አስባለሁ, በአሁኑ ጊዜ ለእኔ በጣም ቀላል እና ፈጣኑ በ 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

የውጫዊውን የአይፒ አድራሻ እና የ UDP ወደብ ለማወቅ የደንበኞችን ትዕዛዝ ይጠቀሙ፡-

stun stun.sipnet.ru -v -p $1 2>&1 | grep "MappedAddress"

ከትእዛዝ ጋር መጫን;

apt install stun-client

ዋሻን ለማደራጀት ከ iproute2 ጥቅል ውስጥ መደበኛ የስርዓተ ክወና መሳሪያዎች ጥቅም ላይ ይውላሉ። አለ። ብዙ ዋሻዎች መደበኛ ዘዴዎችን (L2TPv3, GRE, ወዘተ) በመጠቀም ሊነሳ ይችላል, ነገር ግን በስርዓቱ ላይ አነስተኛ ተጨማሪ ጭነት ስለሚፈጥር IPIP ን መርጫለሁ. L2TPv3 በ UDP ላይ ሞክሬአለሁ እና ቅር ብሎኝ ነበር፣ ፍጥነቱ 10 ጊዜ ወድቋል፣ ነገር ግን እነዚህ ከአቅራቢዎች ወይም ከሌላ ነገር ጋር የተያያዙ የተለያዩ ገደቦች ሊሆኑ ይችላሉ። የ IPIP ዋሻ በአይፒ ደረጃ ስለሚሰራ የ 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="[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. በመስቀለኛ መንገድ ላይ ያለው ጊዜ መመሳሰል አለበት. ስክሪፕቱን እንደሚከተለው ማሄድ ይችላሉ፡-

nohup script.sh &

ትራፊኩ ያልተመሰጠረ ከመሆኑ አንጻር የአይፒፒ ዋሻው ደህንነቱ ያልተጠበቀ ስለመሆኑ ትኩረትዎን ለመሳብ እፈልጋለሁ ነገር ግን ይህ በ IPsec በላይ በመጠቀም በቀላሉ ሊፈታ ይችላል. ይህ ጽሑፍ፣ ለእኔ ቀላል እና ለመረዳት የሚቻል መስሎ ታየኝ።

ይህንን ስክሪፕት በመጠቀም ከስራ ፒሲ ጋር ለመገናኘት ለብዙ ሳምንታት እየተጠቀምኩ ነው እና ምንም አይነት ችግር አላስተዋልኩም። እሱን በማቀናበር እና በመርሳት ረገድ ምቹ።

ምናልባት አስተያየቶች እና ጥቆማዎች ይኖሩዎታል, ለማዳመጥ ደስ ይለኛል.

ለሚያደርጉት ጥረት እናመሰግናለን!

ምንጭ: hab.com

አስተያየት ያክሉ