From b5ed8b8cf64fa7b8a4d96cc4666a692bc18f7987 Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 2 Sep 2023 17:16:30 +0000 Subject: [PATCH] first commit --- Makefile | 16 ++ README.md | 0 luasrc/controller/admin/tgopenvpn.lua | 4 + luasrc/model/cbi/torguard/tgopenvpn.lua | 134 ++++++++++++++ root/etc/config/tgopenvpn_cfg | 9 + root/etc/init.d/tgopenvpn | 171 ++++++++++++++++++ root/etc/openvpn/torguard/ca.crt | 53 ++++++ root/etc/openvpn/torguard/ta.key | 18 ++ root/etc/uci-defaults/tgopenvpn_def | 12 ++ .../lua/luci/controller/admin/tgopenvpn.lua | 4 + .../lua/luci/model/cbi/torguard/tgopenvpn.lua | 134 ++++++++++++++ 11 files changed, 555 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 luasrc/controller/admin/tgopenvpn.lua create mode 100644 luasrc/model/cbi/torguard/tgopenvpn.lua create mode 100644 root/etc/config/tgopenvpn_cfg create mode 100644 root/etc/init.d/tgopenvpn create mode 100644 root/etc/openvpn/torguard/ca.crt create mode 100644 root/etc/openvpn/torguard/ta.key create mode 100644 root/etc/uci-defaults/tgopenvpn_def create mode 100644 root/usr/lib/lua/luci/controller/admin/tgopenvpn.lua create mode 100644 root/usr/lib/lua/luci/model/cbi/torguard/tgopenvpn.lua diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ff14a30 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ + + +include $(TOPDIR)/rules.mk + + +LUCI_TITLE:=LuCI support for TorGuard OpenVPN +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+openvpn-openssl + +define Package/tgopenvpn/conffiles +/etc/config/tgopenvpn_cfg +endef + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/luasrc/controller/admin/tgopenvpn.lua b/luasrc/controller/admin/tgopenvpn.lua new file mode 100644 index 0000000..816dc35 --- /dev/null +++ b/luasrc/controller/admin/tgopenvpn.lua @@ -0,0 +1,4 @@ +module("luci.controller.admin.tgopenvpn", package.seeall) +function index() + entry({"admin", "vpn", "tgopenvpn"}, cbi("torguard/tgopenvpn"), _("TorGuard OpenVPN"), 102) +end \ No newline at end of file diff --git a/luasrc/model/cbi/torguard/tgopenvpn.lua b/luasrc/model/cbi/torguard/tgopenvpn.lua new file mode 100644 index 0000000..f4dd9b1 --- /dev/null +++ b/luasrc/model/cbi/torguard/tgopenvpn.lua @@ -0,0 +1,134 @@ +-- Import the necessary LuCI modules +local uci = require("luci.model.uci").cursor() +local sys = require("luci.sys") +local util = require("luci.util") + +-- Define the model +m = Map("tgopenvpn_cfg", "TorGuard OpenVPN Setup") + +-- Define the section for the OpenVPN settings +s = m:section(TypedSection, "ovpnconfig", "OpenVPN Settings") +s.anonymous = true +s.addremove = false + +-- Define the input fields for the OpenVPN settings +user = s:option(Value, "username", translate("VPN Username")) +pass = s:option(Value, "password", translate("VPN Password")) +pass.password = true + +svr = s:option(ListValue, "server", translate("VPN Server")) +-- Add all servers here +svr:value("ar.torguard.com", "Argentina") +svr:value("au.torguard.com", "Australia Sydney") +svr:value("aus.torguard.com", "Austria") +svr:value("bg.torguard.com", "Belgium") +svr:value("br.torguard.com", "Brazil 1") +svr:value("br2.torguard.com", "Brazil 2") +svr:value("bul.torguard.com", "Bulgaria") +svr:value("ca.torguard.com", "Canada Toronto") +svr:value("cavan.torguard.com", "Canada Vancouver") +svr:value("ch.torguard.com", "Chile") +svr:value("cz.torguard.com", "Czech Republic") +svr:value("dn.torguard.com", "Denmark") +svr:value("fn.torguard.com", "Finland") +svr:value("fr.torguard.com", "France") +svr:value("ger.torguard.com", "Germany") +svr:value("gre.torguard.com", "Greece") +svr:value("hk.torguard.com", "Hong Kong") +svr:value("hg.torguard.com", "Hungary") +svr:value("ice.torguard.com", "Iceland") +svr:value("in.torguard.com", "India Mumbai") +svr:value("ire.torguard.com", "Ireland") +svr:value("isr-loc1.torguard.com", "Israel Tel Aviv") +svr:value("it.torguard.com", "Italy") +svr:value("id.torguard.com", "Indonesia") +svr:value("jp.torguard.com", "Japan") +svr:value("lux.torguard.com", "Luxembourg") +svr:value("mx.torguard.com", "Mexico") +svr:value("md.torguard.com", "Moldova") +svr:value("nl.torguard.com", "Netherlands") +svr:value("nz.torguard.com", "New Zealand") +svr:value("no.torguard.com", "Norway") +svr:value("pl.torguard.com", "Poland") +svr:value("pg.torguard.com", "Portugal") +svr:value("ro.torguard.com", "Romania") +svr:value("ru.torguard.com", "Russia") +svr:value("sg.torguard.com", "Singapore") +svr:value("slk.torguard.com", "Slovakia") +svr:value("sp.torguard.com", "Spain") +svr:value("sk.torguard.com", "South Korea") +svr:value("sa.torguard.com", "South Africa") +svr:value("swe.torguard.com", "Sweden") +svr:value("swiss.torguard.com", "Switzerland") +svr:value("tw.torguard.com", "Taiwan") +svr:value("th.torguard.com", "Thailand") +svr:value("tk.torguard.com", "Turkey") +svr:value("uae.torguard.com", "UAE") +svr:value("uk.torguard.com", "UK London") +svr:value("uk.man.torguard.com", "UK Manchester") +svr:value("ukr.torguard.com", "Ukraine") +svr:value("us-fl.torguard.com", "USA Miami") +svr:value("us-atl.torguard.com", "USA Atlanta") +svr:value("us-ny.torguard.com", "USA New York") +svr:value("us-chi.torguard.com", "USA Chicago") +svr:value("us-chi-loc2.torguard.com", "USA Chicago 2") +svr:value("us-dal.torguard.com", "USA Dallas") +svr:value("us-dal-loc2.torguard.com", "USA Dallas 2") +svr:value("us-la.torguard.com", "USA LA") +svr:value("us-lv.torguard.com", "USA Las Vegas") +svr:value("us-sa.torguard.com", "USA Seattle") +svr:value("us-sf.torguard.com", "USA San Francisco") +svr:value("us-nj.torguard.com", "USA New Jersey") +svr:value("us-nj-loc2.torguard.com", "USA New Jersey 2") +svr:value("us-slc.torguard.com", "USA Salt Lake City") + +dedicated = s:option(ListValue, "dedicated", translate("Use Dedicated IP")) +dedicated:value("YES") +dedicated:value("NO") + +dediserver = s:option(Value, "dediserver", translate("Dedicated IP")) + +protocol = s:option(ListValue, "protocol", translate("VPN Protocol")) +protocol:value("udp") +protocol:value("tcp") + +port = s:option(ListValue, "port", translate("VPN Port")) +-- Add all ports here +port:value("1912|SHA256", "1912|SHA256") +port:value("1195|SHA256", "1195|SHA256") +port:value("53|SHA256", "53|SHA256") +port:value("1198|SHA256", "1198|SHA256") +port:value("9201|SHA256", "9201|SHA256") +port:value("501|SHA256", "501|SHA256") +port:value("1194|SHA1", "1194|SHA1") +port:value("995|SHA1", "995|SHA1") +port:value("1215|SHA512", "1215|SHA512") +port:value("389|SHA512", "389|SHA512") +port:value("80|SHA1", "80|SHA1") +port:value("443|SHA1", "443|SHA1") + +cipher = s:option(ListValue, "cipher", translate("VPN Cipher")) +-- Add all cipher options here +cipher:value("AES-128-CBC") +cipher:value("AES-256-CBC") +cipher:value("AES-128-GCM") +cipher:value("AES-256-GCM") +cipher:value("BF-CBC") + +-- VPN Control: Start/Stop OpenVPN +ctrl = m:section(TypedSection, "ovpnconfig", "VPN Control: Start/Stop OpenVPN") +ctrl.anonymous = true +ctrl.addremove = false + +btnStop = ctrl:option(Button, "_btn_start", translate("Click to Stop OpenVPN")) +function btnStop.write() + io.popen("/etc/init.d/tgopenvpn stop") +end + +btnStart = ctrl:option(Button, "_btn_stop", translate("Click to Start OpenVPN")) +function btnStart.write() + io.popen("/etc/init.d/tgopenvpn start") +end + +-- Return the configuration page +return m diff --git a/root/etc/config/tgopenvpn_cfg b/root/etc/config/tgopenvpn_cfg new file mode 100644 index 0000000..ab1280f --- /dev/null +++ b/root/etc/config/tgopenvpn_cfg @@ -0,0 +1,9 @@ +config ovpnconfig 'settings' + option server 'ar.torguard.com' + option dedicated 'NO' + option dediserver '' + option protocol 'tcp' + option port '1912|SHA256' + option cipher 'AES-256-GCM' + option username '' + option password '' \ No newline at end of file diff --git a/root/etc/init.d/tgopenvpn b/root/etc/init.d/tgopenvpn new file mode 100644 index 0000000..37810cf --- /dev/null +++ b/root/etc/init.d/tgopenvpn @@ -0,0 +1,171 @@ +#!/bin/bash /etc/rc.common +# TorGuard OpenVPN init script + +START=10 +STOP=15 + +USE_PROCD=1 + +NAME=tgopenvpn + +stop_service() { + procd_kill openvpn + rm /etc/openvpn/torguard/userpass.txt + rm /etc/openvpn/client.conf + + # Check if 'lan' to 'wan' forwarding exists + lan_wan_exists=0 + lan_ovpn_indexes=() + forwarding_indexes=$(uci show firewall | awk -F'[][]' '/@forwarding/{print $2}') + + for index in $forwarding_indexes; do + src=$(uci get firewall.@forwarding[$index].src) + dest=$(uci get firewall.@forwarding[$index].dest) + + if [[ "$src" == "lan" && "$dest" == "wan" ]]; then + lan_wan_exists=1 + elif [[ "$src" == "lan" && "$dest" == "ovpn" ]]; then + lan_ovpn_indexes+=($index) + fi + done + + # If 'lan' to 'wan' forwarding doesn't exist, add it + if [[ "$lan_wan_exists" -eq "0" ]]; then + uci add firewall forwarding + uci set firewall.@forwarding[-1].src="lan" + uci set firewall.@forwarding[-1].dest="wan" + uci commit firewall + /etc/init.d/firewall reload + fi + + # Delete 'lan' to 'ovpn' forwarding + for index in ${lan_ovpn_indexes[@]}; do + uci delete firewall.@forwarding[$index] + done + uci commit firewall + /etc/init.d/firewall reload +} + +start_service() { + config_load tgopenvpn_cfg + + local server + local dedicated + local dediserver + local protocol + local port + local cipher + local username + local password + local auth + + config_get server settings server + config_get dedicated settings dedicated + config_get dediserver settings dediserver + config_get protocol settings protocol + config_get port settings port + config_get cipher settings cipher + config_get username settings username + config_get password settings password + + if [ "$dedicated" = "YES" ]; then + vpnserver=$dediserver + else + vpnserver=$server + fi + + # Add the OpenVPN interface + uci -q delete network.ovpn + uci set network.ovpn="interface" + uci set network.ovpn.proto="none" + uci set network.ovpn.device="tun0" + uci commit network + /etc/init.d/network reload + + # Add the 'ovpn' network to the 'wan' firewall zone + uci rename firewall.@zone[0]="lan" + uci rename firewall.@zone[1]="wan" + uci del_list firewall.wan.device="tun+" + uci add_list firewall.wan.device="tun+" + uci -q delete firewall.ovpn + uci set firewall.ovpn="zone" + uci set firewall.ovpn.output="ACCEPT" + uci set firewall.ovpn.forward="REJECT" + uci set firewall.ovpn.input="REJECT" + uci set firewall.ovpn.masq="1" + uci set firewall.ovpn.name="ovpn" + uci add_list firewall.ovpn.network="ovpn" + uci commit firewall + + # Check if 'lan' to 'ovpn' forwarding exists + lan_ovpn_exists=0 + forwarding_indexes=$(uci show firewall | awk -F'[][]' '/@forwarding/{print $2}') + + for index in $forwarding_indexes; do + src=$(uci get firewall.@forwarding[$index].src) + dest=$(uci get firewall.@forwarding[$index].dest) + + if [[ "$src" == "lan" && "$dest" == "ovpn" ]]; then + lan_ovpn_exists=1 + fi + done + + # If 'lan' to 'ovpn' forwarding doesn't exist, add it + if [[ "$lan_ovpn_exists" -eq "0" ]]; then + uci add firewall forwarding + uci set firewall.@forwarding[-1].src="lan" + uci set firewall.@forwarding[-1].dest="ovpn" + uci commit firewall + /etc/init.d/firewall reload + fi + + /etc/init.d/firewall reload + reload_config + + IFS='|' read -r portnumber auth <<< "$port" + + if [ ! -f /etc/openvpn/torguard/userpass.txt ]; then + umask go= + cat << EOF > /etc/openvpn/torguard/userpass.txt +$username +$password +EOF + fi + + chmod 600 /etc/openvpn/torguard/userpass.txt + + if [ ! -f /etc/openvpn/client.conf ]; then + umask go= + cat << EOF > /etc/openvpn/client.conf +client +dev tun +proto $protocol +resolv-retry infinite +nobind +persist-key +persist-tun +ca /etc/openvpn/torguard/ca.crt +remote-cert-tls server +tls-auth /etc/openvpn/torguard/ta.key 1 +cipher $cipher +comp-lzo +verb 3 +fast-io +auth-user-pass /etc/openvpn/torguard/userpass.txt +remote-random +auth $auth +reneg-sec 0 +remote $vpnserver $portnumber +sndbuf 393216 +rcvbuf 393216 +log /tmp/openvpn.log +EOF + fi + + procd_open_instance + procd_set_param command /usr/sbin/openvpn --config /etc/openvpn/client.conf + procd_set_param file /etc/openvpn/client.conf + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_close_instance +} diff --git a/root/etc/openvpn/torguard/ca.crt b/root/etc/openvpn/torguard/ca.crt new file mode 100644 index 0000000..60ad220 --- /dev/null +++ b/root/etc/openvpn/torguard/ca.crt @@ -0,0 +1,53 @@ +-----BEGIN CERTIFICATE----- +MIIDMTCCAhmgAwIBAgIJAKnGGJK6qLqSMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV +BAMMCVRHLVZQTi1DQTAgFw0xOTA1MjExNDIzMTFaGA8yMDU5MDUxMTE0MjMxMVow +FDESMBAGA1UEAwwJVEctVlBOLUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAlv0UgPD3xVAvhhP6q1HCmeAWbH+9HPkyQ2P6qM5oHY5dntjmq8YT48FZ +GHWv7+s9O47v6Bv7rEc4UwQx15cc2LByivX2JwmE8JACvNfwEnZXYAPq9WU3ZgRr +AGvA09ItuLqK2fQ4A7h8bFhmyxCbSzP1sSIT/zJY6ebuh5rDQSMJRMaoI0t1zorE +Z7PlEmh+o0w5GPs0D0vY50UcnEzB4GOdWC9pJREwEqppWYLN7RRdG8JyIqmA59mh +ARCnQFUo38HWic4trxFe71jtD7YInNV7ShQtg0S0sXo36Rqfz72Jo08qqI70dNs5 +DN1aGNkQ/tRK9DhL5DLmTkaCw7mEFQIDAQABo4GDMIGAMB0GA1UdDgQWBBR7Dcym +XBp6u/jAaZOPUjUhEyhXfjBEBgNVHSMEPTA7gBR7DcymXBp6u/jAaZOPUjUhEyhX +fqEYpBYwFDESMBAGA1UEAwwJVEctVlBOLUNBggkAqcYYkrqoupIwDAYDVR0TBAUw +AwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAE79ngbdSlP7IBbf +nJ+2Ju7vqt9/GyhcsYtjibp6gsMUxKlD8HuvlSGj5kNO5wiwN7XXqsjYtJfdhmzz +VbXksi8Fnbnfa8GhFl4IAjLJ5cxaWOxjr6wx2AhIs+BVVARjaU7iTK91RXJnl6u7 +UDHTkQylBTl7wgpMeG6GjhaHfcOL1t7D2w8x23cTO+p+n53P3cBq+9TiAUORdzXJ +vbCxlPMDSDArsgBjC57W7dtdnZo7gTfQG77JTDFBeSwPwLF7PjBB4S6rzU/4fcYw +y83XKP6zDn9tgUJDnpFb/7jJ/PbNkK4BWYJp3XytOtt66v9SEKw+v/fJ+VkjU16v +E/9Q3h4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/root/etc/openvpn/torguard/ta.key b/root/etc/openvpn/torguard/ta.key new file mode 100644 index 0000000..e6e1446 --- /dev/null +++ b/root/etc/openvpn/torguard/ta.key @@ -0,0 +1,18 @@ +-----BEGIN OpenVPN Static key V1----- +770e8de5fc56e0248cc7b5aab56be80d +0e19cbf003c1b3ed68efbaf08613c3a1 +a019dac6a4b84f13a6198f73229ffc21 +fa512394e288f82aa2cf0180f01fb3eb +1a71e00a077a20f6d7a83633f5b4f47f +27e30617eaf8485dd8c722a8606d56b3 +c183f65da5d3c9001a8cbdb96c793d93 +6251098b24fe52a6dd2472e98cfccbc4 +66e63520d63ade7a0eacc36208c3142a +1068236a52142fbb7b3ed83d785e12a2 +8261bccfb3bcb62a8d2f6d18f5df5f36 +52e59c5627d8d9c8f7877c4d7b08e19a +5c363556ba68d392be78b75152dd55ba +0f74d45089e84f77f4492d886524ea6c +82b9f4dd83d46528d4f5c3b51cfeaf28 +38d938bd0597c426b0e440434f2c451f +-----END OpenVPN Static key V1----- \ No newline at end of file diff --git a/root/etc/uci-defaults/tgopenvpn_def b/root/etc/uci-defaults/tgopenvpn_def new file mode 100644 index 0000000..2c8dcbd --- /dev/null +++ b/root/etc/uci-defaults/tgopenvpn_def @@ -0,0 +1,12 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@tgopenvpn_def[-1] + add ucitrack tgopenvpn + set ucitrack.@tgopenvpn[-1].init=tgopenvpn + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 + diff --git a/root/usr/lib/lua/luci/controller/admin/tgopenvpn.lua b/root/usr/lib/lua/luci/controller/admin/tgopenvpn.lua new file mode 100644 index 0000000..816dc35 --- /dev/null +++ b/root/usr/lib/lua/luci/controller/admin/tgopenvpn.lua @@ -0,0 +1,4 @@ +module("luci.controller.admin.tgopenvpn", package.seeall) +function index() + entry({"admin", "vpn", "tgopenvpn"}, cbi("torguard/tgopenvpn"), _("TorGuard OpenVPN"), 102) +end \ No newline at end of file diff --git a/root/usr/lib/lua/luci/model/cbi/torguard/tgopenvpn.lua b/root/usr/lib/lua/luci/model/cbi/torguard/tgopenvpn.lua new file mode 100644 index 0000000..f4dd9b1 --- /dev/null +++ b/root/usr/lib/lua/luci/model/cbi/torguard/tgopenvpn.lua @@ -0,0 +1,134 @@ +-- Import the necessary LuCI modules +local uci = require("luci.model.uci").cursor() +local sys = require("luci.sys") +local util = require("luci.util") + +-- Define the model +m = Map("tgopenvpn_cfg", "TorGuard OpenVPN Setup") + +-- Define the section for the OpenVPN settings +s = m:section(TypedSection, "ovpnconfig", "OpenVPN Settings") +s.anonymous = true +s.addremove = false + +-- Define the input fields for the OpenVPN settings +user = s:option(Value, "username", translate("VPN Username")) +pass = s:option(Value, "password", translate("VPN Password")) +pass.password = true + +svr = s:option(ListValue, "server", translate("VPN Server")) +-- Add all servers here +svr:value("ar.torguard.com", "Argentina") +svr:value("au.torguard.com", "Australia Sydney") +svr:value("aus.torguard.com", "Austria") +svr:value("bg.torguard.com", "Belgium") +svr:value("br.torguard.com", "Brazil 1") +svr:value("br2.torguard.com", "Brazil 2") +svr:value("bul.torguard.com", "Bulgaria") +svr:value("ca.torguard.com", "Canada Toronto") +svr:value("cavan.torguard.com", "Canada Vancouver") +svr:value("ch.torguard.com", "Chile") +svr:value("cz.torguard.com", "Czech Republic") +svr:value("dn.torguard.com", "Denmark") +svr:value("fn.torguard.com", "Finland") +svr:value("fr.torguard.com", "France") +svr:value("ger.torguard.com", "Germany") +svr:value("gre.torguard.com", "Greece") +svr:value("hk.torguard.com", "Hong Kong") +svr:value("hg.torguard.com", "Hungary") +svr:value("ice.torguard.com", "Iceland") +svr:value("in.torguard.com", "India Mumbai") +svr:value("ire.torguard.com", "Ireland") +svr:value("isr-loc1.torguard.com", "Israel Tel Aviv") +svr:value("it.torguard.com", "Italy") +svr:value("id.torguard.com", "Indonesia") +svr:value("jp.torguard.com", "Japan") +svr:value("lux.torguard.com", "Luxembourg") +svr:value("mx.torguard.com", "Mexico") +svr:value("md.torguard.com", "Moldova") +svr:value("nl.torguard.com", "Netherlands") +svr:value("nz.torguard.com", "New Zealand") +svr:value("no.torguard.com", "Norway") +svr:value("pl.torguard.com", "Poland") +svr:value("pg.torguard.com", "Portugal") +svr:value("ro.torguard.com", "Romania") +svr:value("ru.torguard.com", "Russia") +svr:value("sg.torguard.com", "Singapore") +svr:value("slk.torguard.com", "Slovakia") +svr:value("sp.torguard.com", "Spain") +svr:value("sk.torguard.com", "South Korea") +svr:value("sa.torguard.com", "South Africa") +svr:value("swe.torguard.com", "Sweden") +svr:value("swiss.torguard.com", "Switzerland") +svr:value("tw.torguard.com", "Taiwan") +svr:value("th.torguard.com", "Thailand") +svr:value("tk.torguard.com", "Turkey") +svr:value("uae.torguard.com", "UAE") +svr:value("uk.torguard.com", "UK London") +svr:value("uk.man.torguard.com", "UK Manchester") +svr:value("ukr.torguard.com", "Ukraine") +svr:value("us-fl.torguard.com", "USA Miami") +svr:value("us-atl.torguard.com", "USA Atlanta") +svr:value("us-ny.torguard.com", "USA New York") +svr:value("us-chi.torguard.com", "USA Chicago") +svr:value("us-chi-loc2.torguard.com", "USA Chicago 2") +svr:value("us-dal.torguard.com", "USA Dallas") +svr:value("us-dal-loc2.torguard.com", "USA Dallas 2") +svr:value("us-la.torguard.com", "USA LA") +svr:value("us-lv.torguard.com", "USA Las Vegas") +svr:value("us-sa.torguard.com", "USA Seattle") +svr:value("us-sf.torguard.com", "USA San Francisco") +svr:value("us-nj.torguard.com", "USA New Jersey") +svr:value("us-nj-loc2.torguard.com", "USA New Jersey 2") +svr:value("us-slc.torguard.com", "USA Salt Lake City") + +dedicated = s:option(ListValue, "dedicated", translate("Use Dedicated IP")) +dedicated:value("YES") +dedicated:value("NO") + +dediserver = s:option(Value, "dediserver", translate("Dedicated IP")) + +protocol = s:option(ListValue, "protocol", translate("VPN Protocol")) +protocol:value("udp") +protocol:value("tcp") + +port = s:option(ListValue, "port", translate("VPN Port")) +-- Add all ports here +port:value("1912|SHA256", "1912|SHA256") +port:value("1195|SHA256", "1195|SHA256") +port:value("53|SHA256", "53|SHA256") +port:value("1198|SHA256", "1198|SHA256") +port:value("9201|SHA256", "9201|SHA256") +port:value("501|SHA256", "501|SHA256") +port:value("1194|SHA1", "1194|SHA1") +port:value("995|SHA1", "995|SHA1") +port:value("1215|SHA512", "1215|SHA512") +port:value("389|SHA512", "389|SHA512") +port:value("80|SHA1", "80|SHA1") +port:value("443|SHA1", "443|SHA1") + +cipher = s:option(ListValue, "cipher", translate("VPN Cipher")) +-- Add all cipher options here +cipher:value("AES-128-CBC") +cipher:value("AES-256-CBC") +cipher:value("AES-128-GCM") +cipher:value("AES-256-GCM") +cipher:value("BF-CBC") + +-- VPN Control: Start/Stop OpenVPN +ctrl = m:section(TypedSection, "ovpnconfig", "VPN Control: Start/Stop OpenVPN") +ctrl.anonymous = true +ctrl.addremove = false + +btnStop = ctrl:option(Button, "_btn_start", translate("Click to Stop OpenVPN")) +function btnStop.write() + io.popen("/etc/init.d/tgopenvpn stop") +end + +btnStart = ctrl:option(Button, "_btn_stop", translate("Click to Start OpenVPN")) +function btnStart.write() + io.popen("/etc/init.d/tgopenvpn start") +end + +-- Return the configuration page +return m