Merge pull request #852 from danrl/luci-proto-wireguard
luci-proto-wireguard: WireGuard VPN Protocol (New)
This commit is contained in:
commit
36e695d108
3 changed files with 205 additions and 0 deletions
16
protocols/luci-proto-wireguard/Makefile
Normal file
16
protocols/luci-proto-wireguard/Makefile
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2016 Dan Luedtke <mail@danrl.com>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
LUCI_TITLE:=Support for WireGuard VPN
|
||||||
|
LUCI_DEPENDS:=+wireguard
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com>
|
||||||
|
|
||||||
|
include ../../luci.mk
|
||||||
|
|
||||||
|
# call BuildPackage - OpenWrt buildroot signature
|
|
@ -0,0 +1,147 @@
|
||||||
|
-- Copyright 2016 Dan Luedtke <mail@danrl.com>
|
||||||
|
-- Licensed to the public under the Apache License 2.0.
|
||||||
|
|
||||||
|
|
||||||
|
local map, section, net = ...
|
||||||
|
local ifname = net:get_interface():name()
|
||||||
|
local private_key, listen_port
|
||||||
|
local metric, mtu, preshared_key
|
||||||
|
local peers, public_key, allowed_ips, endpoint, persistent_keepalive
|
||||||
|
|
||||||
|
|
||||||
|
-- general ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
private_key = section:taboption(
|
||||||
|
"general",
|
||||||
|
Value,
|
||||||
|
"private_key",
|
||||||
|
translate("Private Key"),
|
||||||
|
translate("Required. Base64-encoded private key for this interface.")
|
||||||
|
)
|
||||||
|
private_key.password = true
|
||||||
|
private_key.datatype = "rangelength(44, 44)"
|
||||||
|
private_key.optional = false
|
||||||
|
|
||||||
|
|
||||||
|
listen_port = section:taboption(
|
||||||
|
"general",
|
||||||
|
Value,
|
||||||
|
"listen_port",
|
||||||
|
translate("Listen Port"),
|
||||||
|
translate("Optional. UDP port used for outgoing and incoming packets.")
|
||||||
|
)
|
||||||
|
listen_port.datatype = "port"
|
||||||
|
listen_port.placeholder = "51820"
|
||||||
|
listen_port.optional = true
|
||||||
|
|
||||||
|
|
||||||
|
-- advanced --------------------------------------------------------------------
|
||||||
|
|
||||||
|
metric = section:taboption(
|
||||||
|
"advanced",
|
||||||
|
Value,
|
||||||
|
"metric",
|
||||||
|
translate("Metric"),
|
||||||
|
translate("Optional.")
|
||||||
|
)
|
||||||
|
metric.datatype = "uinteger"
|
||||||
|
metric.placeholder = "0"
|
||||||
|
metric.optional = true
|
||||||
|
|
||||||
|
|
||||||
|
mtu = section:taboption(
|
||||||
|
"advanced",
|
||||||
|
Value,
|
||||||
|
"mtu",
|
||||||
|
translate("MTU"),
|
||||||
|
translate("Optional. Maximum Transmission Unit of tunnel interface.")
|
||||||
|
)
|
||||||
|
mtu.datatype = "range(1280,1423)"
|
||||||
|
mtu.placeholder = "1423"
|
||||||
|
mtu.optional = true
|
||||||
|
|
||||||
|
|
||||||
|
preshared_key = section:taboption(
|
||||||
|
"advanced",
|
||||||
|
Value,
|
||||||
|
"preshared_key",
|
||||||
|
translate("Preshared Key"),
|
||||||
|
translate("Optional. Adds in an additional layer of symmetric-key " ..
|
||||||
|
"cryptography for post-quantum resistance.")
|
||||||
|
)
|
||||||
|
preshared_key.password = true
|
||||||
|
preshared_key.datatype = "rangelength(44, 44)"
|
||||||
|
preshared_key.optional = true
|
||||||
|
|
||||||
|
|
||||||
|
-- peers -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
peers = map:section(
|
||||||
|
TypedSection,
|
||||||
|
"wireguard_" .. ifname,
|
||||||
|
translate("Peers"),
|
||||||
|
translate("Further information about WireGuard interfaces and peers " ..
|
||||||
|
"at <a href=\"http://wireguard.io\">wireguard.io</a>.")
|
||||||
|
)
|
||||||
|
peers.template = "cbi/tsection"
|
||||||
|
peers.anonymous = true
|
||||||
|
peers.addremove = true
|
||||||
|
|
||||||
|
|
||||||
|
public_key = peers:option(
|
||||||
|
Value,
|
||||||
|
"public_key",
|
||||||
|
translate("Public Key"),
|
||||||
|
translate("Required. Public key of peer.")
|
||||||
|
)
|
||||||
|
public_key.datatype = "rangelength(44, 44)"
|
||||||
|
public_key.optional = false
|
||||||
|
|
||||||
|
|
||||||
|
allowed_ips = peers:option(
|
||||||
|
DynamicList,
|
||||||
|
"allowed_ips",
|
||||||
|
translate("Allowed IPs"),
|
||||||
|
translate("Required. IP addresses and prefixes that this peer is allowed " ..
|
||||||
|
"to use inside the tunnel. Routes will be added accordingly.")
|
||||||
|
)
|
||||||
|
allowed_ips.datatype = "ipaddr"
|
||||||
|
allowed_ips.optional = false
|
||||||
|
|
||||||
|
|
||||||
|
route_allowed_ips = peers:option(
|
||||||
|
Flag,
|
||||||
|
"route_allowed_ips",
|
||||||
|
translate("Route Allowed IPs"),
|
||||||
|
translate("Optional. Create routes for Allowed IPs for this peer.")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
endpoint_host = peers:option(
|
||||||
|
Value,
|
||||||
|
"endpoint_host",
|
||||||
|
translate("Endpoint Host"),
|
||||||
|
translate("Optional. Host of peer. Names are resolved " ..
|
||||||
|
"prior to bringing up the interface."))
|
||||||
|
endpoint_host.placeholder = "vpn.example.com"
|
||||||
|
endpoint_host.datatype = "host"
|
||||||
|
|
||||||
|
|
||||||
|
endpoint_port = peers:option(
|
||||||
|
Value,
|
||||||
|
"endpoint_port",
|
||||||
|
translate("Endpoint Port"),
|
||||||
|
translate("Optional. Port of peer."))
|
||||||
|
endpoint_port.placeholder = "51820"
|
||||||
|
endpoint_port.datatype = "port"
|
||||||
|
|
||||||
|
|
||||||
|
persistent_keepalive = peers:option(
|
||||||
|
Value,
|
||||||
|
"persistent_keepalive",
|
||||||
|
translate("Persistent Keep Alive"),
|
||||||
|
translate("Optional. Seconds between keep alive messages. " ..
|
||||||
|
"Default is 0 (disabled). Recommended value if " ..
|
||||||
|
"this device is behind a NAT is 25."))
|
||||||
|
persistent_keepalive.datatype = "range(0, 65535)"
|
||||||
|
persistent_keepalive.placeholder = "0"
|
|
@ -0,0 +1,42 @@
|
||||||
|
-- Copyright 2016 Dan Luedtke <mail@danrl.com>
|
||||||
|
-- Licensed to the public under the Apache License 2.0.
|
||||||
|
|
||||||
|
local netmod = luci.model.network
|
||||||
|
local interface = luci.model.network.interface
|
||||||
|
local proto = netmod:register_protocol("wireguard")
|
||||||
|
|
||||||
|
function proto.get_i18n(self)
|
||||||
|
return luci.i18n.translate("WireGuard VPN")
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.ifname(self)
|
||||||
|
return self.sid
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.get_interface(self)
|
||||||
|
return interface(self:ifname(), self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.opkg_package(self)
|
||||||
|
return "wireguard-tools"
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.is_installed(self)
|
||||||
|
return nixio.fs.access("/lib/netifd/proto/wireguard.sh")
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.is_floating(self)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.is_virtual(self)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.get_interfaces(self)
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function proto.contains_interface(self, ifc)
|
||||||
|
return (netmod:ifnameof(ifc) == self:ifname())
|
||||||
|
end
|
Loading…
Reference in a new issue