#!/bin/sh
|
|
|
|
. /usr/share/wginstaller/rpcd_ubus.sh
|
|
. /usr/share/wginstaller/wg.sh
|
|
|
|
DEFAULT_NAMESPACE=0
|
|
|
|
CMD=$1
|
|
shift
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-h | --help)
|
|
echo "help"
|
|
shift 1
|
|
;;
|
|
--endpoint)
|
|
ENDPOINT=$2
|
|
shift 2
|
|
;;
|
|
--user)
|
|
USER=$2
|
|
shift 2
|
|
;;
|
|
--password)
|
|
PASSWORD=$2
|
|
shift 2
|
|
;;
|
|
--mtu)
|
|
WG_MTU=$2
|
|
shift 2
|
|
;;
|
|
--wg-key-file)
|
|
WG_KEY_FILE=$2
|
|
shift 2
|
|
;;
|
|
--lookup-default-namespace)
|
|
DEFAULT_NAMESPACE=1
|
|
shift 1
|
|
;;
|
|
'')
|
|
break
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
register_client_interface () {
|
|
local endpoint=$2
|
|
local mtu_client=$3
|
|
local privkey=$4
|
|
local pubkey=$5
|
|
local gw_port=$6
|
|
local def_namespace=$7
|
|
|
|
port_start=$(uci get wgclient.@client[0].port_start)
|
|
port_end=$(uci get wgclient.@client[0].port_end)
|
|
|
|
if [ "$def_namespace" -eq "1" ]; then
|
|
[ -f /var/run/netns/default ] || ln -s /proc/1/ns/net /var/run/netns/default
|
|
port=$(ip netns exec default /usr/share/wginstaller/wg.sh next_port "$port_start" "$port_end")
|
|
else
|
|
port=$(next_port "$port_start" "$port_end")
|
|
fi
|
|
|
|
ifname="wg_$port"
|
|
|
|
ip link add dev "$ifname" type wireguard
|
|
ip -6 addr add dev "$ifname" fe80::2/64
|
|
wg set "$ifname" listen-port "$port" private-key "$privkey" peer "$pubkey" allowed-ips 0.0.0.0/0,::0/0 endpoint "${endpoint}:${gw_port}"
|
|
ip link set up dev "$ifname"
|
|
ip link set mtu "$mtu_client" dev "$ifname"
|
|
|
|
export "$1=$ifname"
|
|
}
|
|
|
|
# rpc login
|
|
token="$(request_token "$ENDPOINT" "$USER" "$PASSWORD")"
|
|
if [ $? -ne 0 ]; then
|
|
logger -t "wg-client-installer" "Failed to register token!"
|
|
exit 1
|
|
fi
|
|
|
|
# now call procedure
|
|
case $CMD in
|
|
"get_usage")
|
|
wg_rpcd_get_usage "$token" "$ENDPOINT"
|
|
;;
|
|
"register")
|
|
|
|
if [ -n "$WG_KEY_FILE" ]; then
|
|
wg_priv_key_file="$WG_KEY_FILE"
|
|
wg_pub_key=$(wg pubkey < "$WG_KEY_FILE")
|
|
fi
|
|
|
|
wg_rpcd_register __gw_pubkey __gw_ipv4 __gw_ipv6 __gw_port "$token" "$ENDPOINT" "$WG_MTU" "$wg_pub_key"
|
|
if [ $? -ne 0 ]; then
|
|
logger -t "wg-client-installer" "Failed to Register!"
|
|
exit 1
|
|
fi
|
|
|
|
register_client_interface __interface "$ENDPOINT" "$WG_MTU" "$wg_priv_key_file" "$__gw_pubkey" "$__gw_port" "$DEFAULT_NAMESPACE"
|
|
logger -t "wg-client-installer" "Registered: $__interface"
|
|
echo $__interface
|
|
;;
|
|
*) echo "Usage: wg-client-installer [cmd] --endpoint [2001::1] --mtu 1500 --user wginstaller --password wginstaller" ;;
|
|
esac
|