web/wgcf/entry.sh
2024-09-20 18:39:12 +05:00

120 lines
3 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
_downwgcf() {
echo
echo "clean up"
if ! wg-quick down wgcf; then
echo "error down"
fi
echo "clean up done"
exit 0
}
#-4|-6
runwgcf() {
trap '_downwgcf' ERR TERM INT
_enableV4="1"
if [ "$1" = "-6" ]; then
_enableV4=""
fi
if [ ! -e "wgcf-account.toml" ]; then
wgcf register --accept-tos
fi
if [ -e "custom-wgcf-license.conf" ]; then
_license_key=$(cat custom-wgcf-license.conf)
_old_license_key=$(awk -F "['']" '/license_key/{print $2}' wgcf-account.toml)
if [ "$_license_key" != "$_old_license_key" ]; then
echo 'updating license key'
sed -i "s/license_key.*$/license_key = '${_license_key}'/" wgcf-account.toml
wgcf update
fi
fi
if [ ! -e "wgcf-profile.conf" ]; then
wgcf generate
else
_account_file_private_key=$(awk -F "['']" '/private_key/{print $2}' wgcf-account.toml)
_profile_file_private_key=$(awk -F " = " '/PrivateKey/{print $2}' wgcf-profile.conf)
if [ "$_account_file_private_key" != "$_profile_file_private_key" ]; then
echo 're generate profile'
wgcf generate
fi
fi
if [ -e "custom-wgcf-endpoint.conf" ]; then
_endpoint=$(cat custom-wgcf-endpoint.conf)
sed -i "s/Endpoint.*$/Endpoint = ${_endpoint}/" wgcf-profile.conf
fi
cp wgcf-profile.conf /etc/wireguard/wgcf.conf
DEFAULT_GATEWAY_NETWORK_CARD_NAME=$(route | grep default | awk '{print $8}' | head -1)
DEFAULT_ROUTE_IP=$(ifconfig $DEFAULT_GATEWAY_NETWORK_CARD_NAME | grep "inet " | awk '{print $2}' | sed "s/addr://")
echo ${DEFAULT_GATEWAY_NETWORK_CARD_NAME}
echo ${DEFAULT_ROUTE_IP}
sed -i "/\[Interface\]/a PostDown = ip rule delete from $DEFAULT_ROUTE_IP lookup main" /etc/wireguard/wgcf.conf
sed -i "/\[Interface\]/a PostUp = ip rule add from $DEFAULT_ROUTE_IP lookup main" /etc/wireguard/wgcf.conf
if [ "$1" = "-6" ]; then
sed -i 's/AllowedIPs = 0.0.0.0/#AllowedIPs = 0.0.0.0/' /etc/wireguard/wgcf.conf
elif [ "$1" = "-4" ]; then
sed -i 's/AllowedIPs = ::/#AllowedIPs = ::/' /etc/wireguard/wgcf.conf
fi
modprobe ip6table_raw
wg-quick up wgcf
if [ "$_enableV4" ]; then
_checkV4
else
_checkV6
fi
echo
echo
echo "wgcf status"
wgcf status
echo
echo "OK, wgcf is up."
sleep infinity &
wait
}
_checkV4() {
echo "Checking network status, please wait...."
while ! curl --max-time 2 ipinfo.io; do
wg-quick down wgcf
echo "Sleep 2 and retry again."
sleep 2
wg-quick up wgcf
done
}
_checkV6() {
echo "Checking network status, please wait...."
while ! curl --max-time 2 -6 ipv6.google.com; do
wg-quick down wgcf
echo "Sleep 2 and retry again."
sleep 2
wg-quick up wgcf
done
}
if [ -z "$@" ] || [[ "$1" = -* ]]; then
runwgcf "$@"
else
exec "$@"
fi