. /usr/share/libubox/jshn.sh . /usr/share/wginstaller/wg.sh wg_timeout () { local int=$1 handshake=$(wg show $int latest-handshakes | awk '{print $2}') timeout=$(uci get wgserver.@server[0].timeout_handshake) if [ $handshake -ge $timeout ]; then echo "1" else echo "0" fi } wg_check_interface () { local int=$1 if [ $(wg_timeout $int) -eq "1" ]; then ip link del dev $int fi } wg_check_interfaces () { wg_interfaces=$(wg show interfaces) for interface in $wg_interfaces; do wg_check_interface $interface done } wg_get_usage () { num_interfaces=$(wg show interfaces | wc -w) json_init json_add_int "num_interfaces" $num_interfaces echo $(json_dump) } wg_register () { local uplink_bw=$1 local mtu=$2 local public_key=$3 base_prefix=$(uci get wgserver.@server[0].base_prefix) port_start=$(uci get wgserver.@server[0].port_start) port_end=$(uci get wgserver.@server[0].port_end) port=$(next_port $port_start $port_end) ifname="wg_$port" offset=$(($port - $port_start)) gw_ip=$(owipcalc $base_prefix add $offset next 128) # gateway ip gw_ip_assign="${gw_ip}/128" gw_key=$(uci get wgserver.@server[0].wg_key) gw_pub=$(uci get wgserver.@server[0].wg_pub) wg_server_pubkey=$(cat $gw_pub) # create wg tunnel ip link add dev $ifname type wireguard wg set $ifname listen-port $port private-key $gw_key peer $public_key allowed-ips ::0/0 ip -6 a a $gw_ip_assign dev $ifname ip -6 a a fe80::1/64 dev $ifname ip link set up dev $ifname ip link set mtu $mtu dev $ifname # craft return address json_init json_add_string "pubkey" $wg_server_pubkey json_add_string "gw_ip" $gw_ip_assign json_add_int "port" $port echo $(json_dump) }