You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
2.2 KiB

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