|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
declare -a wgint
|
|
|
|
for fint in $(docker inspect --format '{{.HostConfig.NetworkMode}}' $(docker ps --format '{{ .Names }}') | grep "^swlab"); do
|
|
|
|
#echo $fint
|
|
|
|
ff=$fint
|
|
|
|
ff="${ff#"${ff%%[![:space:]]*}"}"
|
|
|
|
ff="${ff%"${ff##*[![:space:]]}"}"
|
|
|
|
ff=${ff:5}
|
|
|
|
#echo $ff
|
|
|
|
wgint+=($ff)
|
|
|
|
done
|
|
|
|
for f in /sys/class/net/swlab*; do
|
|
|
|
if [ -L "$f" ]; then
|
|
|
|
f=$(basename $f)
|
|
|
|
f="${f#"${f%%[![:space:]]*}"}"
|
|
|
|
f="${f%"${f##*[![:space:]]}"}"
|
|
|
|
f=${f:5}
|
|
|
|
f=$(basename $f)
|
|
|
|
#echo $f
|
|
|
|
wgint+=($f)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
#echo "---------------"
|
|
|
|
for f in "${wgint[@]}"; do
|
|
|
|
#for fdir in ./hybrid/connect/$f*; do
|
|
|
|
for fdir in /config/$f*; do
|
|
|
|
if [[ -d "$fdir" && ! -L "$fdir" ]]; then
|
|
|
|
fdirfull=$fdir
|
|
|
|
fdirdir=$(basename $fdir)
|
|
|
|
fdir=$(basename $fdir)
|
|
|
|
fdir="${fdir#"${fdir%%[![:space:]]*}"}"
|
|
|
|
fdir="${fdir%"${fdir##*[![:space:]]}"}"
|
|
|
|
fdir=${fdir::10}
|
|
|
|
fdir="${fdir#"${fdir%%[![:space:]]*}"}"
|
|
|
|
#echo "$fdir = $f"
|
|
|
|
if [ "$fdir" = "$f" ]; then
|
|
|
|
#echo "----------------------"
|
|
|
|
wg=''
|
|
|
|
S="="
|
|
|
|
while read -r name value
|
|
|
|
do
|
|
|
|
if [ "$name" = "AllowedIPs" ]; then
|
|
|
|
var=${value//\"/}
|
|
|
|
# remove leading whitespace characters
|
|
|
|
var="${var#"${var%%[![:space:]]*}"}"
|
|
|
|
# remove trailing whitespace characters
|
|
|
|
var="${var%"${var##*[![:space:]]}"}"
|
|
|
|
var=${var:1}
|
|
|
|
AllowedIPs="${var#"${var%%[![:space:]]*}"}"
|
|
|
|
#echo $privateKey
|
|
|
|
fi
|
|
|
|
if [ "$name" = "PublicKey" ]; then
|
|
|
|
var1=${value//\"/}
|
|
|
|
# remove leading whitespace characters
|
|
|
|
var1="${var1#"${var1%%[![:space:]]*}"}"
|
|
|
|
# remove trailing whitespace characters
|
|
|
|
var1="${var1%"${var1##*[![:space:]]}"}"
|
|
|
|
var1=${var1:1}
|
|
|
|
publickey="${var1#"${var1%%[![:space:]]*}"}"
|
|
|
|
#echo $publickey
|
|
|
|
fi
|
|
|
|
done < $fdirfull/wg0.conf
|
|
|
|
if [ ! -z $AllowedIPs ] && [ ! -z $publickey ]; then
|
|
|
|
#echo "$AllowedIPs = $publickey"
|
|
|
|
|
|
|
|
|
|
|
|
nextip(){
|
|
|
|
IP=$1
|
|
|
|
IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' `echo $IP | sed -e 's/\./ /g'`)
|
|
|
|
NEXT_IP_HEX=$(printf %.8X `echo $(( 0x$IP_HEX + 1 ))`)
|
|
|
|
NEXT_IP=$(printf '%d.%d.%d.%d\n' `echo $NEXT_IP_HEX | sed -r 's/(..)/0x\1 /g'`)
|
|
|
|
echo "$NEXT_IP"
|
|
|
|
}
|
|
|
|
|
|
|
|
IP=$(echo $AllowedIPs | cut -d'/' -f1)
|
|
|
|
IP=$(nextip $IP)
|
|
|
|
#echo $IP
|
|
|
|
if ping -q -w 1 $IP > /dev/null; then
|
|
|
|
setconfig=$(jq -c \
|
|
|
|
--arg key0 'ip' --arg ip "${AllowedIPs}" \
|
|
|
|
--arg key1 'publickey' --arg publickey $publickey \
|
|
|
|
--arg key2 'stackid' --arg stackid $fdirdir \
|
|
|
|
--arg key3 'connection' --arg connection 'yes' \
|
|
|
|
'. | .[$key0]=$ip | .[$key1]=$publickey | .[$key2]=$stackid | .[$key3]=$connection' <<<'{}'
|
|
|
|
)
|
|
|
|
else
|
|
|
|
setconfig=$(jq -c \
|
|
|
|
--arg key0 'ip' --arg ip "${AllowedIPs}" \
|
|
|
|
--arg key1 'publickey' --arg publickey $publickey \
|
|
|
|
--arg key2 'stackid' --arg stackid $fdirdir \
|
|
|
|
--arg key3 'connection' --arg connection 'no' \
|
|
|
|
'. | .[$key0]=$ip | .[$key1]=$publickey | .[$key2]=$stackid | .[$key3]=$connection' <<<'{}'
|
|
|
|
)
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$JSON" ]; then
|
|
|
|
JSON=$setconfig
|
|
|
|
else
|
|
|
|
JSON=$JSON,$setconfig
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
echo [$JSON]
|
|
|
|
|
|
|
|
#setconfig1=$(jq -c --arg key0 'interfaces' --arg interfaces "$JSON" \
|
|
|
|
#'. | .[$key0]=$interfaces' <<<'{}'
|
|
|
|
#)
|
|
|
|
#echo $setconfig1
|