Yooj yim UDP qhov xuas nrig ntaus siv IPIP qhov ua piv txwv

Nyob zoo!

Hauv tsab xov xwm no kuv xav qhia koj seb kuv siv li cas (ib ntau) ib tsab ntawv Bash rau txuas ob lub khoos phis tawj nyob tom qab NAT siv UDP qhov xuas nrig ntaus tshuab siv Ubuntu / Debian OS ua piv txwv.

Tsim kom muaj kev sib txuas muaj ob peb kauj ruam:

  1. Pib lub node thiab tos rau cov chaw taws teeb tswj kom npaj tau;
  2. Txiav txim siab qhov chaw nyob IP sab nraud thiab UDP chaw nres nkoj;
  3. Hloov chaw nyob IP sab nraud thiab UDP chaw nres nkoj mus rau ib lub chaw nyob deb;
  4. Tau txais qhov chaw nyob IP sab nraud thiab UDP chaw nres nkoj los ntawm tus tswv tsev nyob deb;
  5. Lub koom haum ntawm ib qho IPIP qhov;
  6. Kev soj ntsuam kev sib txuas;
  7. Yog tias qhov kev twb kev txuas ploj lawm, tshem tawm IPIP qhov.

Kuv xav tau ntev thiab tseem xav tias dab tsi tuaj yeem siv los pauv cov ntaub ntawv ntawm cov nodes, qhov yooj yim tshaj plaws thiab ceev tshaj plaws rau kuv tam sim no yog ua haujlwm los ntawm Yandex.disk.

  • Ua ntej, nws yog ib qho yooj yim mus use - koj xav tau 3 yam: tsim, nyeem, rho tawm. Nrog curl, qhov no yog:
    Tsim:

    curl -s -X MKCOL --user "$usename:$password" https://webdav.yandex.ru/$folder

    Nyeem:

    curl -s --user "$usename:$password" -X PROPFIND -H "Depth: 1" https://webdav.yandex.ru/$folder

    Rho tawm:

    curl -s -X DELETE --user "$usename:$password" https://webdav.yandex.ru/$folder
  • Secondly, nws yog ib qho yooj yim rau nruab:
    apt install curl

Txhawm rau txiav txim siab qhov chaw nyob IP sab nraud thiab UDP chaw nres nkoj, siv cov lus txib stun-client:

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

Installation nrog hais kom ua:

apt install stun-client

Txhawm rau npaj lub qhov, tus qauv OS cov cuab yeej los ntawm iproute2 pob yog siv. Muaj ntau qhov tunnels uas tuaj yeem tsa tau siv tus qauv txhais tau tias (L2TPv3, GRE, thiab lwm yam), tab sis kuv xaiv IPIP vim tias nws tsim tsawg kawg nkaus load ntawm lub system. Kuv sim L2TPv3 dhau UDP thiab poob siab, qhov nrawm poob 10 zaug, tab sis cov no tuaj yeem yog ntau yam kev txwv ntsig txog cov chaw muab kev pabcuam lossis lwm yam. Txij li thaum IPIP qhov ua haujlwm ntawm IP theem, FOU qhov yog siv los ua haujlwm ntawm UDP chaw nres nkoj theem. Txhawm rau npaj ib qho IPIP qhov koj xav tau:

- thauj khoom FOU module:

modprobe fou

- mloog qhov chaw nres nkoj hauv zos:

ip fou add port $localport ipproto 4

- tsim ib qhov tunnel:

ip link add name fou$name type ipip remote $remoteip local $localip encap fou  encap-sport $localport encap-dport $remoteport

- tsa lub qhov interface:

ip link set up dev fou$name

- Muab cov chaw nyob hauv zos thiab sab hauv IP chaw nyob ntawm lub qhov:

ip addr add $intIP peer $peerip dev fou$name

Rho tawm ib qhov tunnel:

ip link del dev fou$name

ip fou del port $localport

Lub xeev tunnel raug saib xyuas los ntawm ntu ntu pinging qhov chaw nyob IP sab hauv ntawm qhov chaw taws teeb ntawm qhov chaw nrog cov lus txib:

ping -c 1 $peerip -s 0

Lub sijhawm ping yog qhov xav tau tshwj xeeb los tswj cov channel, txwv tsis pub, thaum lub qhov av tsis ua haujlwm, NAT cov ntxhuav ntawm cov routers yuav raug tshem tawm thiab tom qab ntawd qhov kev sib txuas yuav tawg.

Yog tias ping ploj lawm, tom qab ntawd IPIP qhov raug tshem tawm thiab tos kev npaj los ntawm tus tswv tsev nyob deb.

Tsab ntawv nws tus kheej:

#!/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

Hloov pauv username, lo lus zais ΠΈ nplaub tshev yuav tsum yog tib yam ntawm ob sab, tab sis intip - txawv, piv txwv li: 10.0.0.1 thiab 10.0.0.2. Lub sijhawm ntawm cov nodes yuav tsum tau synchronized. Koj tuaj yeem khiav cov ntawv zoo li no:

nohup script.sh &

Kuv xav kos koj cov xim rau qhov tseeb tias IPIP qhov tsis muaj kev nyab xeeb los ntawm qhov pom ntawm qhov tseeb tias kev khiav tsheb tsis yog encrypted, tab sis qhov no tuaj yeem daws tau yooj yim siv IPsec dhau. qhov no tsab xov xwm, nws zoo li yooj yim thiab nkag siab rau kuv.

Kuv tau siv tsab ntawv no los txuas rau lub PC ua haujlwm tau ntau lub lis piam tam sim no thiab tsis tau pom muaj teeb meem. Yooj yim rau kev teeb tsa thiab tsis nco qab nws.

Tej zaum koj yuav muaj cov lus qhia thiab cov lus qhia, Kuv yuav zoo siab los mloog.

Ua tsaug rau koj txoj kev paub!

Tau qhov twg los: www.hab.com

Ntxiv ib saib