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.

46 lines
1.2 KiB

  1. . /usr/share/libubox/jshn.sh
  2. . /usr/share/wginstaller/wg.sh
  3. wg_get_usage () {
  4. num_interfaces = $(wg show interfaces | wc -w)
  5. json_init
  6. json_add_int "num_interfaces" $num_interfaces
  7. echo $(json_dump)
  8. }
  9. wg_register () {
  10. local uplink_bw=$1
  11. local mtu=$2
  12. local public_key=$3
  13. base_prefix=$(uci get wgserver.@server[0].base_prefix)
  14. port_start=$(uci get wgserver.@server[0].port_start)
  15. port_end=$(uci get wgserver.@server[0].port_end)
  16. port=$(next_port $port_start $port_end)
  17. ifname="wg_$port"
  18. offset=$(($port - $port_start))
  19. gw_ip=$(owipcalc $base_prefix add $offset next 128) # gateway ip
  20. gw_ip_assign="${gw_ip}/128"
  21. gw_key=$(uci get wgserver.@server[0].wg_key)
  22. gw_pub=$(uci get wgserver.@server[0].wg_pub)
  23. wg_server_pubkey=$(cat $gw_pub)
  24. # create wg tunnel
  25. ip link add dev $ifname type wireguard
  26. wg set $ifname listen-port $port private-key $gw_key peer $public_key allowed-ips ::0/0
  27. ip -6 a a $gw_ip_assign dev $ifname
  28. ip -6 a a fe80::1/64 dev $ifname
  29. ip link set up dev $ifname
  30. ip link set mtu $mtu dev $ifname
  31. # craft return address
  32. json_init
  33. json_add_string "pubkey" $wg_server_pubkey
  34. json_add_string "gw_ip" $gw_ip_assign
  35. json_add_int "port" $port
  36. echo $(json_dump)
  37. }