luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
Dirk Brenken c2656a7220 luci-app-openvpn: remove obsolete config options
* remove obsolete config options according to
  openwrt/openwrt@89b8ba9, fix for #2135
* whitespace/intendation fixes
* replace fieldset leftover with div
* fix finally recipe options transfer to regular config with "Add"

Signed-off-by: Dirk Brenken <dev@brenken.org>
2018-09-17 14:22:14 +02:00

766 lines
18 KiB
Lua

-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Licensed to the public under the Apache License 2.0.
require("luci.ip")
require("luci.model.uci")
local knownParams = {
--
--Widget
-- Name
-- Default(s)
-- Description
-- Option(s)
{ "Service", {
-- initialisation and daemon options
{ ListValue,
"verb",
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
translate("Set output verbosity") },
{ Flag,
"mlock",
0,
translate("Disable Paging") },
{ Flag,
"disable_occ",
0,
translate("Disable options consistency check") },
-- { Value,
-- "user",
-- "root",
-- translate("Set UID to user") },
-- { Value,
-- "group",
-- "root",
-- translate("Set GID to group") },
{ Value,
"cd",
"/etc/openvpn",
translate("Change to directory before initialization") },
{ Value,
"chroot",
"/var/run",
translate("Chroot to directory after initialization") },
-- { Value,
-- "daemon",
-- "Instance-Name",
-- translate("Daemonize after initialization") },
-- { Value,
-- "syslog",
-- "Instance-Name",
-- translate("Output to syslog and do not daemonize") },
{ Flag,
"passtos",
0,
translate("TOS passthrough (applies to IPv4 only)") },
-- { Value,
-- "inetd",
-- "nowait Instance-Name",
-- translate("Run as an inetd or xinetd server") },
{ Value,
"log",
"/var/log/openvpn.log",
translate("Write log to file") },
{ Value,
"log_append",
"/var/log/openvpn.log",
translate("Append log to file") },
{ Flag,
"suppress_timestamps",
0,
translate("Don't log timestamps") },
-- { Value,
-- "writepid",
-- "/var/run/openvpn.pid",
-- translate("Write process ID to file") },
{ Value,
"nice",
0,
translate("Change process priority") },
{ Flag,
"fast_io",
0,
translate("Optimize TUN/TAP/UDP writes") },
{ Value,
"echo",
"some params echoed to log",
translate("Echo parameters to log") },
{ ListValue,
"remap_usr1",
{ "SIGHUP", "SIGTERM" },
translate("Remap SIGUSR1 signals") },
{ Value,
"status",
"/var/run/openvpn.status 5",
translate("Write status to file every n seconds") },
{ Value,
"status_version",
{ 1, 2 },
translate("Status file format version") }, -- status
{ Value,
"mute",
5,
translate("Limit repeated log messages") },
{ Value,
"up",
"/usr/bin/ovpn-up",
translate("Shell cmd to execute after tun device open") },
{ Value,
"up_delay",
5,
translate("Delay tun/tap open and up script execution") },
{ Value,
"down",
"/usr/bin/ovpn-down",
translate("Shell cmd to run after tun device close") },
{ Flag,
"down_pre",
0,
translate("Call down cmd/script before TUN/TAP close") },
{ Flag,
"up_restart",
0,
translate("Run up/down scripts for all restarts") },
{ Value,
"route_up",
"/usr/bin/ovpn-routeup",
translate("Execute shell cmd after routes are added") },
{ Value,
"ipchange",
"/usr/bin/ovpn-ipchange",
translate("Execute shell command on remote ip change"),
{ mode="p2p" } },
{ DynamicList,
"setenv",
{ "VAR1 value1", "VAR2 value2" },
translate("Pass environment variables to script") },
{ Value,
"tls_verify",
"/usr/bin/ovpn-tlsverify",
translate("Shell command to verify X509 name") },
{ Value,
"client_connect",
"/usr/bin/ovpn-clientconnect",
translate("Run script cmd on client connection") },
{ Flag,
"client_disconnect",
0,
translate("Run script cmd on client disconnection") },
{ Value,
"learn_address",
"/usr/bin/ovpn-learnaddress",
translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") },
{ Value,
"auth_user_pass_verify",
"/usr/bin/ovpn-userpass via-env",
translate("Executed in server mode on new client connections, when the client is still untrusted") },
{ ListValue,
"script_security",
{ 0, 1, 2, 3 },
translate("Policy level over usage of external programs and scripts") },
} },
{ "Networking", {
-- socket config
{ ListValue,
"mode",
{ "p2p", "server" },
translate("Major mode") },
{ Value,
"local",
"0.0.0.0",
translate("Local host name or ip address") },
{ Value,
"port",
1194,
translate("TCP/UDP port # for both local and remote") },
{ Value,
"lport",
1194,
translate("TCP/UDP port # for local (default=1194)") },
{ Value,
"rport",
1194,
translate("TCP/UDP port # for remote (default=1194)") },
{ Flag,
"float",
0,
translate("Allow remote to change its IP or port") },
{ Flag,
"nobind",
0,
translate("Do not bind to local address and port") },
{ Value,
"dev",
"tun0",
translate("tun/tap device") },
{ ListValue,
"dev_type",
{ "tun", "tap" },
translate("Type of used device") },
{ Value,
"dev_node",
"/dev/net/tun",
translate("Use tun/tap device node") },
{ Value,
"ifconfig",
"10.200.200.3 10.200.200.1",
translate("Set tun/tap adapter parameters") },
{ Flag,
"ifconfig_noexec",
0,
translate("Don't actually execute ifconfig") },
{ Flag,
"ifconfig_nowarn",
0,
translate("Don't warn on ifconfig inconsistencies") },
{ DynamicList,
"route",
"10.123.0.0 255.255.0.0",
translate("Add route after establishing connection") },
{ Value,
"route_gateway",
"10.234.1.1",
translate("Specify a default gateway for routes") },
{ Value,
"route_delay",
0,
translate("Delay n seconds after connection") },
{ Flag,
"route_noexec",
0,
translate("Don't add routes automatically") },
{ Flag,
"route_nopull",
0,
translate("Don't pull routes automatically") },
{ ListValue,
"mtu_disc",
{ "yes", "maybe", "no" },
translate("Enable Path MTU discovery") },
{ Flag,
"mtu_test",
0,
translate("Empirically measure MTU") },
{ Value,
"link_mtu",
1500,
translate("Set TCP/UDP MTU") },
{ Value,
"tun_mtu",
1500,
translate("Set tun/tap device MTU") },
{ Value,
"tun_mtu_extra",
1500,
translate("Set tun/tap device overhead") },
{ Value,
"fragment",
1500,
translate("Enable internal datagram fragmentation"),
{ proto="udp" } },
{ Value,
"mssfix",
1500,
translate("Set upper bound on TCP MSS"),
{ proto="udp" } },
{ Value,
"sndbuf",
65536,
translate("Set the TCP/UDP send buffer size") },
{ Value,
"rcvbuf",
65536,
translate("Set the TCP/UDP receive buffer size") },
{ Value,
"txqueuelen",
100,
translate("Set tun/tap TX queue length") },
{ Value,
"shaper",
10240,
translate("Shaping for peer bandwidth") },
{ Value,
"inactive",
240,
translate("tun/tap inactivity timeout") },
{ Value,
"keepalive",
"10 60",
translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") },
{ Value,
"ping",
30,
translate("Ping remote every n seconds over TCP/UDP port") },
{ Value,
"ping_exit",
120,
translate("Remote ping timeout") },
{ Value,
"ping_restart",
60,
translate("Restart after remote ping timeout") },
{ Flag,
"ping_timer_rem",
0,
translate("Only process ping timeouts if routes exist") },
{ Flag,
"persist_tun",
0,
translate("Keep tun/tap device open on restart") },
{ Flag,
"persist_key",
0,
translate("Don't re-read key on restart") },
{ Flag,
"persist_local_ip",
0,
translate("Keep local IP address on restart") },
{ Flag,
"persist_remote_ip",
0,
translate("Keep remote IP address on restart") },
-- management channel
{ Value,
"management",
"127.0.0.1 31194 /etc/openvpn/mngmt-pwds",
translate("Enable management interface on <em>IP</em> <em>port</em>") },
-- management
{ Flag,
"management_query_passwords",
0,
translate("Query management channel for private key") },
-- management
{ Flag,
"management_hold",
0,
translate("Start OpenVPN in a hibernating state") },
-- management
{ Value,
"management_log_cache",
100,
translate("Number of lines for log file history") },
{ ListValue,
"topology",
{ "net30", "p2p", "subnet" },
translate("'net30', 'p2p', or 'subnet'"),
{dev_type="tun" } },
} },
{ "VPN", {
{ Value,
"server",
"10.200.200.0 255.255.255.0",
translate("Configure server mode"),
{ client="0" }, { client="" } },
{ Value,
"server_bridge",
"10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250",
translate("Configure server bridge"),
{ client="0" }, { client="" } },
{ DynamicList,
"push",
{ "redirect-gateway" },
translate("Push options to peer"),
{ client="0" }, { client="" } },
{ Flag,
"push_reset",
0,
translate("Don't inherit global push options"),
{ client="0" }, { client="" } },
{ Flag,
"disable",
0,
translate("Client is disabled"),
{ client="0" }, { client="" } },
{ Value,
"ifconfig_pool",
"10.200.200.100 10.200.200.150 255.255.255.0",
translate("Set aside a pool of subnets"),
{ client="0" }, { client="" } },
{ Value,
"ifconfig_pool_persist",
"/etc/openvpn/ipp.txt 600",
translate("Persist/unpersist ifconfig-pool"),
{ client="0" }, { client="" } },
{ Value,
"ifconfig_push",
"10.200.200.1 255.255.255.255",
translate("Push an ifconfig option to remote"),
{ client="0" }, { client="" } },
{ Value,
"iroute",
"10.200.200.0 255.255.255.0",
translate("Route subnet to client"),
{ client="0" }, { client="" } },
{ Flag,
"client_to_client",
0,
translate("Allow client-to-client traffic"),
{ client="0" }, { client="" } },
{ Flag,
"duplicate_cn",
0,
translate("Allow multiple clients with same certificate"),
{ client="0" }, { client="" } },
{ Value,
"client_config_dir",
"/etc/openvpn/ccd",
translate("Directory for custom client config files"),
{ client="0" }, { client="" } },
{ Flag,
"ccd_exclusive",
0,
translate("Refuse connection if no custom client config"),
{ client="0" }, { client="" } },
{ Value,
"tmp_dir",
"/var/run/openvpn",
translate("Temporary directory for client-connect return file"),
{ client="0" }, { client="" } },
{ Value,
"hash_size",
"256 256",
translate("Set size of real and virtual address hash tables"),
{ client="0" }, { client="" } },
{ Value,
"bcast_buffers",
256,
translate("Number of allocated broadcast buffers"),
{ client="0" }, { client="" } },
{ Value,
"tcp_queue_limit",
64,
translate("Maximum number of queued TCP output packets"),
{ client="0" }, { client="" } },
{ Value,
"max_clients",
10,
translate("Allowed maximum of connected clients"),
{ client="0" }, { client="" } },
{ Value,
"max_routes_per_client",
256,
translate("Allowed maximum of internal"),
{ client="0" }, { client="" } },
{ Value,
"connect_freq",
"3 10",
translate("Allowed maximum of new connections"),
{ client="0" }, { client="" } },
{ Flag,
"username_as_common_name",
0,
translate("Use username as common name"),
{ client="0" }, { client="" } },
{ Flag,
"client",
0,
translate("Configure client mode") },
{ Flag,
"pull",
0,
translate("Accept options pushed from server"),
{ client="1" } },
{ Value,
"auth_user_pass",
"/etc/openvpn/userpass.txt",
translate("Authenticate using username/password"),
{ client="1" } },
{ ListValue,
"auth_retry",
{ "none", "nointeract", "interact" },
translate("Handling of authentication failures"),
{ client="1" } },
{ Value,
"explicit_exit_notify",
1,
translate("Send notification to peer on disconnect"),
{ client="1" } },
{ DynamicList,
"remote",
"1.2.3.4",
translate("Remote host name or ip address"),
{ client="1" } },
{ Flag,
"remote_random",
0,
translate("Randomly choose remote server"),
{ client="1" } },
{ ListValue,
"proto",
{ "udp", "tcp-client", "tcp-server" },
translate("Use protocol"),
{ client="1" } },
{ Value,
"connect_retry",
5,
translate("Connection retry interval"),
{ proto="tcp-client" }, { client="1" } },
{ Value,
"http_proxy",
"192.168.1.100 8080",
translate("Connect to remote host through an HTTP proxy"),
{ client="1" } },
{ Flag,
"http_proxy_retry",
0,
translate("Retry indefinitely on HTTP proxy errors"),
{ client="1" } },
{ Value,
"http_proxy_timeout",
5,
translate("Proxy timeout in seconds"),
{ client="1" } },
{ DynamicList,
"http_proxy_option",
{ "VERSION 1.0", "AGENT OpenVPN/2.0.9" },
translate("Set extended HTTP proxy options"),
{ client="1" } },
{ Value,
"socks_proxy",
"192.168.1.200 1080",
translate("Connect through Socks5 proxy"),
{ client="1" } },
-- client && socks_proxy
{ Value,
"socks_proxy_retry",
5,
translate("Retry indefinitely on Socks proxy errors"),
{ client="1" } },
{ Value,
"resolv_retry",
"infinite",
translate("If hostname resolve fails, retry"),
{ client="1" } },
{ ListValue,
"redirect_gateway",
{ "", "local", "def1", "local def1" },
translate("Automatically redirect default route"),
{ client="1" } },
} },
{ "Cryptography", {
{ FileUpload,
"secret",
"/etc/openvpn/secret.key",
translate("Enable Static Key encryption mode (non-TLS)") },
-- parse
{ Value,
"auth",
"SHA1",
translate("HMAC authentication for packets") },
-- parse
{ Value,
"cipher",
"BF-CBC",
translate("Encryption cipher for packets") },
-- parse
{ Value,
"keysize",
1024,
translate("Size of cipher key") },
-- parse
{ Value,
"engine",
"dynamic",
translate("Enable OpenSSL hardware crypto engines") },
{ Value,
"replay_window",
"64 15",
translate("Replay protection sliding window size") },
{ Flag,
"mute_replay_warnings",
0,
translate("Silence the output of replay warnings") },
{ Value,
"replay_persist",
"/var/run/openvpn-replay-state",
translate("Persist replay-protection state") },
{ Flag,
"tls_server",
0,
translate("Enable TLS and assume server role"),
{ tls_client="" }, { tls_client="0" } },
{ Flag,
"tls_client",
0,
translate("Enable TLS and assume client role"),
{ tls_server="" }, { tls_server="0" } },
{ FileUpload,
"ca",
"/etc/easy-rsa/keys/ca.crt",
translate("Certificate authority") },
{ FileUpload,
"dh",
"/etc/easy-rsa/keys/dh1024.pem",
translate("Diffie Hellman parameters") },
{ FileUpload,
"cert",
"/etc/easy-rsa/keys/some-client.crt",
translate("Local certificate") },
{ FileUpload,
"key",
"/etc/easy-rsa/keys/some-client.key",
translate("Local private key") },
{ FileUpload,
"pkcs12",
"/etc/easy-rsa/keys/some-client.pk12",
translate("PKCS#12 file containing keys") },
{ ListValue,
"key_method",
{ 1, 2 },
translate("Enable TLS and assume client role") },
{ Value,
"tls_cipher",
"DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5",
translate("TLS cipher") },
{ Value,
"tls_timeout",
2,
translate("Retransmit timeout on TLS control channel") },
{ Value,
"reneg_bytes",
1024,
translate("Renegotiate data chan. key after bytes") },
{ Value,
"reneg_pkts",
100,
translate("Renegotiate data chan. key after packets") },
{ Value,
"reneg_sec",
3600,
translate("Renegotiate data chan. key after seconds") },
{ Value,
"hand_window",
60,
translate("Timeframe for key exchange") },
{ Value,
"tran_window",
3600,
translate("Key transition window") },
{ Flag,
"single_session",
0,
translate("Allow only one session") },
{ Flag,
"tls_exit",
0,
translate("Exit on TLS negotiation failure") },
{ Value,
"tls_auth",
"/etc/openvpn/tlsauth.key",
translate("Additional authentication over TLS") },
{ Value,
"tls_crypt",
"/etc/openvpn/tlscrypt.key",
translate("Encrypt and authenticate all control channel packets with the key") },
-- { Value,
-- "askpass",
-- "[file]",
-- translate("Get PEM password from controlling tty before we daemonize") },
{ Flag,
"auth_nocache",
0,
translate("Don't cache --askpass or --auth-user-pass passwords") },
{ Value,
"tls_remote",
"remote_x509_name",
translate("Only accept connections from given X509 name") },
{ ListValue,
"ns_cert_type",
{ "client", "server" },
translate("Require explicit designation on certificate") },
{ ListValue,
"remote_cert_tls",
{ "client", "server" },
translate("Require explicit key usage on certificate") },
{ Value,
"crl_verify",
"/etc/easy-rsa/keys/crl.pem",
translate("Check peer certificate against a CRL") },
{ Value,
"tls_version_min",
"1.0",
translate("The lowest supported TLS version") },
{ Value,
"tls_version_max",
"1.2",
translate("The highest supported TLS version") },
{ Value,
"key_direction",
"1",
translate("The key direction for 'tls-auth' and 'secret' options") },
} }
}
local cts = { }
local params = { }
local m = Map("openvpn")
local p = m:section( SimpleSection )
p.template = "openvpn/pageswitch"
p.mode = "advanced"
p.instance = arg[1]
p.category = arg[2] or "Service"
for _, c in ipairs(knownParams) do
cts[#cts+1] = c[1]
if c[1] == p.category then params = c[2] end
end
p.categories = cts
local s = m:section(
NamedSection, arg[1], "openvpn",
translate("%s" % arg[2])
)
s.title = translate("%s" % arg[2])
s.addremove = false
s.anonymous = true
for _, option in ipairs(params) do
local o = s:option(
option[1], option[2],
option[2], option[4]
)
if option[1] == DummyValue then
o.value = option[3]
else
if option[1] == DynamicList then
function o.cfgvalue(...)
local val = AbstractValue.cfgvalue(...)
return ( val and type(val) ~= "table" ) and { val } or val
end
end
o.optional = true
if type(option[3]) == "table" then
if o.optional then o:value("", "-- remove --") end
for _, v in ipairs(option[3]) do
v = tostring(v)
o:value(v)
end
o.default = tostring(option[3][1])
else
o.default = tostring(option[3])
end
end
for i=5,#option do
if type(option[i]) == "table" then
o:depends(option[i])
end
end
end
return m