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