mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-15 03:51:51 +00:00
commit
eb366d75bf
230 changed files with 62362 additions and 514 deletions
|
@ -23,6 +23,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: x86_64
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -30,8 +31,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -85,6 +86,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: x86
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -92,8 +94,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -145,6 +147,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: rpi3
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -152,8 +155,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -205,6 +208,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: rpi4
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -212,8 +216,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -265,6 +269,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: rpi2
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -272,8 +277,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -325,6 +330,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: bpi-r2
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -332,8 +338,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -388,6 +394,7 @@ jobs:
|
|||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_TARGET: wrt3200acm
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -395,8 +402,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
@ -447,6 +454,7 @@ jobs:
|
|||
|
||||
environment:
|
||||
- OMR_VERSION: $CIRCLE_TAG
|
||||
- OMR_KERNEL: 5.4
|
||||
|
||||
working_directory: ~/
|
||||
|
||||
|
@ -454,8 +462,8 @@ jobs:
|
|||
- run:
|
||||
name: cache
|
||||
command: |
|
||||
echo "cache 82 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 85 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
echo "cache 92 $OMR_KERNEL $OMR_TARGET" > /tmp/cache-target
|
||||
echo "cache 94 $OMR_KERNEL $OMR_TARGET $OMR_VERSION" > /tmp/cache-version
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Copyright (C) 2015 OVH
|
||||
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
|
||||
# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/angt/glorytun.git
|
||||
PKG_SOURCE_VERSION:=a9408e799ddbb74b5476fba70a495770322cd327
|
||||
PKG_SOURCE_VERSION:=3622f928caf03709c4031a34feec85c623bc5281
|
||||
PKG_NAME:=glorytun-udp
|
||||
PKG_VERSION:=0.3.0-$(PKG_SOURCE_VERSION)
|
||||
PKG_VERSION:=0.3.4-$(PKG_SOURCE_VERSION)
|
||||
PKG_RELEASE:=23
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
|
|
|
@ -48,6 +48,7 @@ start_instance() {
|
|||
[ "${key}" != "secretkey" ] || return 1
|
||||
[ -n "${port}" ] || return 1
|
||||
[ -n "${dev}" ] || return 1
|
||||
[ -n "${host}" ] || return 1
|
||||
|
||||
echo "${key}" > /tmp/${PROG_NAME}-${1}.key
|
||||
[ -f "/tmp/${PROG_NAME}-${1}.key" ] || {
|
||||
|
@ -75,8 +76,8 @@ start_instance() {
|
|||
[ "${chacha20}" = "1" ] && procd_append_param command chacha20
|
||||
|
||||
procd_append_param command \
|
||||
retry count -1 const 5000000 \
|
||||
timeout 100000 \
|
||||
retry count -1 const 500000 \
|
||||
timeout 10000 \
|
||||
keepalive count 5 idle 20 interval 2 \
|
||||
buffer-size 32768
|
||||
|
||||
|
|
36
https-dns-proxy/Makefile
Normal file
36
https-dns-proxy/Makefile
Normal file
|
@ -0,0 +1,36 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=https-dns-proxy
|
||||
PKG_VERSION:=2019-12-03
|
||||
PKG_RELEASE=5
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/aarond10/https_dns_proxy
|
||||
PKG_SOURCE_DATE:=2019-12-03
|
||||
PKG_SOURCE_VERSION:=2adeafb67cbe8d67148219c48334856ae4f3bd75
|
||||
PKG_MIRROR_HASH:=58088baa092cd9634652d65f9b5650db88d2e102cb370710654db7b15f2f0e42
|
||||
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
CMAKE_OPTIONS += -DCLANG_TIDY_EXE=
|
||||
|
||||
define Package/https-dns-proxy
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=DNS Over HTTPS Proxy
|
||||
DEPENDS:=+libcares +libcurl +libev +ca-bundle
|
||||
CONFLICTS:=https_dns_proxy
|
||||
endef
|
||||
|
||||
define Package/https-dns-proxy/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d ${1}/etc/config
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/https_dns_proxy $(1)/usr/sbin/https-dns-proxy
|
||||
$(INSTALL_BIN) ./files/https-dns-proxy.init $(1)/etc/init.d/https-dns-proxy
|
||||
$(INSTALL_CONF) ./files/https-dns-proxy.config $(1)/etc/config/https-dns-proxy
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,https-dns-proxy))
|
95
https-dns-proxy/files/README.md
Normal file
95
https-dns-proxy/files/README.md
Normal file
|
@ -0,0 +1,95 @@
|
|||
# DNS Over HTTPS Proxy (https-dns-proxy)
|
||||
|
||||
A lean RFC8484-compatible (no JSON API support) DNS-over-HTTPS (DoH) proxy service which supports DoH servers ran by AdGuard, CleanBrowsing, Cloudflare, Google, ODVR (nic.cz) and Quad9. Please see the [README](https://github.com/stangri/openwrt_packages/blob/master/https-dns-proxy/files/README.md) for further information. Based on [@aarond10](https://github.com/aarond10)'s [https-dns-proxy](https://github.com/aarond10/https_dns_proxy).
|
||||
|
||||
## Features
|
||||
|
||||
- [RFC8484](https://tools.ietf.org/html/rfc8484)-compatible DoH Proxy.
|
||||
- Compact size.
|
||||
- Web UI (```luci-app-https-dns-proxy```) available.
|
||||
- (By default) automatically updates DNSMASQ settings to use DoH proxy when it's started and reverts to old DNSMASQ resolvers when DoH proxy is stopped.
|
||||
|
||||
## Screenshots (luci-app-https-dns-proxy)
|
||||
|
||||
![screenshot](https://raw.githubusercontent.com/stangri/openwrt_packages/master/screenshots/https-dns-proxy/screenshot01.png "https-dns-proxy screenshot")
|
||||
|
||||
## Requirements
|
||||
|
||||
This proxy requires the following packages to be installed on your router: ```libc```, ```libcares```, ```libcurl```, ```libev```, ```ca-bundle```. They will be automatically installed when you're installing ```https-dns-proxy```.
|
||||
|
||||
## Unmet Dependencies
|
||||
|
||||
If you are running a development (trunk/snapshot) build of OpenWrt/LEDE Project on your router and your build is outdated (meaning that packages of the same revision/commit hash are no longer available and when you try to satisfy the [requirements](#requirements) you get errors), please flash either current LEDE release image or current development/snapshot image.
|
||||
|
||||
## How To Install
|
||||
|
||||
Install ```https-dns-proxy``` and ```luci-app-https-dns-proxy``` packages from Web UI or run the following in the command line:
|
||||
|
||||
```sh
|
||||
opkg update; opkg install https-dns-proxy luci-app-https-dns-proxy;
|
||||
```
|
||||
|
||||
## Default Settings
|
||||
|
||||
Default configuration has service enabled and starts the service with Google and Cloudflare DoH servers. In most configurations, you will keep the default ```DNSMASQ``` service installed to handle requests from devices in your local network and point ```DNSMASQ``` to use ```https-dns-proxy``` for name resolution.
|
||||
|
||||
By default, the service will intelligently override existing ```DNSMASQ``` servers settings on start to use the DoH servers and restores original ```DNSMASQ``` servers on stop. See the [Configuration Settings](#configuration-settings) section below for more information and how to disable this behavior.
|
||||
|
||||
## Configuration Settings
|
||||
|
||||
Configuration contains the (named) "main" config section where you can configure which ```DNSMASQ``` settings the service will automatically affect and the typed (unnamed) https-dns-proxy instance settings. The original config file is included below:
|
||||
|
||||
```text
|
||||
config main 'config'
|
||||
option update_dnsmasq_config '*'
|
||||
|
||||
config https-dns-proxy
|
||||
option bootstrap_dns '8.8.8.8,8.8.4.4'
|
||||
option resolver_url 'https://dns.google/dns-query'
|
||||
option listen_addr '127.0.0.1'
|
||||
option listen_port '5053'
|
||||
option user 'nobody'
|
||||
option group 'nogroup'
|
||||
|
||||
config https-dns-proxy
|
||||
option bootstrap_dns '1.1.1.1,1.0.0.1'
|
||||
option resolver_url 'https://cloudflare-dns.com/dns-query'
|
||||
option listen_addr '127.0.0.1'
|
||||
option listen_port '5054'
|
||||
option user 'nobody'
|
||||
option group 'nogroup'
|
||||
```
|
||||
|
||||
The ```update_dnsmasq_config``` option can be set to dash (set to ```'-'``` to not change ```DNSMASQ``` server settings on start/stop), can be set to ```'*'``` to affect all ```DNSMASQ``` instance server settings or have a space-separated list of ```DNSMASQ``` instances to affect (like ```'0 4 5'```). If this option is omitted, the default setting is ```'*'```.
|
||||
|
||||
Starting with ```https-dns-proxy``` version ```2019-12-03-3``` and higher, when the service is set to update the DNSMASQ servers setting on start/stop, it does not override entries which contain either ```#``` or ```/```, so the entries like listed below will be kept in use:
|
||||
|
||||
```test
|
||||
list server '/onion/127.0.0.1#65453'
|
||||
list server '/openwrt.org/8.8.8.8'
|
||||
list server '/pool.ntp.org/8.8.8.8'
|
||||
list server '127.0.0.1#15353'
|
||||
list server '127.0.0.1#55353'
|
||||
list server '127.0.0.1#65353'
|
||||
```
|
||||
|
||||
The https-dns-proxy instance settings are:
|
||||
|
||||
|Parameter|Type|Default|Description|
|
||||
| --- | --- | --- | --- |
|
||||
|bootstrap_dns|IP Address||The non-encrypted DNS servers to be used to resolve the DoH server name on start.|
|
||||
|edns_subnet|Subnet||EDNS Subnet address can be supplied to supported DoH servers to provide local resolution results.|
|
||||
|listen_addr|IP Address|127.0.0.1|The local IP address to listen to requests.|
|
||||
|listen_port|port|5053 and up|If this setting is omitted, the service will start the first https-dns-proxy instance on port 5053, second on 5054 and so on.|
|
||||
|logfile|Full filepath||Full filepath to the file to log the instance events to.|
|
||||
|resolver_url|URL||The https URL to the RFC8484-compatible resolver.|
|
||||
|proxy_server|URL||Local proxy server to use when accessing resolvers.|
|
||||
|user|String|nobody|Local user to run instance under.|
|
||||
|group|String|nogroup|Local group to run instance under.|
|
||||
|use_http1|Boolean|0|If set to 1, use HTTP/1 on installations with broken/outdated ```curl``` package. Included for posterity reasons, you will most likely not ever need it on OpenWrt.|
|
||||
|verbosity|Integer|0|logging verbosity level. fatal = 0, error = 1, warning = 2, info = 3, debug = 4|
|
||||
|use_ipv6_resolvers_only|Boolean|0|If set to 1, Forces IPv6 DNS resolvers instead of IPv4|
|
||||
|
||||
## Thanks
|
||||
|
||||
This OpenWrt package wouldn't have been possible without [@aarond10](https://github.com/aarond10)'s [https-dns-proxy](https://github.com/aarond10/https_dns_proxy) and his active participation in the OpenWrt package itself. Special thanks to [@jow-](https://github.com/jow-) for general package/luci guidance.
|
18
https-dns-proxy/files/https-dns-proxy.config
Normal file
18
https-dns-proxy/files/https-dns-proxy.config
Normal file
|
@ -0,0 +1,18 @@
|
|||
config main 'config'
|
||||
option update_dnsmasq_config '*'
|
||||
|
||||
config https-dns-proxy
|
||||
option bootstrap_dns '8.8.8.8,8.8.4.4'
|
||||
option resolver_url 'https://dns.google/dns-query'
|
||||
option listen_addr '127.0.0.1'
|
||||
option listen_port '5053'
|
||||
option user 'nobody'
|
||||
option group 'nogroup'
|
||||
|
||||
config https-dns-proxy
|
||||
option bootstrap_dns '1.1.1.1,1.0.0.1'
|
||||
option resolver_url 'https://cloudflare-dns.com/dns-query'
|
||||
option listen_addr '127.0.0.1'
|
||||
option listen_port '5054'
|
||||
option user 'nobody'
|
||||
option group 'nogroup'
|
188
https-dns-proxy/files/https-dns-proxy.init
Executable file
188
https-dns-proxy/files/https-dns-proxy.init
Executable file
|
@ -0,0 +1,188 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright 2019 Stan Grishin (stangri@melmac.net)
|
||||
# shellcheck disable=SC2039
|
||||
|
||||
export START=80
|
||||
export USE_PROCD=1
|
||||
|
||||
dnsmasqConfig=''
|
||||
|
||||
PROG=/usr/sbin/https-dns-proxy
|
||||
|
||||
xappend() { param="$param $1"; }
|
||||
|
||||
append_bool() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local value="$3"
|
||||
local default="$4"
|
||||
local _loctmp
|
||||
[ -z "$default" ] && default="0"
|
||||
config_get_bool _loctmp "$section" "$option" "$default"
|
||||
[ "$_loctmp" != "0" ] && xappend "$value"
|
||||
}
|
||||
|
||||
append_parm() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local switch="$3"
|
||||
local default="$4"
|
||||
local _loctmp
|
||||
config_get _loctmp "$section" "$option" "$default"
|
||||
[ -z "$_loctmp" ] && return 0
|
||||
xappend "$switch $_loctmp"
|
||||
}
|
||||
|
||||
start_instance() {
|
||||
local cfg="$1" param listen_addr listen_port i
|
||||
|
||||
append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1'
|
||||
append_parm "$cfg" 'listen_port' '-p' "$p"
|
||||
append_parm "$cfg" 'bootstrap_dns' '-b'
|
||||
append_parm "$cfg" 'resolver_url' '-r'
|
||||
append_parm "$cfg" 'user' '-u' 'nobody'
|
||||
append_parm "$cfg" 'group' '-g' 'nogroup'
|
||||
append_parm "$cfg" 'edns_subnet' '-e'
|
||||
append_parm "$cfg" 'proxy_server' '-t'
|
||||
append_parm "$cfg" 'logfile' '-l'
|
||||
append_bool "$cfg" 'use_http1' '-x'
|
||||
config_get_bool ipv6_resolvers_only "$cfg" 'use_ipv6_resolvers_only' '0'
|
||||
config_get verbosity "$cfg" 'verbosity' "0"
|
||||
|
||||
# shellcheck disable=SC2086,SC2154
|
||||
for i in $(seq 1 $verbosity); do
|
||||
xappend "-v"
|
||||
done
|
||||
# shellcheck disable=SC2154
|
||||
if [ "$ipv6_resolvers_only" = 0 ]; then
|
||||
xappend "-4"
|
||||
fi
|
||||
|
||||
procd_open_instance
|
||||
# shellcheck disable=SC2086
|
||||
procd_set_param command ${PROG} ${param}
|
||||
procd_set_param stderr 1
|
||||
procd_set_param stdout 1
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
|
||||
config_get listen_addr "$cfg" 'listen_addr' '127.0.0.1'
|
||||
config_get listen_port "$cfg" 'listen_port' "$p"
|
||||
|
||||
if [ "$dnsmasqConfig" = "*" ]; then
|
||||
config_load 'dhcp'
|
||||
config_foreach dnsmasq_add_doh_server 'dnsmasq' "${listen_addr}" "${listen_port}"
|
||||
elif [ -n "$dnsmasqConfig" ]; then
|
||||
for i in $dnsmasqConfig; do
|
||||
dnsmasq_add_doh_server "@dnsmasq[${i}]" "${listen_addr}" "${listen_port}"
|
||||
done
|
||||
fi
|
||||
p="$((p+1))"
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger 'https-dns-proxy'
|
||||
}
|
||||
|
||||
start_service() {
|
||||
local p=5053
|
||||
config_load 'https-dns-proxy'
|
||||
config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*'
|
||||
dhcp_backup 'create'
|
||||
config_load 'https-dns-proxy'
|
||||
config_foreach start_instance 'https-dns-proxy'
|
||||
if [ "$p" != "5053" ] && [ "$dnsmasqConfig" = "*" ]; then
|
||||
uci -q del_list "dhcp.@dnsmasq[0].server=127.0.0.1#5353"
|
||||
fi
|
||||
if [ -n "$(uci -q changes dhcp)" ]; then
|
||||
uci -q commit dhcp
|
||||
[ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
config_load 'https-dns-proxy'
|
||||
config_get dnsmasqConfig 'config' 'update_dnsmasq_config' '*'
|
||||
dhcp_backup 'restore'
|
||||
if [ -n "$(uci -q changes dhcp)" ]; then
|
||||
uci -q commit dhcp
|
||||
[ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger 'https-dns-proxy'
|
||||
}
|
||||
|
||||
dnsmasq_add_doh_server() {
|
||||
local cfg="$1" address="$2" port="$3"
|
||||
case $address in
|
||||
0.0.0.0|::ffff:0.0.0.0) address='127.0.0.1';;
|
||||
::) address='::1';;
|
||||
esac
|
||||
uci -q del_list "dhcp.${cfg}.server=${address}#${port}"
|
||||
uci -q add_list "dhcp.${cfg}.server=${address}#${port}"
|
||||
}
|
||||
|
||||
dnsmasq_create_server_backup() {
|
||||
local cfg="$1"
|
||||
local i
|
||||
uci -q get "dhcp.${cfg}" >/dev/null || return 0
|
||||
if ! uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then
|
||||
if [ -z "$(uci -q get "dhcp.${cfg}.noresolv")" ]; then
|
||||
uci -q set "dhcp.${cfg}.noresolv=1"
|
||||
uci -q set "dhcp.${cfg}.doh_backup_noresolv=-1"
|
||||
elif [ "$(uci -q get "dhcp.${cfg}.noresolv")" != "1" ]; then
|
||||
uci -q set "dhcp.${cfg}.noresolv=1"
|
||||
uci -q set "dhcp.${cfg}.doh_backup_noresolv=0"
|
||||
fi
|
||||
fi
|
||||
if ! uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then
|
||||
for i in $(uci -q get "dhcp.${cfg}.server"); do
|
||||
uci -q add_list "dhcp.${cfg}.doh_backup_server=$i"
|
||||
if [ "$i" = "${i//127.0.0.1}" ] && [ "$i" = "$(echo "$i" | tr -d /)" ]; then
|
||||
uci -q del_list "dhcp.${cfg}.server=$i"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
dnsmasq_restore_server_backup() {
|
||||
local cfg="$1"
|
||||
local i
|
||||
uci -q get "dhcp.${cfg}" >/dev/null || return 0
|
||||
if uci -q get "dhcp.${cfg}.doh_backup_noresolv" >/dev/null; then
|
||||
if [ "$(uci -q get "dhcp.${cfg}.doh_backup_noresolv")" = "0" ]; then
|
||||
uci -q set "dhcp.${cfg}.noresolv=0"
|
||||
else
|
||||
uci -q del "dhcp.${cfg}.noresolv"
|
||||
fi
|
||||
uci -q del "dhcp.${cfg}.doh_backup_noresolv"
|
||||
fi
|
||||
if uci -q get "dhcp.${cfg}.doh_backup_server" >/dev/null; then
|
||||
uci -q del "dhcp.${cfg}.server"
|
||||
for i in $(uci -q get "dhcp.${cfg}.doh_backup_server"); do
|
||||
uci -q add_list "dhcp.${cfg}.server=$i"
|
||||
done
|
||||
uci -q del "dhcp.${cfg}.doh_backup_server"
|
||||
fi
|
||||
}
|
||||
|
||||
dhcp_backup() {
|
||||
local i
|
||||
config_load 'dhcp'
|
||||
case "$1" in
|
||||
create)
|
||||
if [ "$dnsmasqConfig" = "*" ]; then
|
||||
config_foreach dnsmasq_create_server_backup 'dnsmasq'
|
||||
elif [ -n "$dnsmasqConfig" ]; then
|
||||
for i in $dnsmasqConfig; do
|
||||
dnsmasq_create_server_backup "@dnsmasq[${i}]"
|
||||
done
|
||||
fi
|
||||
;;
|
||||
restore)
|
||||
config_foreach dnsmasq_restore_server_backup 'dnsmasq'
|
||||
;;
|
||||
esac
|
||||
}
|
65
iptables-mod-fullconenat/Makefile
Normal file
65
iptables-mod-fullconenat/Makefile
Normal file
|
@ -0,0 +1,65 @@
|
|||
#
|
||||
# Copyright (C) 2018 Chion Tang <tech@chionlab.moe>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=fullconenat
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_DATE:=2019-10-21
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/Chion82/netfilter-full-cone-nat.git
|
||||
PKG_SOURCE_VERSION:=0cf3b48fd7d2fa81d0297d1fff12bbd0580fc435
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/iptables-mod-fullconenat
|
||||
SUBMENU:=Firewall
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=FULLCONENAT iptables extension
|
||||
DEPENDS:=+iptables +kmod-ipt-fullconenat
|
||||
MAINTAINER:=Chion Tang <tech@chionlab.moe>
|
||||
endef
|
||||
|
||||
define Package/iptables-mod-fullconenat/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/iptables
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/libipt_FULLCONENAT.so $(1)/usr/lib/iptables
|
||||
endef
|
||||
|
||||
define KernelPackage/ipt-fullconenat
|
||||
SUBMENU:=Netfilter Extensions
|
||||
TITLE:=FULLCONENAT netfilter module
|
||||
DEPENDS:=+kmod-nf-ipt +kmod-nf-nat
|
||||
MAINTAINER:=Chion Tang <tech@chionlab.moe>
|
||||
KCONFIG:=CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CONNTRACK_CHAIN_EVENTS=y
|
||||
FILES:=$(PKG_BUILD_DIR)/xt_FULLCONENAT.ko
|
||||
endef
|
||||
|
||||
include $(INCLUDE_DIR)/kernel-defaults.mk
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
$(CP) ./files/Makefile $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
|
||||
CROSS_COMPILE="$(TARGET_CROSS)" \
|
||||
ARCH="$(LINUX_KARCH)" \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
EXTRA_CFLAGS="$(BUILDFLAGS)" \
|
||||
modules
|
||||
$(call Build/Compile/Default)
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,iptables-mod-fullconenat))
|
||||
$(eval $(call KernelPackage,ipt-fullconenat))
|
27
iptables-mod-fullconenat/README.md
Normal file
27
iptables-mod-fullconenat/README.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
## Netfilter and iptables extension for [FULLCONENAT](https://github.com/Chion82/netfilter-full-cone-nat) target ported to OpenWrt.
|
||||
|
||||
Compile
|
||||
---
|
||||
```
|
||||
# cd to OpenWrt source path
|
||||
# Clone this repo
|
||||
git clone -b master --single-branch https://github.com/LGA1150/openwrt-fullconenat package/fullconenat
|
||||
# Select Network -> Firewall -> iptables-mod-fullconenat
|
||||
make menuconfig
|
||||
# Compile
|
||||
make V=s
|
||||
```
|
||||
|
||||
Usage
|
||||
---
|
||||
You can apply [this patch](https://github.com/LGA1150/fullconenat-fw3-patch) to OpenWrt's Firewall3 (Recommended).
|
||||
|
||||
Or manually add the following rules to `/etc/firewall.user`
|
||||
```
|
||||
iptables -t nat -A zone_wan_prerouting -j FULLCONENAT
|
||||
iptables -t nat -A zone_wan_postrouting -j FULLCONENAT
|
||||
```
|
||||
|
||||
Workaround for conflicting with module `nf_conntrack_netlink`
|
||||
---
|
||||
This module uses conntrack events to register a callback function. In the same netns, only one callback method can be registered, that causes conflicts with `nf_conntrack_netlink`, which also uses conntrack events. Qualcomm Shortcut FE has introduced a patch to allow multiple callbacks to be registered. To apply, put [this patch](https://github.com/coolsnowwolf/lede/blob/master/target/linux/generic/hack-4.14/952-net-conntrack-events-support-multiple-registrant.patch) into `target/linux/generic/hack-4.14`.
|
7
iptables-mod-fullconenat/files/Makefile
Normal file
7
iptables-mod-fullconenat/files/Makefile
Normal file
|
@ -0,0 +1,7 @@
|
|||
libipt_FULLCONENAT.so: libipt_FULLCONENAT.o
|
||||
$(CC) -shared -lxtables -o $@ $^;
|
||||
libipt_FULLCONENAT.o: libipt_FULLCONENAT.c
|
||||
$(CC) ${CFLAGS} -fPIC -D_INIT=$*_init -c -o $@ $<;
|
||||
|
||||
obj-m += xt_FULLCONENAT.o
|
||||
|
17
iptables-mod-fullconenat/patches/000-printk.patch
Normal file
17
iptables-mod-fullconenat/patches/000-printk.patch
Normal file
|
@ -0,0 +1,17 @@
|
|||
diff --git a/xt_FULLCONENAT.c b/xt_FULLCONENAT.c
|
||||
index 9e52eba..8658c5f 100644
|
||||
--- a/xt_FULLCONENAT.c
|
||||
+++ b/xt_FULLCONENAT.c
|
||||
@@ -702,9 +702,11 @@ static struct xt_target tg_reg[] __read_mostly = {
|
||||
|
||||
static int __init fullconenat_tg_init(void)
|
||||
{
|
||||
+ printk(KERN_INFO "xt_FULLCONENAT: RFC3489 Full Cone NAT module\n"
|
||||
+ "xt_FULLCONENAT: Copyright (C) 2018 Chion Tang <tech@chionlab.moe>\n");
|
||||
wq = create_singlethread_workqueue("xt_FULLCONENAT");
|
||||
if (wq == NULL) {
|
||||
- printk("xt_FULLCONENAT: warning: failed to create workqueue\n");
|
||||
+ printk(KERN_WARNING "xt_FULLCONENAT: warning: failed to create workqueue\n");
|
||||
}
|
||||
|
||||
return xt_register_targets(tg_reg, ARRAY_SIZE(tg_reg));
|
44
libell/Makefile
Normal file
44
libell/Makefile
Normal file
|
@ -0,0 +1,44 @@
|
|||
#
|
||||
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ell
|
||||
PKG_VERSION:=0.30
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_HASH:=51cf8cc66a9d1038e41f7d619ea5660aa4476904496562b2d45ca79370ca4a5e
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/libs/ell
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=GPL
|
||||
PKG_INSTALL:=1
|
||||
PKG_MAINTAINER:=Ycarus <ycarus@zugaina.org>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/libell
|
||||
SECTION:=libs
|
||||
CATEGORY:=Libraries
|
||||
TITLE:=Embedded Linux library
|
||||
URL:=https://git.kernel.org/pub/scm/libs/ell/ell.git
|
||||
endef
|
||||
|
||||
define Package/libell/description
|
||||
Embeded Linux library
|
||||
endef
|
||||
|
||||
define Package/libell/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libell*.so* $(1)/usr/lib
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)
|
||||
$(CP) $(PKG_INSTALL_DIR)/* $(1)/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libell))
|
11
luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json
Normal file
11
luci-app-dsvpn/root/usr/share/rpcd/acl.d/luci-app-dsvpn.json
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"luci-app-dsvpn": {
|
||||
"description": "Grant UCI access for luci-app-dsvpn",
|
||||
"read": {
|
||||
"uci": [ "dsvpn" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "dsvpn" ]
|
||||
}
|
||||
}
|
||||
}
|
16
luci-app-firewall/Makefile
Normal file
16
luci-app-firewall/Makefile
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=Firewall and Portforwarding application
|
||||
LUCI_DEPENDS:=+firewall
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
655
luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js
Normal file
655
luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js
Normal file
|
@ -0,0 +1,655 @@
|
|||
'use strict';
|
||||
'require baseclass';
|
||||
'require dom';
|
||||
'require ui';
|
||||
'require uci';
|
||||
'require form';
|
||||
'require network';
|
||||
'require firewall';
|
||||
'require tools.prng as random';
|
||||
|
||||
var protocols = [
|
||||
'ip', 0, 'IP',
|
||||
'hopopt', 0, 'HOPOPT',
|
||||
'icmp', 1, 'ICMP',
|
||||
'igmp', 2, 'IGMP',
|
||||
'ggp', 3 , 'GGP',
|
||||
'ipencap', 4, 'IP-ENCAP',
|
||||
'st', 5, 'ST',
|
||||
'tcp', 6, 'TCP',
|
||||
'egp', 8, 'EGP',
|
||||
'igp', 9, 'IGP',
|
||||
'pup', 12, 'PUP',
|
||||
'udp', 17, 'UDP',
|
||||
'hmp', 20, 'HMP',
|
||||
'xns-idp', 22, 'XNS-IDP',
|
||||
'rdp', 27, 'RDP',
|
||||
'iso-tp4', 29, 'ISO-TP4',
|
||||
'dccp', 33, 'DCCP',
|
||||
'xtp', 36, 'XTP',
|
||||
'ddp', 37, 'DDP',
|
||||
'idpr-cmtp', 38, 'IDPR-CMTP',
|
||||
'ipv6', 41, 'IPv6',
|
||||
'ipv6-route', 43, 'IPv6-Route',
|
||||
'ipv6-frag', 44, 'IPv6-Frag',
|
||||
'idrp', 45, 'IDRP',
|
||||
'rsvp', 46, 'RSVP',
|
||||
'gre', 47, 'GRE',
|
||||
'esp', 50, 'IPSEC-ESP',
|
||||
'ah', 51, 'IPSEC-AH',
|
||||
'skip', 57, 'SKIP',
|
||||
'icmpv6', 58, 'IPv6-ICMP',
|
||||
'ipv6-icmp', 58, 'IPv6-ICMP',
|
||||
'ipv6-nonxt', 59, 'IPv6-NoNxt',
|
||||
'ipv6-opts', 60, 'IPv6-Opts',
|
||||
'rspf', 73, 'RSPF',
|
||||
'rspf', 73, 'CPHB',
|
||||
'vmtp', 81, 'VMTP',
|
||||
'eigrp', 88, 'EIGRP',
|
||||
'ospf', 89, 'OSPFIGP',
|
||||
'ax.25', 93, 'AX.25',
|
||||
'ipip', 94, 'IPIP',
|
||||
'etherip', 97, 'ETHERIP',
|
||||
'encap', 98, 'ENCAP',
|
||||
'pim', 103, 'PIM',
|
||||
'ipcomp', 108, 'IPCOMP',
|
||||
'vrrp', 112, 'VRRP',
|
||||
'l2tp', 115, 'L2TP',
|
||||
'isis', 124, 'ISIS',
|
||||
'sctp', 132, 'SCTP',
|
||||
'fc', 133, 'FC',
|
||||
'mh', 135, 'Mobility-Header',
|
||||
'ipv6-mh', 135, 'Mobility-Header',
|
||||
'mobility-header', 135, 'Mobility-Header',
|
||||
'udplite', 136, 'UDPLite',
|
||||
'mpls-in-ip', 137, 'MPLS-in-IP',
|
||||
'manet', 138, 'MANET',
|
||||
'hip', 139, 'HIP',
|
||||
'shim6', 140, 'Shim6',
|
||||
'wesp', 141, 'WESP',
|
||||
'rohc', 142, 'ROHC',
|
||||
];
|
||||
|
||||
function lookupProto(x) {
|
||||
if (x == null || x === '')
|
||||
return null;
|
||||
|
||||
var s = String(x).toLowerCase();
|
||||
|
||||
for (var i = 0; i < protocols.length; i += 3)
|
||||
if (s == protocols[i] || s == protocols[i+1])
|
||||
return [ protocols[i+1], protocols[i+2], protocols[i] ];
|
||||
|
||||
return [ -1, x, x ];
|
||||
}
|
||||
|
||||
return baseclass.extend({
|
||||
fmt: function(fmtstr, args, values) {
|
||||
var repl = [],
|
||||
wrap = false,
|
||||
tokens = [];
|
||||
|
||||
if (values == null) {
|
||||
values = [];
|
||||
wrap = true;
|
||||
}
|
||||
|
||||
var get = function(args, key) {
|
||||
var names = key.trim().split(/\./),
|
||||
obj = args,
|
||||
ctx = obj;
|
||||
|
||||
for (var i = 0; i < names.length; i++) {
|
||||
if (!L.isObject(obj))
|
||||
return null;
|
||||
|
||||
ctx = obj;
|
||||
obj = obj[names[i]];
|
||||
}
|
||||
|
||||
if (typeof(obj) == 'function')
|
||||
return obj.call(ctx);
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
var isset = function(val) {
|
||||
if (L.isObject(val) && !dom.elem(val)) {
|
||||
for (var k in val)
|
||||
if (val.hasOwnProperty(k))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
else if (Array.isArray(val)) {
|
||||
return (val.length > 0);
|
||||
}
|
||||
else {
|
||||
return (val !== null && val !== undefined && val !== '' && val !== false);
|
||||
}
|
||||
};
|
||||
|
||||
var parse = function(tokens, text) {
|
||||
if (dom.elem(text)) {
|
||||
tokens.push('<span data-fmt-placeholder="%d"></span>'.format(values.length));
|
||||
values.push(text);
|
||||
}
|
||||
else {
|
||||
tokens.push(String(text).replace(/\\(.)/g, '$1'));
|
||||
}
|
||||
};
|
||||
|
||||
for (var i = 0, last = 0; i <= fmtstr.length; i++) {
|
||||
if (fmtstr.charAt(i) == '%' && fmtstr.charAt(i + 1) == '{') {
|
||||
if (i > last)
|
||||
parse(tokens, fmtstr.substring(last, i));
|
||||
|
||||
var j = i + 1, nest = 0;
|
||||
|
||||
var subexpr = [];
|
||||
|
||||
for (var off = j + 1, esc = false; j <= fmtstr.length; j++) {
|
||||
var ch = fmtstr.charAt(j);
|
||||
|
||||
if (esc) {
|
||||
esc = false;
|
||||
}
|
||||
else if (ch == '\\') {
|
||||
esc = true;
|
||||
}
|
||||
else if (ch == '{') {
|
||||
nest++;
|
||||
}
|
||||
else if (ch == '}') {
|
||||
if (--nest == 0) {
|
||||
subexpr.push(fmtstr.substring(off, j));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (ch == '?' || ch == ':' || ch == '#') {
|
||||
if (nest == 1) {
|
||||
subexpr.push(fmtstr.substring(off, j));
|
||||
subexpr.push(ch);
|
||||
off = j + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var varname = subexpr[0].trim(),
|
||||
op1 = (subexpr[1] != null) ? subexpr[1] : '?',
|
||||
if_set = (subexpr[2] != null && subexpr[2] != '') ? subexpr[2] : '%{' + varname + '}',
|
||||
op2 = (subexpr[3] != null) ? subexpr[3] : ':',
|
||||
if_unset = (subexpr[4] != null) ? subexpr[4] : '';
|
||||
|
||||
/* Invalid expression */
|
||||
if (nest != 0 || subexpr.length > 5 || varname == '') {
|
||||
return fmtstr;
|
||||
}
|
||||
|
||||
/* enumeration */
|
||||
else if (op1 == '#' && subexpr.length == 3) {
|
||||
var items = L.toArray(get(args, varname));
|
||||
|
||||
for (var k = 0; k < items.length; k++) {
|
||||
tokens.push.apply(tokens, this.fmt(if_set, Object.assign({}, args, {
|
||||
first: k == 0,
|
||||
next: k > 0,
|
||||
last: (k + 1) == items.length,
|
||||
item: items[k]
|
||||
}), values));
|
||||
}
|
||||
}
|
||||
|
||||
/* ternary expression */
|
||||
else if (op1 == '?' && op2 == ':' && (subexpr.length == 1 || subexpr.length == 3 || subexpr.length == 5)) {
|
||||
var val = get(args, varname);
|
||||
|
||||
if (subexpr.length == 1)
|
||||
parse(tokens, isset(val) ? val : '');
|
||||
else if (isset(val))
|
||||
tokens.push.apply(tokens, this.fmt(if_set, args, values));
|
||||
else
|
||||
tokens.push.apply(tokens, this.fmt(if_unset, args, values));
|
||||
}
|
||||
|
||||
/* unrecognized command */
|
||||
else {
|
||||
return fmtstr;
|
||||
}
|
||||
|
||||
last = j + 1;
|
||||
i = j;
|
||||
}
|
||||
else if (i >= fmtstr.length) {
|
||||
if (i > last)
|
||||
parse(tokens, fmtstr.substring(last, i));
|
||||
}
|
||||
}
|
||||
|
||||
if (wrap) {
|
||||
var node = E('span', {}, tokens.join('')),
|
||||
repl = node.querySelectorAll('span[data-fmt-placeholder]');
|
||||
|
||||
for (var i = 0; i < repl.length; i++)
|
||||
repl[i].parentNode.replaceChild(values[repl[i].getAttribute('data-fmt-placeholder')], repl[i]);
|
||||
|
||||
return node;
|
||||
}
|
||||
else {
|
||||
return tokens;
|
||||
}
|
||||
},
|
||||
|
||||
map_invert: function(v, fn) {
|
||||
return L.toArray(v).map(function(v) {
|
||||
v = String(v);
|
||||
|
||||
if (fn != null && typeof(v[fn]) == 'function')
|
||||
v = v[fn].call(v);
|
||||
|
||||
return {
|
||||
ival: v,
|
||||
inv: v.charAt(0) == '!',
|
||||
val: v.replace(/^!\s*/, '')
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
lookupProto: lookupProto,
|
||||
|
||||
addDSCPOption: function(s, is_target) {
|
||||
var o = s.taboption(is_target ? 'general' : 'advanced', form.Value, is_target ? 'set_dscp' : 'dscp',
|
||||
is_target ? _('DSCP mark') : _('Match DSCP'),
|
||||
is_target ? _('Apply the given DSCP class or value to established connections.') : _('Matches traffic carrying the specified DSCP marking.'));
|
||||
|
||||
o.modalonly = true;
|
||||
o.rmempty = !is_target;
|
||||
o.placeholder = _('any');
|
||||
|
||||
if (is_target)
|
||||
o.depends('target', 'DSCP');
|
||||
|
||||
o.value('CS0');
|
||||
o.value('CS1');
|
||||
o.value('CS2');
|
||||
o.value('CS3');
|
||||
o.value('CS4');
|
||||
o.value('CS5');
|
||||
o.value('CS6');
|
||||
o.value('CS7');
|
||||
o.value('BE');
|
||||
o.value('AF11');
|
||||
o.value('AF12');
|
||||
o.value('AF13');
|
||||
o.value('AF21');
|
||||
o.value('AF22');
|
||||
o.value('AF23');
|
||||
o.value('AF31');
|
||||
o.value('AF32');
|
||||
o.value('AF33');
|
||||
o.value('AF41');
|
||||
o.value('AF42');
|
||||
o.value('AF43');
|
||||
o.value('EF');
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == '')
|
||||
return is_target ? _('DSCP mark required') : true;
|
||||
|
||||
if (!is_target)
|
||||
value = String(value).replace(/^!\s*/, '');
|
||||
|
||||
var m = value.match(/^(?:CS[0-7]|BE|AF[1234][123]|EF|(0x[0-9a-f]{1,2}|[0-9]{1,2}))$/);
|
||||
|
||||
if (!m || (m[1] != null && +m[1] > 0x3f))
|
||||
return _('Invalid DSCP mark');
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
addMarkOption: function(s, is_target) {
|
||||
var o = s.taboption(is_target ? 'general' : 'advanced', form.Value,
|
||||
(is_target > 1) ? 'set_xmark' : (is_target ? 'set_mark' : 'mark'),
|
||||
(is_target > 1) ? _('XOR mark') : (is_target ? _('Set mark') : _('Match mark')),
|
||||
(is_target > 1) ? _('Apply a bitwise XOR of the given value and the existing mark value on established connections. Format is value[/mask]. If a mask is specified then those bits set in the mask are zeroed out.') :
|
||||
(is_target ? _('Set the given mark value on established connections. Format is value[/mask]. If a mask is specified then only those bits set in the mask are modified.') :
|
||||
_('Matches a specific firewall mark or a range of different marks.')));
|
||||
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
|
||||
if (is_target > 1)
|
||||
o.depends('target', 'MARK_XOR');
|
||||
else if (is_target)
|
||||
o.depends('target', 'MARK_SET');
|
||||
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == '')
|
||||
return is_target ? _('Valid firewall mark required') : true;
|
||||
|
||||
if (!is_target)
|
||||
value = String(value).replace(/^!\s*/, '');
|
||||
|
||||
var m = value.match(/^(0x[0-9a-f]{1,8}|[0-9]{1,10})(?:\/(0x[0-9a-f]{1,8}|[0-9]{1,10}))?$/i);
|
||||
|
||||
if (!m || +m[1] > 0xffffffff || (m[2] != null && +m[2] > 0xffffffff))
|
||||
return _('Expecting: %s').format(_('valid firewall mark'));
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
addLimitOption: function(s) {
|
||||
var o = s.taboption('advanced', form.Value, 'limit',
|
||||
_('Limit matching'),
|
||||
_('Limits traffic matching to the specified rate.'));
|
||||
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('unlimited');
|
||||
o.value('10/second');
|
||||
o.value('60/minute');
|
||||
o.value('3/hour');
|
||||
o.value('500/day');
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == '')
|
||||
return true;
|
||||
|
||||
var m = String(value).toLowerCase().match(/^(?:0x[0-9a-f]{1,8}|[0-9]{1,10})\/([a-z]+)$/),
|
||||
u = ['second', 'minute', 'hour', 'day'],
|
||||
i = 0;
|
||||
|
||||
if (m)
|
||||
for (i = 0; i < u.length; i++)
|
||||
if (u[i].indexOf(m[1]) == 0)
|
||||
break;
|
||||
|
||||
if (!m || i >= u.length)
|
||||
return _('Invalid limit value');
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
addLimitBurstOption: function(s) {
|
||||
var o = s.taboption('advanced', form.Value, 'limit_burst',
|
||||
_('Limit burst'),
|
||||
_('Maximum initial number of packets to match: this number gets recharged by one every time the limit specified above is not reached, up to this number.'));
|
||||
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.placeholder = '5';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends({ limit: null, '!reverse': true });
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
transformHostHints: function(family, hosts) {
|
||||
var choice_values = [], choice_labels = {};
|
||||
|
||||
if (!family || family == 'ipv4') {
|
||||
L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
|
||||
var val = hosts[mac].ipv4,
|
||||
txt = hosts[mac].name || mac;
|
||||
|
||||
choice_values.push(val);
|
||||
choice_labels[val] = E([], [ val, ' (', E('strong', {}, [txt]), ')' ]);
|
||||
});
|
||||
}
|
||||
|
||||
if (!family || family == 'ipv6') {
|
||||
L.sortedKeys(hosts, 'ipv6', 'addr').forEach(function(mac) {
|
||||
var val = hosts[mac].ipv6,
|
||||
txt = hosts[mac].name || mac;
|
||||
|
||||
choice_values.push(val);
|
||||
choice_labels[val] = E([], [ val, ' (', E('strong', {}, [txt]), ')' ]);
|
||||
});
|
||||
}
|
||||
|
||||
return [choice_values, choice_labels];
|
||||
},
|
||||
|
||||
updateHostHints: function(map, section_id, option, family, hosts) {
|
||||
var opt = map.lookupOption(option, section_id)[0].getUIElement(section_id),
|
||||
choices = this.transformHostHints(family, hosts);
|
||||
|
||||
opt.clearChoices();
|
||||
opt.addChoices(choices[0], choices[1]);
|
||||
},
|
||||
|
||||
addIPOption: function(s, tab, name, label, description, family, hosts, multiple) {
|
||||
var o = s.taboption(tab, multiple ? form.DynamicList : form.Value, name, label, description);
|
||||
|
||||
o.modalonly = true;
|
||||
o.datatype = 'list(neg(ipmask))';
|
||||
o.placeholder = multiple ? _('-- add IP --') : _('any');
|
||||
|
||||
if (family != null) {
|
||||
var choices = this.transformHostHints(family, hosts);
|
||||
|
||||
for (var i = 0; i < choices[0].length; i++)
|
||||
o.value(choices[0][i], choices[1][choices[0][i]]);
|
||||
}
|
||||
|
||||
/* force combobox rendering */
|
||||
o.transformChoices = function() {
|
||||
return this.super('transformChoices', []) || {};
|
||||
};
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
addLocalIPOption: function(s, tab, name, label, description, devices) {
|
||||
var o = s.taboption(tab, form.Value, name, label, description);
|
||||
|
||||
o.modalonly = true;
|
||||
o.datatype = 'ip4addr("nomask")';
|
||||
o.placeholder = _('any');
|
||||
|
||||
L.sortedKeys(devices, 'name').forEach(function(dev) {
|
||||
var ip4addrs = devices[dev].ipaddrs;
|
||||
|
||||
if (!L.isObject(devices[dev].flags) || !Array.isArray(ip4addrs) || devices[dev].flags.loopback)
|
||||
return;
|
||||
|
||||
for (var i = 0; i < ip4addrs.length; i++) {
|
||||
if (!L.isObject(ip4addrs[i]) || !ip4addrs[i].address)
|
||||
continue;
|
||||
|
||||
o.value(ip4addrs[i].address, E([], [
|
||||
ip4addrs[i].address, ' (', E('strong', {}, [dev]), ')'
|
||||
]));
|
||||
}
|
||||
});
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
addMACOption: function(s, tab, name, label, description, hosts) {
|
||||
var o = s.taboption(tab, form.DynamicList, name, label, description);
|
||||
|
||||
o.modalonly = true;
|
||||
o.datatype = 'list(macaddr)';
|
||||
o.placeholder = _('-- add MAC --');
|
||||
|
||||
L.sortedKeys(hosts).forEach(function(mac) {
|
||||
o.value(mac, E([], [ mac, ' (', E('strong', {}, [
|
||||
hosts[mac].name || hosts[mac].ipv4 || hosts[mac].ipv6 || '?'
|
||||
]), ')' ]));
|
||||
});
|
||||
|
||||
return o;
|
||||
},
|
||||
|
||||
CBIProtocolSelect: form.MultiValue.extend({
|
||||
__name__: 'CBI.ProtocolSelect',
|
||||
|
||||
addChoice: function(value, label) {
|
||||
if (!Array.isArray(this.keylist) || this.keylist.indexOf(value) == -1)
|
||||
this.value(value, label);
|
||||
},
|
||||
|
||||
load: function(section_id) {
|
||||
var cfgvalue = L.toArray(this.super('load', [section_id]) || this.default).sort();
|
||||
|
||||
['all', 'tcp', 'udp', 'icmp'].concat(cfgvalue).forEach(L.bind(function(value) {
|
||||
switch (value) {
|
||||
case 'all':
|
||||
case 'any':
|
||||
case '*':
|
||||
this.addChoice('all', _('Any'));
|
||||
break;
|
||||
|
||||
case 'tcpudp':
|
||||
this.addChoice('tcp', 'TCP');
|
||||
this.addChoice('udp', 'UDP');
|
||||
break;
|
||||
|
||||
default:
|
||||
var m = value.match(/^(0x[0-9a-f]{1,2}|[0-9]{1,3})$/),
|
||||
p = lookupProto(m ? +m[1] : value);
|
||||
|
||||
this.addChoice(p[2], p[1]);
|
||||
break;
|
||||
}
|
||||
}, this));
|
||||
|
||||
return cfgvalue;
|
||||
},
|
||||
|
||||
renderWidget: function(section_id, option_index, cfgvalue) {
|
||||
var value = (cfgvalue != null) ? cfgvalue : this.default,
|
||||
choices = this.transformChoices();
|
||||
|
||||
var widget = new ui.Dropdown(L.toArray(value), choices, {
|
||||
id: this.cbid(section_id),
|
||||
sort: this.keylist,
|
||||
multiple: true,
|
||||
optional: false,
|
||||
display_items: 10,
|
||||
dropdown_items: -1,
|
||||
create: true,
|
||||
validate: function(value) {
|
||||
var v = L.toArray(value);
|
||||
|
||||
for (var i = 0; i < v.length; i++) {
|
||||
if (v[i] == 'all')
|
||||
continue;
|
||||
|
||||
var m = v[i].match(/^(0x[0-9a-f]{1,2}|[0-9]{1,3})$/);
|
||||
|
||||
if (m ? (+m[1] > 255) : (lookupProto(v[i])[0] == -1))
|
||||
return _('Unrecognized protocol');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
widget.createChoiceElement = function(sb, value) {
|
||||
var m = value.match(/^(0x[0-9a-f]{1,2}|[0-9]{1,3})$/),
|
||||
p = lookupProto(lookupProto(m ? +m[1] : value)[0]);
|
||||
|
||||
return ui.Dropdown.prototype.createChoiceElement.call(this, sb, p[2], p[1]);
|
||||
};
|
||||
|
||||
widget.createItems = function(sb, value) {
|
||||
var values = L.toArray(value).map(function(value) {
|
||||
var m = value.match(/^(0x[0-9a-f]{1,2}|[0-9]{1,3})$/),
|
||||
p = lookupProto(m ? +m[1] : value);
|
||||
|
||||
return (p[0] > -1) ? p[2] : value;
|
||||
});
|
||||
|
||||
return ui.Dropdown.prototype.createItems.call(this, sb, values.join(' '));
|
||||
};
|
||||
|
||||
widget.toggleItem = function(sb, li) {
|
||||
var value = li.getAttribute('data-value'),
|
||||
toggleFn = ui.Dropdown.prototype.toggleItem;
|
||||
|
||||
toggleFn.call(this, sb, li);
|
||||
|
||||
if (value == 'all') {
|
||||
var items = li.parentNode.querySelectorAll('li[data-value]');
|
||||
|
||||
for (var j = 0; j < items.length; j++)
|
||||
if (items[j] !== li)
|
||||
toggleFn.call(this, sb, items[j], false);
|
||||
}
|
||||
else {
|
||||
toggleFn.call(this, sb, li.parentNode.querySelector('li[data-value="all"]'), false);
|
||||
}
|
||||
};
|
||||
|
||||
return widget.render();
|
||||
}
|
||||
}),
|
||||
|
||||
checkLegacySNAT: function() {
|
||||
var redirects = uci.sections('firewall', 'redirect');
|
||||
|
||||
for (var i = 0; i < redirects.length; i++)
|
||||
if ((redirects[i]['target'] || '').toLowerCase() == 'snat')
|
||||
return true;
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
handleMigration: function(ev) {
|
||||
var redirects = uci.sections('firewall', 'redirect'),
|
||||
tasks = [];
|
||||
|
||||
var mapping = {
|
||||
dest: 'src',
|
||||
reflection: null,
|
||||
reflection_src: null,
|
||||
src_dip: 'snat_ip',
|
||||
src_dport: 'snat_port',
|
||||
src: null
|
||||
};
|
||||
|
||||
for (var i = 0; i < redirects.length; i++) {
|
||||
if ((redirects[i]['target'] || '').toLowerCase() != 'snat')
|
||||
continue;
|
||||
|
||||
var sid = uci.add('firewall', 'nat');
|
||||
|
||||
for (var opt in redirects[i]) {
|
||||
if (opt.charAt(0) == '.')
|
||||
continue;
|
||||
|
||||
if (mapping[opt] === null)
|
||||
continue;
|
||||
|
||||
uci.set('firewall', sid, mapping[opt] || opt, redirects[i][opt]);
|
||||
}
|
||||
|
||||
uci.remove('firewall', redirects[i]['.name']);
|
||||
}
|
||||
|
||||
return uci.save()
|
||||
.then(L.bind(ui.changes.init, ui.changes))
|
||||
.then(L.bind(ui.changes.apply, ui.changes));
|
||||
},
|
||||
|
||||
renderMigration: function() {
|
||||
ui.showModal(_('Firewall configuration migration'), [
|
||||
E('p', _('The existing firewall configuration needs to be changed for LuCI to function properly.')),
|
||||
E('p', _('Upon pressing "Continue", "redirect" sections with target "SNAT" will be converted to "nat" sections and the firewall will be restarted to apply the updated configuration.')),
|
||||
E('div', { 'class': 'right' },
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-action important',
|
||||
'click': ui.createHandlerFn(this, 'handleMigration')
|
||||
}, _('Continue')))
|
||||
]);
|
||||
},
|
||||
});
|
|
@ -0,0 +1,33 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require fs';
|
||||
'require ui';
|
||||
|
||||
return view.extend({
|
||||
load: function() {
|
||||
return L.resolveDefault(fs.read('/etc/firewall.user'), '');
|
||||
},
|
||||
|
||||
handleSave: function(ev) {
|
||||
var value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n';
|
||||
|
||||
return fs.write('/etc/firewall.user', value).then(function(rc) {
|
||||
document.querySelector('textarea').value = value;
|
||||
ui.addNotification(null, E('p', _('Contents have been saved.')), 'info');
|
||||
fs.exec('/etc/init.d/firewall', ['restart']);
|
||||
}).catch(function(e) {
|
||||
ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message)));
|
||||
});
|
||||
},
|
||||
|
||||
render: function(fwuser) {
|
||||
return E([
|
||||
E('h2', _('Firewall - Custom Rules')),
|
||||
E('p', {}, _('Custom rules allow you to execute arbitrary iptables commands which are not otherwise covered by the firewall framework. The commands are executed after each firewall restart, right after the default ruleset has been loaded.')),
|
||||
E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 10 }, [ fwuser != null ? fwuser : '' ]))
|
||||
]);
|
||||
},
|
||||
|
||||
handleSaveApply: null,
|
||||
handleReset: null
|
||||
});
|
|
@ -0,0 +1,291 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require ui';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require form';
|
||||
'require firewall as fwmodel';
|
||||
'require tools.firewall as fwtool';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
function rule_proto_txt(s, ctHelpers) {
|
||||
var proto = L.toArray(uci.get('firewall', s, 'proto')).filter(function(p) {
|
||||
return (p != '*' && p != 'any' && p != 'all');
|
||||
}).map(function(p) {
|
||||
var pr = fwtool.lookupProto(p);
|
||||
return {
|
||||
num: pr[0],
|
||||
name: pr[1],
|
||||
types: (pr[0] == 1 || pr[0] == 58) ? L.toArray(uci.get('firewall', s, 'icmp_type')) : null
|
||||
};
|
||||
});
|
||||
|
||||
m = String(uci.get('firewall', s, 'helper') || '').match(/^(!\s*)?(\S+)$/);
|
||||
var h = m ? {
|
||||
val: m[0].toUpperCase(),
|
||||
inv: m[1],
|
||||
name: (ctHelpers.filter(function(ctH) { return ctH.name.toLowerCase() == m[2].toLowerCase() })[0] || {}).description
|
||||
} : null;
|
||||
|
||||
m = String(uci.get('firewall', s, 'mark')).match(/^(!\s*)?(0x[0-9a-f]{1,8}|[0-9]{1,10})(?:\/(0x[0-9a-f]{1,8}|[0-9]{1,10}))?$/i);
|
||||
var f = m ? {
|
||||
val: m[0].toUpperCase().replace(/X/g, 'x'),
|
||||
inv: m[1],
|
||||
num: '0x%02X'.format(+m[2]),
|
||||
mask: m[3] ? '0x%02X'.format(+m[3]) : null
|
||||
} : null;
|
||||
|
||||
return fwtool.fmt(_('Incoming IPv4%{proto?, protocol %{proto#%{next?, }%{item.types?<var class="cbi-tooltip-container">%{item.name}<span class="cbi-tooltip">ICMP with types %{item.types#%{next?, }<var>%{item}</var>}</span></var>:<var>%{item.name}</var>}}}%{mark?, mark <var%{mark.inv? data-tooltip="Match fwmarks except %{mark.num}%{mark.mask? with mask %{mark.mask}}.":%{mark.mask? data-tooltip="Mask fwmark value with %{mark.mask} before compare."}}>%{mark.val}</var>}%{helper?, helper %{helper.inv?<var data-tooltip="Match any helper except "%{helper.name}"">%{helper.val}</var>:<var data-tooltip="%{helper.name}">%{helper.val}</var>}}'), {
|
||||
proto: proto,
|
||||
helper: h,
|
||||
mark: f
|
||||
});
|
||||
}
|
||||
|
||||
function rule_src_txt(s, hosts) {
|
||||
var z = uci.get('firewall', s, 'src');
|
||||
|
||||
return fwtool.fmt(_('From %{src}%{src_ip?, IP %{src_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{src_port?, port %{src_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}%{src_mac?, MAC %{src_mac#%{next?, }<var%{item.inv? data-tooltip="Match MACs except %{item.val}%{item.hint.name? a.k.a. %{item.hint.name}}.":%{item.hint.name? data-tooltip="%{item.hint.name}"}}>%{item.ival}</var>}}'), {
|
||||
src: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName((z && z != '*') ? z : null) }, [(z == '*') ? E('em', _('any zone')) : (z || E('em', _('this device')))]),
|
||||
src_ip: fwtool.map_invert(uci.get('firewall', s, 'src_ip'), 'toLowerCase'),
|
||||
src_mac: fwtool.map_invert(uci.get('firewall', s, 'src_mac'), 'toUpperCase').map(function(v) { return Object.assign(v, { hint: hosts[v.val] }) }),
|
||||
src_port: fwtool.map_invert(uci.get('firewall', s, 'src_port'))
|
||||
});
|
||||
}
|
||||
|
||||
function rule_dest_txt(s) {
|
||||
return fwtool.fmt(_('To %{dest}%{dest_ip?, IP %{dest_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{dest_port?, port %{dest_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}'), {
|
||||
dest: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName(null) }, [E('em', _('this device'))]),
|
||||
dest_ip: fwtool.map_invert(uci.get('firewall', s, 'src_dip'), 'toLowerCase'),
|
||||
dest_port: fwtool.map_invert(uci.get('firewall', s, 'src_dport'))
|
||||
});
|
||||
}
|
||||
|
||||
function rule_limit_txt(s) {
|
||||
var m = String(uci.get('firewall', s, 'limit')).match(/^(\d+)\/([smhd])\w*$/i),
|
||||
l = m ? {
|
||||
num: +m[1],
|
||||
unit: ({ s: _('second'), m: _('minute'), h: _('hour'), d: _('day') })[m[2]],
|
||||
burst: uci.get('firewall', s, 'limit_burst')
|
||||
} : null;
|
||||
|
||||
if (!l)
|
||||
return '';
|
||||
|
||||
return fwtool.fmt(_('Limit matching to <var>%{limit.num}</var> packets per <var>%{limit.unit}</var>%{limit.burst? burst <var>%{limit.burst}</var>}'), { limit: l });
|
||||
}
|
||||
|
||||
function rule_target_txt(s) {
|
||||
var z = uci.get('firewall', s, 'dest');
|
||||
|
||||
return fwtool.fmt(_('<var data-tooltip="DNAT">Forward</var> to %{dest}%{dest_ip? IP <var>%{dest_ip}</var>}%{dest_port? port <var>%{dest_port}</var>}'), {
|
||||
dest: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName((z && z != '*') ? z : null) }, [(z == '*') ? E('em', _('any zone')) : (z || E('em', _('this device')))]),
|
||||
dest_ip: (uci.get('firewall', s, 'dest_ip') || '').toLowerCase(),
|
||||
dest_port: uci.get('firewall', s, 'dest_port')
|
||||
});
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
callHostHints: rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getHostHints',
|
||||
expect: { '': {} }
|
||||
}),
|
||||
|
||||
callConntrackHelpers: rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'getConntrackHelpers',
|
||||
expect: { result: [] }
|
||||
}),
|
||||
|
||||
callNetworkDevices: rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getNetworkDevices',
|
||||
expect: { '': {} }
|
||||
}),
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
this.callHostHints(),
|
||||
this.callConntrackHelpers(),
|
||||
this.callNetworkDevices(),
|
||||
uci.load('firewall')
|
||||
]);
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
if (fwtool.checkLegacySNAT())
|
||||
return fwtool.renderMigration();
|
||||
else
|
||||
return this.renderForwards(data);
|
||||
},
|
||||
|
||||
renderForwards: function(data) {
|
||||
var hosts = data[0],
|
||||
ctHelpers = data[1],
|
||||
devs = data[2],
|
||||
m, s, o;
|
||||
|
||||
m = new form.Map('firewall', _('Firewall - Port Forwards'),
|
||||
_('Port forwarding allows remote computers on the Internet to connect to a specific computer or service within the private LAN.'));
|
||||
|
||||
s = m.section(form.GridSection, 'redirect', _('Port Forwards'));
|
||||
s.addremove = true;
|
||||
s.anonymous = true;
|
||||
s.sortable = true;
|
||||
|
||||
s.tab('general', _('General Settings'));
|
||||
s.tab('advanced', _('Advanced Settings'));
|
||||
|
||||
s.filter = function(section_id) {
|
||||
return (uci.get('firewall', section_id, 'target') != 'SNAT');
|
||||
};
|
||||
|
||||
s.sectiontitle = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'name') || _('Unnamed forward');
|
||||
};
|
||||
|
||||
s.handleAdd = function(ev) {
|
||||
var config_name = this.uciconfig || this.map.config,
|
||||
section_id = uci.add(config_name, this.sectiontype);
|
||||
|
||||
uci.set(config_name, section_id, 'target', 'DNAT');
|
||||
|
||||
this.addedSection = section_id;
|
||||
this.renderMoreOptionsModal(section_id);
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.Value, 'name', _('Name'));
|
||||
o.placeholder = _('Unnamed forward');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.option(form.DummyValue, '_match', _('Match'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return E('small', [
|
||||
rule_proto_txt(s, ctHelpers), E('br'),
|
||||
rule_src_txt(s, hosts), E('br'),
|
||||
rule_dest_txt(s), E('br'),
|
||||
rule_limit_txt(s)
|
||||
]);
|
||||
};
|
||||
|
||||
o = s.option(form.ListValue, '_dest', _('Action'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return E('small', [
|
||||
rule_target_txt(s)
|
||||
]);
|
||||
};
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enable'));
|
||||
o.modalonly = false;
|
||||
o.default = o.enabled;
|
||||
o.editable = true;
|
||||
|
||||
o = s.taboption('general', fwtool.CBIProtocolSelect, 'proto', _('Protocol'));
|
||||
o.modalonly = true;
|
||||
o.default = 'tcp udp';
|
||||
|
||||
o = s.taboption('general', widgets.ZoneSelect, 'src', _('Source zone'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.nocreate = true;
|
||||
o.default = 'wan';
|
||||
|
||||
o = fwtool.addMACOption(s, 'advanced', 'src_mac', _('Source MAC address'),
|
||||
_('Only match incoming traffic from these MACs.'), hosts);
|
||||
o.rmempty = true;
|
||||
o.datatype = 'list(neg(macaddr))';
|
||||
|
||||
o = fwtool.addIPOption(s, 'advanced', 'src_ip', _('Source IP address'),
|
||||
_('Only match incoming traffic from this IP or range.'), 'ipv4', hosts);
|
||||
o.rmempty = true;
|
||||
o.datatype = 'neg(ipmask4)';
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'src_port', _('Source port'),
|
||||
_('Only match incoming traffic originating from the given source port or port range on the client host'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.datatype = 'neg(portrange)';
|
||||
o.placeholder = _('any');
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = fwtool.addLocalIPOption(s, 'advanced', 'src_dip', _('External IP address'),
|
||||
_('Only match incoming traffic directed at the given IP address.'), devs);
|
||||
o.datatype = 'neg(ipmask4)';
|
||||
o.rmempty = true;
|
||||
|
||||
o = s.taboption('general', form.Value, 'src_dport', _('External port'),
|
||||
_('Match incoming traffic directed at the given destination port or port range on this host'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.datatype = 'neg(portrange)';
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('general', widgets.ZoneSelect, 'dest', _('Internal zone'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.nocreate = true;
|
||||
o.default = 'lan';
|
||||
|
||||
o = fwtool.addIPOption(s, 'general', 'dest_ip', _('Internal IP address'),
|
||||
_('Redirect matched incoming traffic to the specified internal host'), 'ipv4', hosts);
|
||||
o.rmempty = true;
|
||||
o.datatype = 'ipmask4';
|
||||
|
||||
o = s.taboption('general', form.Value, 'dest_port', _('Internal port'),
|
||||
_('Redirect matched incoming traffic to the given port on the internal host'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('any');
|
||||
o.datatype = 'portrange';
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('advanced', form.Flag, 'reflection', _('Enable NAT Loopback'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.default = o.enabled;
|
||||
|
||||
o = s.taboption('advanced', form.ListValue, 'reflection_src', _('Loopback source IP'), _('Specifies whether to use the external or the internal IP address for reflected traffic.'));
|
||||
o.modalonly = true;
|
||||
o.depends('reflection', '1');
|
||||
o.value('internal', _('Use internal IP address'));
|
||||
o.value('external', _('Use external IP address'));
|
||||
o.write = function(section_id, value) {
|
||||
uci.set('firewall', section_id, 'reflection_src', (value != 'internal') ? value : null);
|
||||
};
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'helper', _('Match helper'), _('Match traffic using the specified connection tracking helper.'));
|
||||
o.modalonly = true;
|
||||
o.placeholder = _('any');
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
o.value(ctHelpers[i].name, '%s (%s)'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase()));
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == '' || value == null)
|
||||
return true;
|
||||
|
||||
value = value.replace(/^!\s*/, '');
|
||||
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
if (value == ctHelpers[i].name)
|
||||
return true;
|
||||
|
||||
return _('Unknown or not installed conntrack helper "%s"').format(value);
|
||||
};
|
||||
|
||||
fwtool.addMarkOption(s, false);
|
||||
fwtool.addLimitOption(s);
|
||||
fwtool.addLimitBurstOption(s);
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'extra', _('Extra arguments'),
|
||||
_('Passes additional arguments to iptables. Use with care!'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
|
@ -0,0 +1,475 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require ui';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require form';
|
||||
'require firewall as fwmodel';
|
||||
'require tools.firewall as fwtool';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
function rule_proto_txt(s, ctHelpers) {
|
||||
var f = (uci.get('firewall', s, 'family') || '').toLowerCase().replace(/^(?:any|\*)$/, '');
|
||||
|
||||
var proto = L.toArray(uci.get('firewall', s, 'proto')).filter(function(p) {
|
||||
return (p != '*' && p != 'any' && p != 'all');
|
||||
}).map(function(p) {
|
||||
var pr = fwtool.lookupProto(p);
|
||||
return {
|
||||
num: pr[0],
|
||||
name: pr[1],
|
||||
types: (pr[0] == 1 || pr[0] == 58) ? L.toArray(uci.get('firewall', s, 'icmp_type')) : null
|
||||
};
|
||||
});
|
||||
|
||||
m = String(uci.get('firewall', s, 'helper') || '').match(/^(!\s*)?(\S+)$/);
|
||||
var h = m ? {
|
||||
val: m[0].toUpperCase(),
|
||||
inv: m[1],
|
||||
name: (ctHelpers.filter(function(ctH) { return ctH.name.toLowerCase() == m[2].toLowerCase() })[0] || {}).description
|
||||
} : null;
|
||||
|
||||
m = String(uci.get('firewall', s, 'mark')).match(/^(!\s*)?(0x[0-9a-f]{1,8}|[0-9]{1,10})(?:\/(0x[0-9a-f]{1,8}|[0-9]{1,10}))?$/i);
|
||||
var w = m ? {
|
||||
val: m[0].toUpperCase().replace(/X/g, 'x'),
|
||||
inv: m[1],
|
||||
num: '0x%02X'.format(+m[2]),
|
||||
mask: m[3] ? '0x%02X'.format(+m[3]) : null
|
||||
} : null;
|
||||
|
||||
m = String(uci.get('firewall', s, 'dscp')).match(/^(!\s*)?(?:(CS[0-7]|BE|AF[1234][123]|EF)|(0x[0-9a-f]{1,2}|[0-9]{1,2}))$/);
|
||||
var d = m ? {
|
||||
val: m[0],
|
||||
inv: m[1],
|
||||
name: m[2],
|
||||
num: m[3] ? '0x%02X'.format(+m[3]) : null
|
||||
} : null;
|
||||
|
||||
return fwtool.fmt(_('%{src?%{dest?Forwarded:Incoming}:Outgoing} %{ipv6?%{ipv4?<var>IPv4</var> and <var>IPv6</var>:<var>IPv6</var>}:<var>IPv4</var>}%{proto?, protocol %{proto#%{next?, }%{item.types?<var class="cbi-tooltip-container">%{item.name}<span class="cbi-tooltip">ICMP with types %{item.types#%{next?, }<var>%{item}</var>}</span></var>:<var>%{item.name}</var>}}}%{mark?, mark <var%{mark.inv? data-tooltip="Match fwmarks except %{mark.num}%{mark.mask? with mask %{mark.mask}}.":%{mark.mask? data-tooltip="Mask fwmark value with %{mark.mask} before compare."}}>%{mark.val}</var>}%{dscp?, DSCP %{dscp.inv?<var data-tooltip="Match DSCP classifications except %{dscp.num?:%{dscp.name}}">%{dscp.val}</var>:<var>%{dscp.val}</var>}}%{helper?, helper %{helper.inv?<var data-tooltip="Match any helper except "%{helper.name}"">%{helper.val}</var>:<var data-tooltip="%{helper.name}">%{helper.val}</var>}}'), {
|
||||
ipv4: (!f || f == 'ipv4'),
|
||||
ipv6: (!f || f == 'ipv6'),
|
||||
src: uci.get('firewall', s, 'src'),
|
||||
dest: uci.get('firewall', s, 'dest'),
|
||||
proto: proto,
|
||||
helper: h,
|
||||
mark: w,
|
||||
dscp: d
|
||||
});
|
||||
}
|
||||
|
||||
function rule_src_txt(s, hosts) {
|
||||
var z = uci.get('firewall', s, 'src'),
|
||||
d = (uci.get('firewall', s, 'direction') == 'in') ? uci.get('firewall', s, 'device') : null;
|
||||
|
||||
return fwtool.fmt(_('From %{src}%{src_device?, interface <var>%{src_device}</var>}%{src_ip?, IP %{src_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{src_port?, port %{src_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}%{src_mac?, MAC %{src_mac#%{next?, }<var%{item.inv? data-tooltip="Match MACs except %{item.val}%{item.hint.name? a.k.a. %{item.hint.name}}.":%{item.hint.name? data-tooltip="%{item.hint.name}"}}>%{item.ival}</var>}}'), {
|
||||
src: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName((z && z != '*') ? z : null) }, [(z == '*') ? E('em', _('any zone')) : (z || E('em', _('this device')))]),
|
||||
src_ip: fwtool.map_invert(uci.get('firewall', s, 'src_ip'), 'toLowerCase'),
|
||||
src_mac: fwtool.map_invert(uci.get('firewall', s, 'src_mac'), 'toUpperCase').map(function(v) { return Object.assign(v, { hint: hosts[v.val] }) }),
|
||||
src_port: fwtool.map_invert(uci.get('firewall', s, 'src_port')),
|
||||
src_device: d
|
||||
});
|
||||
}
|
||||
|
||||
function rule_dest_txt(s) {
|
||||
var z = uci.get('firewall', s, 'dest'),
|
||||
d = (uci.get('firewall', s, 'direction') == 'out') ? uci.get('firewall', s, 'device') : null;
|
||||
|
||||
return fwtool.fmt(_('To %{dest}%{dest_device?, interface <var>%{dest_device}</var>}%{dest_ip?, IP %{dest_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{dest_port?, port %{dest_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}'), {
|
||||
dest: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName((z && z != '*') ? z : null) }, [(z == '*') ? E('em', _('any zone')) : (z || E('em', _('this device')))]),
|
||||
dest_ip: fwtool.map_invert(uci.get('firewall', s, 'dest_ip'), 'toLowerCase'),
|
||||
dest_port: fwtool.map_invert(uci.get('firewall', s, 'dest_port')),
|
||||
dest_device: d
|
||||
});
|
||||
}
|
||||
|
||||
function rule_limit_txt(s) {
|
||||
var m = String(uci.get('firewall', s, 'limit')).match(/^(\d+)\/([smhd])\w*$/i),
|
||||
l = m ? {
|
||||
num: +m[1],
|
||||
unit: ({ s: _('second'), m: _('minute'), h: _('hour'), d: _('day') })[m[2]],
|
||||
burst: uci.get('firewall', s, 'limit_burst')
|
||||
} : null;
|
||||
|
||||
if (!l)
|
||||
return '';
|
||||
|
||||
return fwtool.fmt(_('Limit matching to <var>%{limit.num}</var> packets per <var>%{limit.unit}</var>%{limit.burst? burst <var>%{limit.burst}</var>}'), { limit: l });
|
||||
}
|
||||
|
||||
function rule_target_txt(s, ctHelpers) {
|
||||
var t = uci.get('firewall', s, 'target'),
|
||||
h = (uci.get('firewall', s, 'set_helper') || '').toUpperCase(),
|
||||
s = {
|
||||
target: t,
|
||||
src: uci.get('firewall', s, 'src'),
|
||||
dest: uci.get('firewall', s, 'dest'),
|
||||
set_helper: h,
|
||||
set_mark: uci.get('firewall', s, 'set_mark'),
|
||||
set_xmark: uci.get('firewall', s, 'set_xmark'),
|
||||
set_dscp: uci.get('firewall', s, 'set_dscp'),
|
||||
helper_name: (ctHelpers.filter(function(ctH) { return ctH.name.toUpperCase() == h })[0] || {}).description
|
||||
};
|
||||
|
||||
switch (t) {
|
||||
case 'DROP':
|
||||
return fwtool.fmt(_('<var data-tooltip="DROP">Drop</var> %{src?%{dest?forward:input}:output}'), s);
|
||||
|
||||
case 'ACCEPT':
|
||||
return fwtool.fmt(_('<var data-tooltip="ACCEPT">Accept</var> %{src?%{dest?forward:input}:output}'), s);
|
||||
|
||||
case 'REJECT':
|
||||
return fwtool.fmt(_('<var data-tooltip="REJECT">Reject</var> %{src?%{dest?forward:input}:output}'), s);
|
||||
|
||||
case 'NOTRACK':
|
||||
return fwtool.fmt(_('<var data-tooltip="NOTRACK">Do not track</var> %{src?%{dest?forward:input}:output}'), s);
|
||||
|
||||
case 'HELPER':
|
||||
return fwtool.fmt(_('<var data-tooltip="HELPER">Assign conntrack</var> helper <var%{helper_name? data-tooltip="%{helper_name}"}>%{set_helper}</var>'), s);
|
||||
|
||||
case 'MARK':
|
||||
return fwtool.fmt(_('<var data-tooltip="MARK">%{set_mark?Assign:XOR}</var> firewall mark <var>%{set_mark?:%{set_xmark}}</var>'), s);
|
||||
|
||||
case 'DSCP':
|
||||
return fwtool.fmt(_('<var data-tooltip="DSCP">Assign DSCP</var> classification <var>%{set_dscp}</var>'), s);
|
||||
|
||||
default:
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
callHostHints: rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getHostHints',
|
||||
expect: { '': {} }
|
||||
}),
|
||||
|
||||
callConntrackHelpers: rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'getConntrackHelpers',
|
||||
expect: { result: [] }
|
||||
}),
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
this.callHostHints(),
|
||||
this.callConntrackHelpers(),
|
||||
uci.load('firewall')
|
||||
]);
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
if (fwtool.checkLegacySNAT())
|
||||
return fwtool.renderMigration();
|
||||
else
|
||||
return this.renderRules(data);
|
||||
},
|
||||
|
||||
renderRules: function(data) {
|
||||
var hosts = data[0],
|
||||
ctHelpers = data[1],
|
||||
m, s, o;
|
||||
|
||||
m = new form.Map('firewall', _('Firewall - Traffic Rules'),
|
||||
_('Traffic rules define policies for packets traveling between different zones, for example to reject traffic between certain hosts or to open WAN ports on the router.'));
|
||||
|
||||
s = m.section(form.GridSection, 'rule', _('Traffic Rules'));
|
||||
s.addremove = true;
|
||||
s.anonymous = true;
|
||||
s.sortable = true;
|
||||
|
||||
s.tab('general', _('General Settings'));
|
||||
s.tab('advanced', _('Advanced Settings'));
|
||||
s.tab('timed', _('Time Restrictions'));
|
||||
|
||||
s.filter = function(section_id) {
|
||||
return (uci.get('firewall', section_id, 'target') != 'SNAT');
|
||||
};
|
||||
|
||||
s.sectiontitle = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'name') || _('Unnamed rule');
|
||||
};
|
||||
|
||||
s.handleAdd = function(ev) {
|
||||
var config_name = this.uciconfig || this.map.config,
|
||||
section_id = uci.add(config_name, this.sectiontype),
|
||||
opt1, opt2;
|
||||
|
||||
for (var i = 0; i < this.children.length; i++)
|
||||
if (this.children[i].option == 'src')
|
||||
opt1 = this.children[i];
|
||||
else if (this.children[i].option == 'dest')
|
||||
opt2 = this.children[i];
|
||||
|
||||
opt1.default = 'wan';
|
||||
opt2.default = 'lan';
|
||||
|
||||
this.addedSection = section_id;
|
||||
this.renderMoreOptionsModal(section_id);
|
||||
|
||||
delete opt1.default;
|
||||
delete opt2.default;
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.Value, 'name', _('Name'));
|
||||
o.placeholder = _('Unnamed rule');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.option(form.DummyValue, '_match', _('Match'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return E('small', [
|
||||
rule_proto_txt(s, ctHelpers), E('br'),
|
||||
rule_src_txt(s, hosts), E('br'),
|
||||
rule_dest_txt(s), E('br'),
|
||||
rule_limit_txt(s)
|
||||
]);
|
||||
};
|
||||
|
||||
o = s.option(form.ListValue, '_target', _('Action'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return rule_target_txt(s, ctHelpers);
|
||||
};
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enable'));
|
||||
o.modalonly = false;
|
||||
o.default = o.enabled;
|
||||
o.editable = true;
|
||||
|
||||
|
||||
o = s.taboption('advanced', form.ListValue, 'direction', _('Match device'));
|
||||
o.modalonly = true;
|
||||
o.value('', _('unspecified'));
|
||||
o.value('in', _('Inbound device'));
|
||||
o.value('out', _('Outbound device'));
|
||||
o.cfgvalue = function(section_id) {
|
||||
var val = uci.get('firewall', section_id, 'direction');
|
||||
switch (val) {
|
||||
case 'in':
|
||||
case 'ingress':
|
||||
return 'in';
|
||||
|
||||
case 'out':
|
||||
case 'egress':
|
||||
return 'out';
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
o = s.taboption('advanced', widgets.DeviceSelect, 'device', _('Device name'),
|
||||
_('Specifies whether to tie this traffic rule to a specific inbound or outbound network device.'));
|
||||
o.modalonly = true;
|
||||
o.noaliases = true;
|
||||
o.rmempty = false;
|
||||
o.depends('direction', 'in');
|
||||
o.depends('direction', 'out');
|
||||
|
||||
o = s.taboption('advanced', form.ListValue, 'family', _('Restrict to address family'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.value('', _('IPv4 and IPv6'));
|
||||
o.value('ipv4', _('IPv4 only'));
|
||||
o.value('ipv6', _('IPv6 only'));
|
||||
o.validate = function(section_id, value) {
|
||||
fwtool.updateHostHints(this.map, section_id, 'src_ip', value, hosts);
|
||||
fwtool.updateHostHints(this.map, section_id, 'dest_ip', value, hosts);
|
||||
return true;
|
||||
};
|
||||
|
||||
o = s.taboption('general', fwtool.CBIProtocolSelect, 'proto', _('Protocol'));
|
||||
o.modalonly = true;
|
||||
o.default = 'tcp udp';
|
||||
|
||||
o = s.taboption('advanced', form.MultiValue, 'icmp_type', _('Match ICMP type'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.custom = true;
|
||||
o.cast = 'table';
|
||||
o.placeholder = _('any');
|
||||
o.value('', 'any');
|
||||
o.value('address-mask-reply');
|
||||
o.value('address-mask-request');
|
||||
o.value('communication-prohibited');
|
||||
o.value('destination-unreachable');
|
||||
o.value('echo-reply');
|
||||
o.value('echo-request');
|
||||
o.value('fragmentation-needed');
|
||||
o.value('host-precedence-violation');
|
||||
o.value('host-prohibited');
|
||||
o.value('host-redirect');
|
||||
o.value('host-unknown');
|
||||
o.value('host-unreachable');
|
||||
o.value('ip-header-bad');
|
||||
o.value('neighbour-advertisement');
|
||||
o.value('neighbour-solicitation');
|
||||
o.value('network-prohibited');
|
||||
o.value('network-redirect');
|
||||
o.value('network-unknown');
|
||||
o.value('network-unreachable');
|
||||
o.value('parameter-problem');
|
||||
o.value('port-unreachable');
|
||||
o.value('precedence-cutoff');
|
||||
o.value('protocol-unreachable');
|
||||
o.value('redirect');
|
||||
o.value('required-option-missing');
|
||||
o.value('router-advertisement');
|
||||
o.value('router-solicitation');
|
||||
o.value('source-quench');
|
||||
o.value('source-route-failed');
|
||||
o.value('time-exceeded');
|
||||
o.value('timestamp-reply');
|
||||
o.value('timestamp-request');
|
||||
o.value('TOS-host-redirect');
|
||||
o.value('TOS-host-unreachable');
|
||||
o.value('TOS-network-redirect');
|
||||
o.value('TOS-network-unreachable');
|
||||
o.value('ttl-zero-during-reassembly');
|
||||
o.value('ttl-zero-during-transit');
|
||||
o.depends({ proto: 'icmp', '!contains': true });
|
||||
o.depends({ proto: 'icmpv6', '!contains': true });
|
||||
|
||||
o = s.taboption('general', widgets.ZoneSelect, 'src', _('Source zone'));
|
||||
o.modalonly = true;
|
||||
o.nocreate = true;
|
||||
o.allowany = true;
|
||||
o.allowlocal = 'src';
|
||||
|
||||
fwtool.addMACOption(s, 'advanced', 'src_mac', _('Source MAC address'), null, hosts);
|
||||
fwtool.addIPOption(s, 'general', 'src_ip', _('Source address'), null, '', hosts, true);
|
||||
|
||||
o = s.taboption('general', form.Value, 'src_port', _('Source port'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'list(neg(portrange))';
|
||||
o.placeholder = _('any');
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('general', widgets.ZoneSelect, 'dest', _('Destination zone'));
|
||||
o.modalonly = true;
|
||||
o.nocreate = true;
|
||||
o.allowany = true;
|
||||
o.allowlocal = true;
|
||||
|
||||
fwtool.addIPOption(s, 'general', 'dest_ip', _('Destination address'), null, '', hosts, true);
|
||||
|
||||
o = s.taboption('general', form.Value, 'dest_port', _('Destination port'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'list(neg(portrange))';
|
||||
o.placeholder = _('any');
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'target', _('Action'));
|
||||
o.modalonly = true;
|
||||
o.default = 'ACCEPT';
|
||||
o.value('DROP', _('drop'));
|
||||
o.value('ACCEPT', _('accept'));
|
||||
o.value('REJECT', _('reject'));
|
||||
o.value('NOTRACK', _("don't track"));
|
||||
o.value('HELPER', _('assign conntrack helper'));
|
||||
o.value('MARK_SET', _('apply firewall mark'));
|
||||
o.value('MARK_XOR', _('XOR firewall mark'));
|
||||
o.value('DSCP', _('DSCP classification'));
|
||||
o.cfgvalue = function(section_id) {
|
||||
var t = uci.get('firewall', section_id, 'target'),
|
||||
m = uci.get('firewall', section_id, 'set_mark');
|
||||
|
||||
if (t == 'MARK')
|
||||
return m ? 'MARK_SET' : 'MARK_XOR';
|
||||
|
||||
return t;
|
||||
};
|
||||
o.write = function(section_id, value) {
|
||||
return this.super('write', [section_id, (value == 'MARK_SET' || value == 'MARK_XOR') ? 'MARK' : value]);
|
||||
};
|
||||
|
||||
fwtool.addMarkOption(s, 1);
|
||||
fwtool.addMarkOption(s, 2);
|
||||
fwtool.addDSCPOption(s, true);
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'set_helper', _('Tracking helper'), _('Assign the specified connection tracking helper to matched traffic.'));
|
||||
o.modalonly = true;
|
||||
o.placeholder = _('any');
|
||||
o.depends('target', 'HELPER');
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
o.value(ctHelpers[i].name, '%s (%s)'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase()));
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'helper', _('Match helper'), _('Match traffic using the specified connection tracking helper.'));
|
||||
o.modalonly = true;
|
||||
o.placeholder = _('any');
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
o.value(ctHelpers[i].name, '%s (%s)'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase()));
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == '' || value == null)
|
||||
return true;
|
||||
|
||||
value = value.replace(/^!\s*/, '');
|
||||
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
if (value == ctHelpers[i].name)
|
||||
return true;
|
||||
|
||||
return _('Unknown or not installed conntrack helper "%s"').format(value);
|
||||
};
|
||||
|
||||
fwtool.addMarkOption(s, false);
|
||||
fwtool.addDSCPOption(s, false);
|
||||
fwtool.addLimitOption(s);
|
||||
fwtool.addLimitBurstOption(s);
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'extra', _('Extra arguments'),
|
||||
_('Passes additional arguments to iptables. Use with care!'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('timed', form.MultiValue, 'weekdays', _('Week Days'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.display = 5;
|
||||
o.placeholder = _('Any day');
|
||||
o.value('Sun', _('Sunday'));
|
||||
o.value('Mon', _('Monday'));
|
||||
o.value('Tue', _('Tuesday'));
|
||||
o.value('Wed', _('Wednesday'));
|
||||
o.value('Thu', _('Thursday'));
|
||||
o.value('Fri', _('Friday'));
|
||||
o.value('Sat', _('Saturday'));
|
||||
o.write = function(section_id, value) {
|
||||
return this.super('write', [ section_id, L.toArray(value).join(' ') ]);
|
||||
};
|
||||
|
||||
o = s.taboption('timed', form.MultiValue, 'monthdays', _('Month Days'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.display_size = 15;
|
||||
o.placeholder = _('Any day');
|
||||
o.write = function(section_id, value) {
|
||||
return this.super('write', [ section_id, L.toArray(value).join(' ') ]);
|
||||
};
|
||||
for (var i = 1; i <= 31; i++)
|
||||
o.value(i);
|
||||
|
||||
o = s.taboption('timed', form.Value, 'start_time', _('Start Time (hh.mm.ss)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'timehhmmss';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'stop_time', _('Stop Time (hh.mm.ss)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'timehhmmss';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'start_date', _('Start Date (yyyy-mm-dd)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'dateyyyymmdd';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'stop_date', _('Stop Date (yyyy-mm-dd)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'dateyyyymmdd';
|
||||
|
||||
o = s.taboption('timed', form.Flag, 'utc_time', _('Time in UTC'));
|
||||
o.modalonly = true;
|
||||
o.default = o.disabled;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
|
@ -0,0 +1,303 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require ui';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require form';
|
||||
'require firewall as fwmodel';
|
||||
'require tools.firewall as fwtool';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
function rule_proto_txt(s) {
|
||||
var proto = L.toArray(uci.get('firewall', s, 'proto')).filter(function(p) {
|
||||
return (p != '*' && p != 'any' && p != 'all');
|
||||
}).map(function(p) {
|
||||
var pr = fwtool.lookupProto(p);
|
||||
return {
|
||||
num: pr[0],
|
||||
name: pr[1]
|
||||
};
|
||||
});
|
||||
|
||||
m = String(uci.get('firewall', s, 'mark')).match(/^(!\s*)?(0x[0-9a-f]{1,8}|[0-9]{1,10})(?:\/(0x[0-9a-f]{1,8}|[0-9]{1,10}))?$/i);
|
||||
var f = m ? {
|
||||
val: m[0].toUpperCase().replace(/X/g, 'x'),
|
||||
inv: m[1],
|
||||
num: '0x%02X'.format(+m[2]),
|
||||
mask: m[3] ? '0x%02X'.format(+m[3]) : null
|
||||
} : null;
|
||||
|
||||
return fwtool.fmt(_('Forwarded IPv4%{proto?, protocol %{proto#%{next?, }<var>%{item.name}</var>}}%{mark?, mark <var%{mark.inv? data-tooltip="Match fwmarks except %{mark.num}%{mark.mask? with mask %{mark.mask}}.":%{mark.mask? data-tooltip="Mask fwmark value with %{mark.mask} before compare."}}>%{mark.val}</var>}'), {
|
||||
proto: proto,
|
||||
mark: f
|
||||
});
|
||||
}
|
||||
|
||||
function rule_src_txt(s, hosts) {
|
||||
var z = uci.get('firewall', s, 'src');
|
||||
|
||||
return fwtool.fmt(_('From %{src}%{src_device?, interface <var>%{src_device}</var>}%{src_ip?, IP %{src_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{src_port?, port %{src_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}'), {
|
||||
src: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName(null) }, [E('em', _('any zone'))]),
|
||||
src_ip: fwtool.map_invert(uci.get('firewall', s, 'src_ip'), 'toLowerCase'),
|
||||
src_port: fwtool.map_invert(uci.get('firewall', s, 'src_port'))
|
||||
});
|
||||
}
|
||||
|
||||
function rule_dest_txt(s) {
|
||||
var z = uci.get('firewall', s, 'src');
|
||||
|
||||
return fwtool.fmt(_('To %{dest}%{dest_device?, via interface <var>%{dest_device}</var>}%{dest_ip?, IP %{dest_ip#%{next?, }<var%{item.inv? data-tooltip="Match IP addresses except %{item.val}."}>%{item.ival}</var>}}%{dest_port?, port %{dest_port#%{next?, }<var%{item.inv? data-tooltip="Match ports except %{item.val}."}>%{item.ival}</var>}}'), {
|
||||
dest: E('span', { 'class': 'zonebadge', 'style': 'background-color:' + fwmodel.getColorForName((z && z != '*') ? z : null) }, [(z == '*') ? E('em', _('any zone')) : (z || E('em', _('this device')))]),
|
||||
dest_ip: fwtool.map_invert(uci.get('firewall', s, 'dest_ip'), 'toLowerCase'),
|
||||
dest_port: fwtool.map_invert(uci.get('firewall', s, 'dest_port')),
|
||||
dest_device: uci.get('firewall', s, 'device')
|
||||
});
|
||||
}
|
||||
|
||||
function rule_limit_txt(s) {
|
||||
var m = String(uci.get('firewall', s, 'limit')).match(/^(\d+)\/([smhd])\w*$/i),
|
||||
l = m ? {
|
||||
num: +m[1],
|
||||
unit: ({ s: _('second'), m: _('minute'), h: _('hour'), d: _('day') })[m[2]],
|
||||
burst: uci.get('firewall', s, 'limit_burst')
|
||||
} : null;
|
||||
|
||||
if (!l)
|
||||
return '';
|
||||
|
||||
return fwtool.fmt(_('Limit matching to <var>%{limit.num}</var> packets per <var>%{limit.unit}</var>%{limit.burst? burst <var>%{limit.burst}</var>}'), { limit: l });
|
||||
}
|
||||
|
||||
function rule_target_txt(s) {
|
||||
var t = uci.get('firewall', s, 'target'),
|
||||
s = {
|
||||
target: t,
|
||||
snat_ip: uci.get('firewall', s, 'snat_ip'),
|
||||
snat_port: uci.get('firewall', s, 'snat_port')
|
||||
};
|
||||
|
||||
switch (t) {
|
||||
case 'SNAT':
|
||||
return fwtool.fmt(_('<var data-tooltip="SNAT">Statically rewrite</var> to source %{snat_ip?IP <var>%{snat_ip}</var>} %{snat_port?port <var>%{snat_port}</var>}'), s);
|
||||
|
||||
case 'MASQUERADE':
|
||||
return fwtool.fmt(_('<var data-tooltip="MASQUERADE">Automatically rewrite</var> source IP'));
|
||||
|
||||
case 'ACCEPT':
|
||||
return fwtool.fmt(_('<var data-tooltip="ACCEPT">Prevent source rewrite</var>'));
|
||||
|
||||
default:
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
callHostHints: rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getHostHints',
|
||||
expect: { '': {} }
|
||||
}),
|
||||
|
||||
callNetworkDevices: rpc.declare({
|
||||
object: 'luci-rpc',
|
||||
method: 'getNetworkDevices',
|
||||
expect: { '': {} }
|
||||
}),
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
this.callHostHints(),
|
||||
this.callNetworkDevices(),
|
||||
uci.load('firewall')
|
||||
]);
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
if (fwtool.checkLegacySNAT())
|
||||
return fwtool.renderMigration();
|
||||
else
|
||||
return this.renderNats(data);
|
||||
},
|
||||
|
||||
renderNats: function(data) {
|
||||
var hosts = data[0],
|
||||
devs = data[1],
|
||||
m, s, o;
|
||||
|
||||
m = new form.Map('firewall', _('Firewall - NAT Rules'),
|
||||
_('NAT rules allow fine grained control over the source IP to use for outbound or forwarded traffic.'));
|
||||
|
||||
s = m.section(form.GridSection, 'nat', _('NAT Rules'));
|
||||
s.addremove = true;
|
||||
s.anonymous = true;
|
||||
s.sortable = true;
|
||||
|
||||
s.tab('general', _('General Settings'));
|
||||
s.tab('advanced', _('Advanced Settings'));
|
||||
s.tab('timed', _('Time Restrictions'));
|
||||
|
||||
s.sectiontitle = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'name') || _('Unnamed NAT');
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.Value, 'name', _('Name'));
|
||||
o.placeholder = _('Unnamed NAT');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.option(form.DummyValue, '_match', _('Match'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return E('small', [
|
||||
rule_proto_txt(s), E('br'),
|
||||
rule_src_txt(s, hosts), E('br'),
|
||||
rule_dest_txt(s), E('br'),
|
||||
rule_limit_txt(s)
|
||||
]);
|
||||
};
|
||||
|
||||
o = s.option(form.ListValue, '_target', _('Action'));
|
||||
o.modalonly = false;
|
||||
o.textvalue = function(s) {
|
||||
return rule_target_txt(s);
|
||||
};
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enable'));
|
||||
o.modalonly = false;
|
||||
o.default = o.enabled;
|
||||
o.editable = true;
|
||||
|
||||
o = s.taboption('general', fwtool.CBIProtocolSelect, 'proto', _('Protocol'));
|
||||
o.modalonly = true;
|
||||
o.default = 'all';
|
||||
|
||||
o = s.taboption('general', widgets.ZoneSelect, 'src', _('Outbound zone'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.nocreate = true;
|
||||
o.allowany = true;
|
||||
o.default = 'lan';
|
||||
|
||||
o = fwtool.addIPOption(s, 'general', 'src_ip', _('Source address'),
|
||||
_('Match forwarded traffic from this IP or range.'), 'ipv4', hosts);
|
||||
o.rmempty = true;
|
||||
o.datatype = 'neg(ipmask4)';
|
||||
|
||||
o = s.taboption('general', form.Value, 'src_port', _('Source port'),
|
||||
_('Match forwarded traffic originating from the given source port or port range.'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.datatype = 'neg(portrange)';
|
||||
o.placeholder = _('any');
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = fwtool.addIPOption(s, 'general', 'dest_ip', _('Destination address'),
|
||||
_('Match forwarded traffic directed at the given IP address.'), 'ipv4', hosts);
|
||||
o.rmempty = true;
|
||||
o.datatype = 'neg(ipmask4)';
|
||||
|
||||
o = s.taboption('general', form.Value, 'dest_port', _('Destination port'),
|
||||
_('Match forwarded traffic directed at the given destination port or port range.'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('any');
|
||||
o.datatype = 'neg(portrange)';
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('general', form.ListValue, 'target', _('Action'));
|
||||
o.modalonly = true;
|
||||
o.default = 'SNAT';
|
||||
o.value('SNAT', _('SNAT - Rewrite to specific source IP or port'));
|
||||
o.value('MASQUERADE', _('MASQUERADE - Automatically rewrite to outbound interface IP'));
|
||||
o.value('ACCEPT', _('ACCEPT - Disable address rewriting'));
|
||||
|
||||
o = fwtool.addLocalIPOption(s, 'general', 'snat_ip', _('Rewrite IP address'),
|
||||
_('Rewrite matched traffic to the specified source IP address.'), devs);
|
||||
o.placeholder = null;
|
||||
o.depends('target', 'SNAT');
|
||||
o.validate = function(section_id, value) {
|
||||
var port = this.map.lookupOption('snat_port', section_id),
|
||||
a = this.formvalue(section_id),
|
||||
p = port ? port[0].formvalue(section_id) : null;
|
||||
|
||||
if ((a == null || a == '') && (p == null || p == '') && value == '')
|
||||
return _('A rewrite IP must be specified!');
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.Value, 'snat_port', _('Rewrite port'),
|
||||
_('Rewrite matched traffic to the specified source port or port range.'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('do not rewrite');
|
||||
o.datatype = 'portrange';
|
||||
o.depends({ proto: 'tcp', '!contains': true });
|
||||
o.depends({ proto: 'udp', '!contains': true });
|
||||
|
||||
o = s.taboption('advanced', widgets.DeviceSelect, 'device', _('Outbound device'),
|
||||
_('Matches forwarded traffic using the specified outbound network device.'));
|
||||
o.noaliases = true;
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
|
||||
fwtool.addMarkOption(s, false);
|
||||
fwtool.addLimitOption(s);
|
||||
fwtool.addLimitBurstOption(s);
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'extra', _('Extra arguments'),
|
||||
_('Passes additional arguments to iptables. Use with care!'));
|
||||
o.modalonly = true;
|
||||
o.rmempty = true;
|
||||
|
||||
o = s.taboption('timed', form.MultiValue, 'weekdays', _('Week Days'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.display = 5;
|
||||
o.placeholder = _('Any day');
|
||||
o.value('Sun', _('Sunday'));
|
||||
o.value('Mon', _('Monday'));
|
||||
o.value('Tue', _('Tuesday'));
|
||||
o.value('Wed', _('Wednesday'));
|
||||
o.value('Thu', _('Thursday'));
|
||||
o.value('Fri', _('Friday'));
|
||||
o.value('Sat', _('Saturday'));
|
||||
o.write = function(section_id, value) {
|
||||
return this.super('write', [ section_id, L.toArray(value).join(' ') ]);
|
||||
};
|
||||
|
||||
o = s.taboption('timed', form.MultiValue, 'monthdays', _('Month Days'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.display_size = 15;
|
||||
o.placeholder = _('Any day');
|
||||
o.write = function(section_id, value) {
|
||||
return this.super('write', [ section_id, L.toArray(value).join(' ') ]);
|
||||
};
|
||||
for (var i = 1; i <= 31; i++)
|
||||
o.value(i);
|
||||
|
||||
o = s.taboption('timed', form.Value, 'start_time', _('Start Time (hh.mm.ss)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'timehhmmss';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'stop_time', _('Stop Time (hh.mm.ss)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'timehhmmss';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'start_date', _('Start Date (yyyy-mm-dd)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'dateyyyymmdd';
|
||||
|
||||
o = s.taboption('timed', form.Value, 'stop_date', _('Stop Date (yyyy-mm-dd)'));
|
||||
o.modalonly = true;
|
||||
o.datatype = 'dateyyyymmdd';
|
||||
|
||||
o = s.taboption('timed', form.Flag, 'utc_time', _('Time in UTC'));
|
||||
o.modalonly = true;
|
||||
o.default = o.disabled;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
|
@ -0,0 +1,337 @@
|
|||
'use strict';
|
||||
'require view';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require form';
|
||||
'require network';
|
||||
'require firewall';
|
||||
'require tools.firewall as fwtool';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
return view.extend({
|
||||
callConntrackHelpers: rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'getConntrackHelpers',
|
||||
expect: { result: [] }
|
||||
}),
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
this.callConntrackHelpers(),
|
||||
firewall.getDefaults()
|
||||
]);
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
if (fwtool.checkLegacySNAT())
|
||||
return fwtool.renderMigration();
|
||||
else
|
||||
return this.renderZones(data);
|
||||
},
|
||||
|
||||
renderZones: function(data) {
|
||||
var ctHelpers = data[0],
|
||||
fwDefaults = data[1],
|
||||
m, s, o, inp, out;
|
||||
|
||||
m = new form.Map('firewall', _('Firewall - Zone Settings'),
|
||||
_('The firewall creates zones over your network interfaces to control network traffic flow.'));
|
||||
|
||||
s = m.section(form.TypedSection, 'defaults', _('General Settings'));
|
||||
s.anonymous = true;
|
||||
s.addremove = false;
|
||||
|
||||
o = s.option(form.Flag, 'syn_flood', _('Enable SYN-flood protection'));
|
||||
o = s.option(form.Flag, 'drop_invalid', _('Drop invalid packets'));
|
||||
|
||||
var p = [
|
||||
s.option(form.ListValue, 'input', _('Input')),
|
||||
s.option(form.ListValue, 'output', _('Output')),
|
||||
s.option(form.ListValue, 'forward', _('Forward'))
|
||||
];
|
||||
|
||||
for (var i = 0; i < p.length; i++) {
|
||||
p[i].value('REJECT', _('reject'));
|
||||
p[i].value('DROP', _('drop'));
|
||||
p[i].value('ACCEPT', _('accept'));
|
||||
}
|
||||
|
||||
/* Netfilter flow offload support */
|
||||
|
||||
if (L.hasSystemFeature('offloading')) {
|
||||
s = m.section(form.TypedSection, 'defaults', _('Routing/NAT Offloading'),
|
||||
_('Experimental feature. Not fully compatible with QoS/SQM.'));
|
||||
|
||||
s.anonymous = true;
|
||||
s.addremove = false;
|
||||
|
||||
o = s.option(form.Flag, 'flow_offloading',
|
||||
_('Software flow offloading'),
|
||||
_('Software based offloading for routing/NAT'));
|
||||
o.optional = true;
|
||||
|
||||
o = s.option(form.Flag, 'flow_offloading_hw',
|
||||
_('Hardware flow offloading'),
|
||||
_('Requires hardware NAT support. Implemented at least for mt7621'));
|
||||
o.optional = true;
|
||||
o.depends('flow_offloading', '1');
|
||||
}
|
||||
|
||||
|
||||
s = m.section(form.GridSection, 'zone', _('Zones'));
|
||||
s.addremove = true;
|
||||
s.anonymous = true;
|
||||
s.sortable = true;
|
||||
|
||||
s.handleRemove = function(section_id, ev) {
|
||||
return firewall.deleteZone(section_id).then(L.bind(function() {
|
||||
return this.super('handleRemove', [section_id, ev]);
|
||||
}, this));
|
||||
};
|
||||
|
||||
s.tab('general', _('General Settings'));
|
||||
s.tab('advanced', _('Advanced Settings'));
|
||||
s.tab('conntrack', _('Conntrack Settings'));
|
||||
s.tab('extra', _('Extra iptables arguments'));
|
||||
|
||||
o = s.taboption('general', form.DummyValue, '_generalinfo');
|
||||
o.rawhtml = true;
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
var name = uci.get('firewall', section_id, 'name');
|
||||
if (name == null)
|
||||
name = _("this new zone");
|
||||
return _('This section defines common properties of %q. The <em>input</em> and <em>output</em> options set the default policies for traffic entering and leaving this zone while the <em>forward</em> option describes the policy for forwarded traffic between different networks within the zone. <em>Covered networks</em> specifies which available networks are members of this zone.')
|
||||
.replace(/%s/g, name).replace(/%q/g, '"' + name + '"');
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.Value, 'name', _('Name'));
|
||||
o.placeholder = _('Unnamed zone');
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.datatype = 'and(uciname,maxlength(11))';
|
||||
o.write = function(section_id, formvalue) {
|
||||
var cfgvalue = this.cfgvalue(section_id);
|
||||
|
||||
if (cfgvalue == null || cfgvalue == '')
|
||||
return uci.set('firewall', section_id, 'name', formvalue);
|
||||
else if (cfgvalue != formvalue)
|
||||
return firewall.renameZone(cfgvalue, formvalue);
|
||||
};
|
||||
|
||||
o = s.option(widgets.ZoneForwards, '_info', _('Zone ⇒ Forwardings'));
|
||||
o.editable = true;
|
||||
o.modalonly = false;
|
||||
o.cfgvalue = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'name');
|
||||
};
|
||||
|
||||
var p = [
|
||||
s.taboption('general', form.ListValue, 'input', _('Input')),
|
||||
s.taboption('general', form.ListValue, 'output', _('Output')),
|
||||
s.taboption('general', form.ListValue, 'forward', _('Forward'))
|
||||
];
|
||||
|
||||
for (var i = 0; i < p.length; i++) {
|
||||
p[i].value('REJECT', _('reject'));
|
||||
p[i].value('DROP', _('drop'));
|
||||
p[i].value('ACCEPT', _('accept'));
|
||||
p[i].editable = true;
|
||||
}
|
||||
|
||||
p[0].default = fwDefaults.getInput();
|
||||
p[1].default = fwDefaults.getOutput();
|
||||
p[2].default = fwDefaults.getForward();
|
||||
|
||||
o = s.taboption('general', form.Flag, 'masq', _('Masquerading'));
|
||||
o.editable = true;
|
||||
|
||||
o = s.taboption('general', form.Flag, 'fullcone', _('Full Cone'));
|
||||
o.editable = true;
|
||||
o.depends('masq', '1');
|
||||
|
||||
o = s.taboption('general', form.Flag, 'mtu_fix', _('MSS clamping'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('general', widgets.NetworkSelect, 'network', _('Covered networks'));
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'network');
|
||||
};
|
||||
o.write = function(section_id, formvalue) {
|
||||
var name = uci.get('firewall', section_id, 'name'),
|
||||
cfgvalue = this.cfgvalue(section_id);
|
||||
|
||||
if (typeof(cfgvalue) == 'string' && Array.isArray(formvalue) && (cfgvalue == formvalue.join(' ')))
|
||||
return;
|
||||
|
||||
var tasks = [ firewall.getZone(name) ];
|
||||
|
||||
if (Array.isArray(formvalue))
|
||||
for (var i = 0; i < formvalue.length; i++) {
|
||||
var netname = formvalue[i];
|
||||
tasks.push(network.getNetwork(netname).then(function(net) {
|
||||
return net || network.addNetwork(netname, { 'proto': 'none' });
|
||||
}));
|
||||
}
|
||||
|
||||
return Promise.all(tasks).then(function(zone_networks) {
|
||||
if (zone_networks[0])
|
||||
for (var i = 1; i < zone_networks.length; i++)
|
||||
zone_networks[0].addNetwork(zone_networks[i].getName());
|
||||
});
|
||||
};
|
||||
|
||||
o = s.taboption('advanced', form.DummyValue, '_advancedinfo');
|
||||
o.rawhtml = true;
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
var name = uci.get('firewall', section_id, 'name');
|
||||
if (name == null)
|
||||
name = _("this new zone");
|
||||
return _('The options below control the forwarding policies between this zone (%s) and other zones. <em>Destination zones</em> cover forwarded traffic <strong>originating from %q</strong>. <em>Source zones</em> match forwarded traffic from other zones <strong>targeted at %q</strong>. The forwarding rule is <em>unidirectional</em>, e.g. a forward from lan to wan does <em>not</em> imply a permission to forward from wan to lan as well.')
|
||||
.format(name);
|
||||
};
|
||||
|
||||
o = s.taboption('advanced', widgets.DeviceSelect, 'device', _('Covered devices'), _('Use this option to classify zone traffic by raw, non-<em>uci</em> managed network devices.'));
|
||||
o.modalonly = true;
|
||||
o.noaliases = true;
|
||||
o.multiple = true;
|
||||
|
||||
o = s.taboption('advanced', form.DynamicList, 'subnet', _('Covered subnets'), _('Use this option to classify zone traffic by source or destination subnet instead of networks or devices.'));
|
||||
o.datatype = 'neg(cidr)';
|
||||
o.modalonly = true;
|
||||
o.multiple = true;
|
||||
|
||||
o = s.taboption('advanced', form.ListValue, 'family', _('Restrict to address family'));
|
||||
o.value('', _('IPv4 and IPv6'));
|
||||
o.value('ipv4', _('IPv4 only'));
|
||||
o.value('ipv6', _('IPv6 only'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('advanced', form.DynamicList, 'masq_src', _('Restrict Masquerading to given source subnets'));
|
||||
o.depends('family', '');
|
||||
o.depends('family', 'ipv4');
|
||||
o.datatype = 'list(neg(or(uciname,hostname,ipmask4)))';
|
||||
o.placeholder = '0.0.0.0/0';
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('advanced', form.DynamicList, 'masq_dest', _('Restrict Masquerading to given destination subnets'));
|
||||
o.depends('family', '');
|
||||
o.depends('family', 'ipv4');
|
||||
o.datatype = 'list(neg(or(uciname,hostname,ipmask4)))';
|
||||
o.placeholder = '0.0.0.0/0';
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('conntrack', form.Flag, 'masq_allow_invalid', _('Allow "invalid" traffic'), _('Do not install extra rules to reject forwarded traffic with conntrack state <em>invalid</em>. This may be required for complex asymmetric route setups.'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('conntrack', form.Flag, 'auto_helper', _('Automatic helper assignment'), _('Automatically assign conntrack helpers based on traffic protocol and port'));
|
||||
o.default = o.enabled;
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('conntrack', form.MultiValue, 'helper', _('Conntrack helpers'), _('Explicitly choses allowed connection tracking helpers for zone traffic'));
|
||||
o.depends('auto_helper', '0');
|
||||
o.modalonly = true;
|
||||
for (var i = 0; i < ctHelpers.length; i++)
|
||||
o.value(ctHelpers[i].name, '<span class="hide-close">%s (%s)</span><span class="hide-open">%s</span>'.format(ctHelpers[i].description, ctHelpers[i].name.toUpperCase(), ctHelpers[i].name.toUpperCase()));
|
||||
|
||||
o = s.taboption('advanced', form.Flag, 'log', _('Enable logging on this zone'));
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('advanced', form.Value, 'log_limit', _('Limit log messages'));
|
||||
o.depends('log', '1');
|
||||
o.placeholder = '10/minute';
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('extra', form.DummyValue, '_extrainfo');
|
||||
o.rawhtml = true;
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
return _('Passing raw iptables arguments to source and destination traffic classification rules allows to match packets based on other criteria than interfaces or subnets. These options should be used with extreme care as invalid values could render the firewall ruleset broken, completely exposing all services.');
|
||||
};
|
||||
|
||||
o = s.taboption('extra', form.Value, 'extra_src', _('Extra source arguments'), _('Additional raw <em>iptables</em> arguments to classify zone source traffic, e.g. <code>-p tcp --sport 443</code> to only match inbound HTTPS traffic.'));
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'extra_src') || uci.get('firewall', section_id, 'extra');
|
||||
};
|
||||
o.write = function(section_id, value) {
|
||||
uci.unset('firewall', section_id, 'extra');
|
||||
uci.set('firewall', section_id, 'extra_src', value);
|
||||
};
|
||||
|
||||
o = s.taboption('extra', form.Value, 'extra_dest', _('Extra destination arguments'), _('Additional raw <em>iptables</em> arguments to classify zone destination traffic, e.g. <code>-p tcp --dport 443</code> to only match outbound HTTPS traffic.'));
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
return uci.get('firewall', section_id, 'extra_dest') || uci.get('firewall', section_id, 'extra_src') || uci.get('firewall', section_id, 'extra');
|
||||
};
|
||||
o.write = function(section_id, value) {
|
||||
uci.unset('firewall', section_id, 'extra');
|
||||
uci.set('firewall', section_id, 'extra_dest', value);
|
||||
};
|
||||
|
||||
o = s.taboption('general', form.DummyValue, '_forwardinfo');
|
||||
o.rawhtml = true;
|
||||
o.modalonly = true;
|
||||
o.cfgvalue = function(section_id) {
|
||||
var name = uci.get('firewall', section_id, 'name');
|
||||
if (name == null)
|
||||
name = _("this new zone");
|
||||
return _('The options below control the forwarding policies between this zone (%s) and other zones. <em>Destination zones</em> cover forwarded traffic <strong>originating from %q</strong>. <em>Source zones</em> match forwarded traffic from other zones <strong>targeted at %q</strong>. The forwarding rule is <em>unidirectional</em>, e.g. a forward from lan to wan does <em>not</em> imply a permission to forward from wan to lan as well.')
|
||||
.format(name);
|
||||
};
|
||||
|
||||
out = o = s.taboption('general', widgets.ZoneSelect, 'out', _('Allow forward to <em>destination zones</em>:'));
|
||||
o.nocreate = true;
|
||||
o.multiple = true;
|
||||
o.modalonly = true;
|
||||
o.filter = function(section_id, value) {
|
||||
return (uci.get('firewall', section_id, 'name') != value);
|
||||
};
|
||||
o.cfgvalue = function(section_id) {
|
||||
var out = (this.option == 'out'),
|
||||
zone = this.lookupZone(uci.get('firewall', section_id, 'name')),
|
||||
fwds = zone ? zone.getForwardingsBy(out ? 'src' : 'dest') : [],
|
||||
value = [];
|
||||
|
||||
for (var i = 0; i < fwds.length; i++)
|
||||
value.push(out ? fwds[i].getDestination() : fwds[i].getSource());
|
||||
|
||||
return value;
|
||||
};
|
||||
o.write = o.remove = function(section_id, formvalue) {
|
||||
var out = (this.option == 'out'),
|
||||
zone = this.lookupZone(uci.get('firewall', section_id, 'name')),
|
||||
fwds = zone ? zone.getForwardingsBy(out ? 'src' : 'dest') : [];
|
||||
|
||||
if (formvalue == null)
|
||||
formvalue = [];
|
||||
|
||||
if (Array.isArray(formvalue)) {
|
||||
for (var i = 0; i < fwds.length; i++) {
|
||||
var cmp = out ? fwds[i].getDestination() : fwds[i].getSource();
|
||||
if (!formvalue.filter(function(d) { return d == cmp }).length)
|
||||
zone.deleteForwarding(fwds[i]);
|
||||
}
|
||||
|
||||
for (var i = 0; i < formvalue.length; i++)
|
||||
if (out)
|
||||
zone.addForwardingTo(formvalue[i]);
|
||||
else
|
||||
zone.addForwardingFrom(formvalue[i]);
|
||||
}
|
||||
};
|
||||
|
||||
inp = o = s.taboption('general', widgets.ZoneSelect, 'in', _('Allow forward from <em>source zones</em>:'));
|
||||
o.nocreate = true;
|
||||
o.multiple = true;
|
||||
o.modalonly = true;
|
||||
o.write = o.remove = out.write;
|
||||
o.filter = out.filter;
|
||||
o.cfgvalue = out.cfgvalue;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
1139
luci-app-firewall/po/bg/firewall.po
Normal file
1139
luci-app-firewall/po/bg/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1319
luci-app-firewall/po/ca/firewall.po
Normal file
1319
luci-app-firewall/po/ca/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1316
luci-app-firewall/po/cs/firewall.po
Normal file
1316
luci-app-firewall/po/cs/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1587
luci-app-firewall/po/de/firewall.po
Normal file
1587
luci-app-firewall/po/de/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1141
luci-app-firewall/po/el/firewall.po
Normal file
1141
luci-app-firewall/po/el/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1135
luci-app-firewall/po/en/firewall.po
Normal file
1135
luci-app-firewall/po/en/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1600
luci-app-firewall/po/es/firewall.po
Normal file
1600
luci-app-firewall/po/es/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1417
luci-app-firewall/po/fr/firewall.po
Normal file
1417
luci-app-firewall/po/fr/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1093
luci-app-firewall/po/he/firewall.po
Normal file
1093
luci-app-firewall/po/he/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1139
luci-app-firewall/po/hi/firewall.po
Normal file
1139
luci-app-firewall/po/hi/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1454
luci-app-firewall/po/hu/firewall.po
Normal file
1454
luci-app-firewall/po/hu/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1357
luci-app-firewall/po/it/firewall.po
Normal file
1357
luci-app-firewall/po/it/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1448
luci-app-firewall/po/ja/firewall.po
Normal file
1448
luci-app-firewall/po/ja/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1183
luci-app-firewall/po/ko/firewall.po
Normal file
1183
luci-app-firewall/po/ko/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1139
luci-app-firewall/po/mr/firewall.po
Normal file
1139
luci-app-firewall/po/mr/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1103
luci-app-firewall/po/ms/firewall.po
Normal file
1103
luci-app-firewall/po/ms/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1316
luci-app-firewall/po/nb_NO/firewall.po
Normal file
1316
luci-app-firewall/po/nb_NO/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1559
luci-app-firewall/po/pl/firewall.po
Normal file
1559
luci-app-firewall/po/pl/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1421
luci-app-firewall/po/pt/firewall.po
Normal file
1421
luci-app-firewall/po/pt/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1567
luci-app-firewall/po/pt_BR/firewall.po
Normal file
1567
luci-app-firewall/po/pt_BR/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1161
luci-app-firewall/po/ro/firewall.po
Normal file
1161
luci-app-firewall/po/ro/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1512
luci-app-firewall/po/ru/firewall.po
Normal file
1512
luci-app-firewall/po/ru/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1103
luci-app-firewall/po/sk/firewall.po
Normal file
1103
luci-app-firewall/po/sk/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1246
luci-app-firewall/po/sv/firewall.po
Normal file
1246
luci-app-firewall/po/sv/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1086
luci-app-firewall/po/templates/firewall.pot
Normal file
1086
luci-app-firewall/po/templates/firewall.pot
Normal file
File diff suppressed because it is too large
Load diff
1103
luci-app-firewall/po/tr/firewall.po
Normal file
1103
luci-app-firewall/po/tr/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1435
luci-app-firewall/po/uk/firewall.po
Normal file
1435
luci-app-firewall/po/uk/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1117
luci-app-firewall/po/vi/firewall.po
Normal file
1117
luci-app-firewall/po/vi/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1483
luci-app-firewall/po/zh_Hans/firewall.po
Normal file
1483
luci-app-firewall/po/zh_Hans/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
1385
luci-app-firewall/po/zh_Hant/firewall.po
Normal file
1385
luci-app-firewall/po/zh_Hant/firewall.po
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"admin/network/firewall": {
|
||||
"title": "Firewall",
|
||||
"order": 60,
|
||||
"action": {
|
||||
"type": "alias",
|
||||
"path": "admin/network/firewall/zones"
|
||||
},
|
||||
"depends": {
|
||||
"fs": { "/sbin/fw3": "executable" },
|
||||
"uci": { "firewall": true }
|
||||
}
|
||||
},
|
||||
|
||||
"admin/network/firewall/zones": {
|
||||
"title": "General Settings",
|
||||
"order": 10,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "firewall/zones"
|
||||
}
|
||||
},
|
||||
|
||||
"admin/network/firewall/forwards": {
|
||||
"title": "Port Forwards",
|
||||
"order": 20,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "firewall/forwards"
|
||||
}
|
||||
},
|
||||
|
||||
"admin/network/firewall/rules": {
|
||||
"title": "Traffic Rules",
|
||||
"order": 30,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "firewall/rules"
|
||||
}
|
||||
},
|
||||
|
||||
"admin/network/firewall/snats": {
|
||||
"title": "NAT Rules",
|
||||
"order": 40,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "firewall/snats"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"admin/network/firewall/custom": {
|
||||
"title": "Custom Rules",
|
||||
"order": 50,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "firewall/custom"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"luci-app-glorytun": {
|
||||
"description": "Grant UCI access for luci-app-glorytun",
|
||||
"read": {
|
||||
"uci": [ "glorytun" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "glorytun" ]
|
||||
}
|
||||
}
|
||||
}
|
17
luci-app-https-dns-proxy/Makefile
Normal file
17
luci-app-https-dns-proxy/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Copyright 2017-2018 Stan Grishin (stangri@melmac.net)
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
|
||||
|
||||
LUCI_TITLE:=DNS Over HTTPS Proxy Web UI
|
||||
LUCI_DESCRIPTION:=Provides Web UI for DNS Over HTTPS Proxy
|
||||
LUCI_DEPENDS:=+luci-compat +luci-mod-admin-full +https-dns-proxy
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_RELEASE:=3
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
|
@ -0,0 +1,25 @@
|
|||
module("luci.controller.https-dns-proxy", package.seeall)
|
||||
function index()
|
||||
if nixio.fs.access("/etc/config/https-dns-proxy") then
|
||||
entry({"admin", "services", "https-dns-proxy"}, cbi("https-dns-proxy"), _("DNS Over HTTPS Proxy"))
|
||||
entry({"admin", "services", "https-dns-proxy", "action"}, call("https_dns_proxy_action"), nil).leaf = true
|
||||
end
|
||||
end
|
||||
|
||||
function https_dns_proxy_action(name)
|
||||
local packageName = "https-dns-proxy"
|
||||
if name == "start" then
|
||||
luci.sys.init.start(packageName)
|
||||
elseif name == "action" then
|
||||
luci.util.exec("/etc/init.d/" .. packageName .. " reload >/dev/null 2>&1")
|
||||
luci.util.exec("/etc/init.d/dnsmasq restart >/dev/null 2>&1")
|
||||
elseif name == "stop" then
|
||||
luci.sys.init.stop(packageName)
|
||||
elseif name == "enable" then
|
||||
luci.sys.init.enable(packageName)
|
||||
elseif name == "disable" then
|
||||
luci.sys.init.disable(packageName)
|
||||
end
|
||||
luci.http.prepare_content("text/plain")
|
||||
luci.http.write("0")
|
||||
end
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "Digitale-Gesellschaft",
|
||||
label = _("Digitale Gesellschaft"),
|
||||
resolver_url = "https://dns.digitale-gesellschaft.ch/dns-query",
|
||||
bootstrap_dns = "185.95.218.42,185.95.218.43"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "rubyfish.cn",
|
||||
label = _("rubyfish.cn"),
|
||||
resolver_url = "https://dns.rubyfish.cn/dns-query",
|
||||
bootstrap_dns = "118.89.110.78,47.96.179.163"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "DNS.SB",
|
||||
label = _("DNS.SB"),
|
||||
resolver_url = "https://doh.dns.sb/dns-query",
|
||||
bootstrap_dns = "185.222.222.222,185.184.222.222"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "AdGuard-Family",
|
||||
label = _("AdGuard (Family Protection)"),
|
||||
resolver_url = "https://dns-family.adguard.com/dns-query",
|
||||
bootstrap_dns = "176.103.130.132,176.103.130.134",
|
||||
help_link = "https://adguard.com/en/adguard-dns/overview.html",
|
||||
help_link_text = "AdGuard.com"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "AdGuard-Standard",
|
||||
label = _("AdGuard (Standard)"),
|
||||
resolver_url = "https://dns.adguard.com/dns-query",
|
||||
bootstrap_dns = "176.103.130.130,176.103.130.131",
|
||||
help_link = "https://adguard.com/en/adguard-dns/overview.html",
|
||||
help_link_text = "AdGuard.com"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "Cloudflare for Families",
|
||||
label = _("Cloudflare for Families"),
|
||||
resolver_url = "https://family.cloudflare-dns.com/dns-query",
|
||||
bootstrap_dns = "1.1.1.3,1.0.0.3"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "Cloudflare Malware",
|
||||
label = _("Cloudflare Malware"),
|
||||
resolver_url = "https://security.cloudflare-dns.com/dns-query",
|
||||
bootstrap_dns = "1.1.1.2,1.0.0.2"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "Cloudflare",
|
||||
label = _("Cloudflare"),
|
||||
resolver_url = "https://cloudflare-dns.com/dns-query",
|
||||
bootstrap_dns = "1.1.1.1,1.0.0.1"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
return {
|
||||
name = "odvr-nic-cz",
|
||||
label = _("ODVR (nic.cz)"),
|
||||
resolver_url = "https://odvr.nic.cz/doh",
|
||||
bootstrap_dns = "193.17.47.1,185.43.135.1"
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
return {
|
||||
name = "Google",
|
||||
label = _("Google"),
|
||||
resolver_url = "https://dns.google/dns-query",
|
||||
bootstrap_dns = "8.8.8.8,8.8.4.4",
|
||||
default = true
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "LibreDNS (No Ads)",
|
||||
label = _("LibreDNS (No Ads)"),
|
||||
resolver_url = "https://doh.libredns.gr/ads",
|
||||
bootstrap_dns = "116.202.176.26",
|
||||
help_link = "https://libredns.gr/",
|
||||
help_link_text = "LibreDNS.gr"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "LibreDNS",
|
||||
label = _("LibreDNS"),
|
||||
resolver_url = "https://doh.libredns.gr/dns-query",
|
||||
bootstrap_dns = "116.202.176.26",
|
||||
help_link = "https://libredns.gr/",
|
||||
help_link_text = "LibreDNS.gr"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "Quad9-Recommended",
|
||||
label = _("Quad 9 (Recommended)"),
|
||||
resolver_url = "https://dns.quad9.net/dns-query",
|
||||
bootstrap_dns = "9.9.9.9,149.112.112.112",
|
||||
help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
|
||||
help_link_text = "Quad9.net"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "Quad9-Unsecured",
|
||||
label = _("Quad 9 (Unsecured)"),
|
||||
resolver_url = "https://dns10.quad9.net/dns-query",
|
||||
bootstrap_dns = "9.9.9.10,149.112.112.10",
|
||||
help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
|
||||
help_link_text = "Quad9.net"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "Quad9-ECS",
|
||||
label = _("Quad 9 (Secured with ECS Support)"),
|
||||
resolver_url = "https://dns11.quad9.net/dns-query",
|
||||
bootstrap_dns = "9.9.9.11,149.112.112.11",
|
||||
help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
|
||||
help_link_text = "Quad9.net"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "Quad9-Secured",
|
||||
label = _("Quad 9 (Secured)"),
|
||||
resolver_url = "https://dns9.quad9.net/dns-query",
|
||||
bootstrap_dns = "9.9.9.9,149.112.112.9",
|
||||
help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
|
||||
help_link_text = "Quad9.net"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "CleanBrowsing-Adult",
|
||||
label = _("CleanBrowsing (Adult Filter)"),
|
||||
resolver_url = "https://doh.cleanbrowsing.org/doh/adult-filter/",
|
||||
bootstrap_dns = "185.228.168.168",
|
||||
help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
|
||||
help_link_text = "CleanBrowsing.org"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "CleanBrowsing-Family",
|
||||
label = _("CleanBrowsing (Family Filter)"),
|
||||
resolver_url = "https://doh.cleanbrowsing.org/doh/family-filter/",
|
||||
bootstrap_dns = "185.228.168.168",
|
||||
help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
|
||||
help_link_text = "CleanBrowsing.org"
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
return {
|
||||
name = "CleanBrowsing-Security",
|
||||
label = _("CleanBrowsing (Security Filter)"),
|
||||
resolver_url = "https://doh.cleanbrowsing.org/doh/security-filter/",
|
||||
bootstrap_dns = "185.228.168.168",
|
||||
help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
|
||||
help_link_text = "CleanBrowsing.org"
|
||||
}
|
172
luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua
Normal file
172
luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua
Normal file
|
@ -0,0 +1,172 @@
|
|||
local sys = require "luci.sys"
|
||||
local util = require "luci.util"
|
||||
local fs = require "nixio.fs"
|
||||
local dispatcher = require "luci.dispatcher"
|
||||
local i18n = require "luci.i18n"
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
|
||||
local packageName = "https-dns-proxy"
|
||||
local providers_dir = "/usr/lib/lua/luci/" .. packageName .. "/providers/"
|
||||
local helperText = ""
|
||||
|
||||
function create_helper_text()
|
||||
local initText = "<br />" .. translate("For more information on different options check") .. " "
|
||||
for filename in fs.dir(providers_dir) do
|
||||
local p_func = loadfile(providers_dir .. filename)
|
||||
setfenv(p_func, { _ = i18n.translate })
|
||||
local p = p_func()
|
||||
if p.help_link then
|
||||
local url, domain
|
||||
url = p.help_link
|
||||
domain = p.help_link_text or url:match('^%w+://([^/]+)')
|
||||
if not helperText:find(domain) then
|
||||
if helperText == "" then
|
||||
helperText = initText
|
||||
else
|
||||
helperText = helperText .. ", "
|
||||
end
|
||||
helperText = helperText .. [[<a href="]] .. url .. [[">]] .. domain .. [[</a>]]
|
||||
end
|
||||
end
|
||||
end
|
||||
if helperText ~= "" then
|
||||
local a = helperText:gsub('(.*),%s.*$', '%1')
|
||||
helperText = a .. " " .. translate("and") .. helperText:sub(#a + 2) .. "."
|
||||
end
|
||||
end
|
||||
|
||||
function get_provider_name(value)
|
||||
for filename in fs.dir(providers_dir) do
|
||||
local p_func = loadfile(providers_dir .. filename)
|
||||
setfenv(p_func, { _ = i18n.translate })
|
||||
local p = p_func()
|
||||
value = value:gsub('[%p%c%s]', '')
|
||||
p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
|
||||
if value:match(p.url_match) then
|
||||
return p.label
|
||||
end
|
||||
end
|
||||
return translate("Unknown Provider")
|
||||
end
|
||||
|
||||
local tmpfsStatus, tmpfsStatusCode
|
||||
local ubusStatus = util.ubus("service", "list", { name = packageName })
|
||||
local tmpfsVersion = tostring(util.trim(sys.exec("opkg list-installed " .. packageName .. " | awk '{print $3}'")))
|
||||
|
||||
if not tmpfsVersion or tmpfsVersion == "" then
|
||||
tmpfsStatusCode = -1
|
||||
tmpfsVersion = ""
|
||||
tmpfsStatus = packageName .. " " .. translate("is not installed or not found")
|
||||
else
|
||||
tmpfsVersion = " [" .. packageName .. " " .. tmpfsVersion .. "]"
|
||||
if not ubusStatus or not ubusStatus[packageName] then
|
||||
tmpfsStatusCode = 0
|
||||
tmpfsStatus = translate("Stopped")
|
||||
if not luci.sys.init.enabled(packageName) then
|
||||
tmpfsStatus = tmpfsStatus .. " (" .. translate("disabled") .. ")"
|
||||
end
|
||||
else
|
||||
tmpfsStatusCode, tmpfsStatus = 1, ""
|
||||
for n = 1,1000 do
|
||||
if ubusStatus and ubusStatus[packageName] and
|
||||
ubusStatus[packageName]["instances"] and
|
||||
ubusStatus[packageName]["instances"]["instance" .. n] and
|
||||
ubusStatus[packageName]["instances"]["instance" .. n]["running"] then
|
||||
local value, k, v, url, url_flag, la, la_flag, lp, lp_flag
|
||||
for k, v in pairs(ubusStatus[packageName]["instances"]["instance" .. n]["command"]) do
|
||||
if la_flag then la, la_flag = v, false end
|
||||
if lp_flag then lp, lp_flag = v, false end
|
||||
if url_flag then url, url_flag = v, false end
|
||||
if v == "-a" then la_flag = true end
|
||||
if v == "-p" then lp_flag = true end
|
||||
if v == "-r" then url_flag = true end
|
||||
end
|
||||
la = la or "127.0.0.1"
|
||||
lp = lp or n + 5053
|
||||
tmpfsStatus = tmpfsStatus .. translate("Running") .. ": " .. get_provider_name(url) .. " " .. translate("DoH") .. " " .. translate("at") .. " " .. la .. ":" .. lp .. "\n"
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
m = Map("https-dns-proxy", translate("DNS Over HTTPS Proxy Settings"))
|
||||
|
||||
h = m:section(TypedSection, "_dummy", translate("Service Status") .. tmpfsVersion)
|
||||
h.template = "cbi/nullsection"
|
||||
ss = h:option(DummyValue, "_dummy", translate("Service Status"))
|
||||
if tmpfsStatusCode == -1 then
|
||||
ss.template = packageName .. "/status"
|
||||
ss.value = tmpfsStatus
|
||||
else
|
||||
if tmpfsStatusCode == 0 then
|
||||
ss.template = packageName .. "/status"
|
||||
else
|
||||
ss.template = packageName .. "/status-textarea"
|
||||
end
|
||||
ss.value = tmpfsStatus
|
||||
buttons = h:option(DummyValue, "_dummy")
|
||||
buttons.template = packageName .. "/buttons"
|
||||
end
|
||||
|
||||
create_helper_text()
|
||||
s3 = m:section(TypedSection, "https-dns-proxy", translate("Instances"), translate("When you add/remove any instances below, they will be used to override the 'DNS forwardings' section of ")
|
||||
.. [[ <a href="]] .. dispatcher.build_url("admin/network/dhcp") .. [[">]]
|
||||
.. translate("DHCP and DNS") .. [[</a>]] .. "." .. helperText)
|
||||
s3.template = "cbi/tblsection"
|
||||
s3.sortable = false
|
||||
s3.anonymous = true
|
||||
s3.addremove = true
|
||||
|
||||
prov = s3:option(ListValue, "resolver_url", translate("Resolver"))
|
||||
for filename in fs.dir(providers_dir) do
|
||||
local p_func = loadfile(providers_dir .. filename)
|
||||
setfenv(p_func, { _ = i18n.translate })
|
||||
local p = p_func()
|
||||
prov:value(p.resolver_url, p.label)
|
||||
if p.default then
|
||||
prov.default = p.resolver_url
|
||||
end
|
||||
end
|
||||
prov.forcewrite = true
|
||||
prov.write = function(self, section, value)
|
||||
if not value then return end
|
||||
for filename in fs.dir(providers_dir) do
|
||||
local p_func = loadfile(providers_dir .. filename)
|
||||
setfenv(p_func, { _ = i18n.translate })
|
||||
local p = p_func()
|
||||
value = value:gsub('[%p%c%s]', '')
|
||||
p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
|
||||
if value:match(p.url_match) then
|
||||
uci:set(packageName, section, "bootstrap_dns", p.bootstrap_dns)
|
||||
uci:set(packageName, section, "resolver_url", p.resolver_url)
|
||||
end
|
||||
end
|
||||
uci:save(packageName)
|
||||
end
|
||||
|
||||
la = s3:option(Value, "listen_addr", translate("Listen address"))
|
||||
la.datatype = "host"
|
||||
la.placeholder = "127.0.0.1"
|
||||
la.rmempty = true
|
||||
|
||||
local n = 0
|
||||
uci:foreach(packageName, packageName, function(s)
|
||||
if s[".name"] == section then
|
||||
return false
|
||||
end
|
||||
n = n + 1
|
||||
end)
|
||||
|
||||
lp = s3:option(Value, "listen_port", translate("Listen port"))
|
||||
lp.datatype = "port"
|
||||
lp.value = n + 5053
|
||||
|
||||
sa = s3:option(Value, "edns_subnet", translate("EDNS client subnet"))
|
||||
sa.rmempty = true
|
||||
|
||||
ps = s3:option(Value, "proxy_server", translate("Proxy server"))
|
||||
ps.rmempty = true
|
||||
|
||||
return m
|
|
@ -0,0 +1,77 @@
|
|||
<%# Copyright 2020 Stan Grishin <stangri@melmac.net> -%>
|
||||
|
||||
<%+https-dns-proxy/css%>
|
||||
<%+https-dns-proxy/js%>
|
||||
|
||||
<%-
|
||||
local packageName = "https-dns-proxy"
|
||||
local serviceRunning, serviceEnabled = false, false;
|
||||
|
||||
serviceEnabled = luci.sys.init.enabled(packageName)
|
||||
local ubusStatus = luci.util.ubus("service", "list", { name = packageName })
|
||||
if ubusStatus and ubusStatus[packageName] then
|
||||
serviceRunning = true
|
||||
end
|
||||
|
||||
if serviceEnabled then
|
||||
btn_start_status = true
|
||||
btn_action_status = true
|
||||
btn_stop_status = true
|
||||
btn_enable_status = false
|
||||
btn_disable_status = true
|
||||
else
|
||||
btn_start_status = false
|
||||
btn_action_status = false
|
||||
btn_stop_status = false
|
||||
btn_enable_status = true
|
||||
btn_disable_status = false
|
||||
end
|
||||
if serviceRunning then
|
||||
btn_start_status = false
|
||||
btn_action_status = true
|
||||
btn_stop_status = true
|
||||
else
|
||||
btn_action_status = false
|
||||
btn_stop_status = false
|
||||
end
|
||||
-%>
|
||||
|
||||
<div class="cbi-value"><label class="cbi-value-title">Service Control</label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="button" class="cbi-button cbi-button-apply" id="btn_start" name="start" value="<%:Start%>"
|
||||
onclick="button_action(this)" />
|
||||
<span id="btn_start_spinner" class="btn_spinner"></span>
|
||||
<input type="button" class="cbi-button cbi-button-apply" id="btn_action" name="action" value="<%:Reload%>"
|
||||
onclick="button_action(this)" />
|
||||
<span id="btn_action_spinner" class="btn_spinner"></span>
|
||||
<input type="button" class="cbi-button cbi-button-reset" id="btn_stop" name="stop" value="<%:Stop%>"
|
||||
onclick="button_action(this)" />
|
||||
<span id="btn_stop_spinner" class="btn_spinner"></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<input type="button" class="cbi-button cbi-button-apply" id="btn_enable" name="enable" value="<%:Enable%>"
|
||||
onclick="button_action(this)" />
|
||||
<span id="btn_enable_spinner" class="btn_spinner"></span>
|
||||
<input type="button" class="cbi-button cbi-button-reset" id="btn_disable" name="disable" value="<%:Disable%>"
|
||||
onclick="button_action(this)" />
|
||||
<span id="btn_disable_spinner" class="btn_spinner"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%-if not btn_start_status then%>
|
||||
<script type="text/javascript">document.getElementById("btn_start").disabled = true;</script>
|
||||
<%-end%>
|
||||
<%-if not btn_action_status then%>
|
||||
<script type="text/javascript">document.getElementById("btn_action").disabled = true;</script>
|
||||
<%-end%>
|
||||
<%-if not btn_stop_status then%>
|
||||
<script type="text/javascript">document.getElementById("btn_stop").disabled = true;</script>
|
||||
<%-end%>
|
||||
<%-if not btn_enable_status then%>
|
||||
<script type="text/javascript">document.getElementById("btn_enable").disabled = true;</script>
|
||||
<%-end%>
|
||||
<%-if not btn_disable_status then%>
|
||||
<script type="text/javascript">document.getElementById("btn_disable").disabled = true;</script>
|
||||
<%-end%>
|
|
@ -0,0 +1,9 @@
|
|||
<style type="text/css">
|
||||
.btn_spinner
|
||||
{
|
||||
display: inline-block;
|
||||
width: 0px;
|
||||
height: 16px;
|
||||
margin: 0 0px;
|
||||
}
|
||||
</style>
|
60
luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm
Normal file
60
luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm
Normal file
|
@ -0,0 +1,60 @@
|
|||
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
function button_action(action) {
|
||||
var xhr = new XHR(false);
|
||||
var btn_start = document.getElementById("btn_start");
|
||||
var btn_action = document.getElementById("btn_action");
|
||||
var btn_stop = document.getElementById("btn_stop");
|
||||
var btn_enable = document.getElementById("btn_enable");
|
||||
var btn_disable = document.getElementById("btn_disable");
|
||||
var btn_spinner;
|
||||
switch (action.name) {
|
||||
case "start":
|
||||
btn_spinner = document.getElementById("btn_start_spinner");
|
||||
break;
|
||||
case "action":
|
||||
btn_spinner = document.getElementById("btn_action_spinner");
|
||||
break;
|
||||
case "stop":
|
||||
btn_spinner = document.getElementById("btn_stop_spinner");
|
||||
break;
|
||||
case "enable":
|
||||
btn_spinner = document.getElementById("btn_enable_spinner");
|
||||
break;
|
||||
case "disable":
|
||||
btn_spinner = document.getElementById("btn_disable_spinner");
|
||||
break;
|
||||
}
|
||||
btn_start.disabled = true;
|
||||
btn_action.disabled = true;
|
||||
btn_stop.disabled = true;
|
||||
btn_enable.disabled = true;
|
||||
btn_disable.disabled = true;
|
||||
spinner(btn_spinner, 1);
|
||||
xhr.get('<%=luci.dispatcher.build_url("admin", "services", "https-dns-proxy", "action")%>/' + action.name, null,
|
||||
function (x) {
|
||||
if (!x) {
|
||||
return;
|
||||
}
|
||||
btn_start.disabled = false;
|
||||
btn_action.disabled = false;
|
||||
btn_stop.disabled = false;
|
||||
btn_enable.disabled = false;
|
||||
btn_disable.disabled = false;
|
||||
spinner(btn_spinner, 0);
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
function spinner(element, state) {
|
||||
if (state === 1) {
|
||||
element.style.width = "16px";
|
||||
element.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
|
||||
}
|
||||
else {
|
||||
element.style.width = "0px";
|
||||
element.innerHTML = '';
|
||||
}
|
||||
}
|
||||
//]]>
|
||||
</script>
|
|
@ -0,0 +1,13 @@
|
|||
<%#
|
||||
Copyright 2017-2019 Stan Grishin (stangri@melmac.net)
|
||||
This is free software, licensed under the Apache License, Version 2.0
|
||||
-%>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
|
||||
<textarea rows="<%=select(2, self:cfgvalue(section):gsub('\n', ''))%>"
|
||||
style="border:none;box-shadow:none;background:transparent;font-weight:bold;line-height:20px;width:50em;padding:none;margin:6px;resize:none;overflow:hidden;"
|
||||
disabled="disabled"><%=self:cfgvalue(section)%>
|
||||
</textarea>
|
||||
|
||||
<%+cbi/valuefooter%>
|
|
@ -0,0 +1,10 @@
|
|||
<%#
|
||||
Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
|
||||
This is free software, licensed under the Apache License, Version 2.0
|
||||
-%>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
|
||||
<input name="status" id="status" type="text" class="cbi-input-text" style="outline:none;border:none;box-shadow:none;background:transparent;font-weight:bold;line-height:30px;height:30px;width:50em;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
|
||||
|
||||
<%+cbi/valuefooter%>
|
168
luci-app-https-dns-proxy/po/bg/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/bg/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: bg\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
168
luci-app-https-dns-proxy/po/ca/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/ca/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: ca\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
188
luci-app-https-dns-proxy/po/cs/https-dns-proxy.po
Normal file
188
luci-app-https-dns-proxy/po/cs/https-dns-proxy.po
Normal file
|
@ -0,0 +1,188 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-02-02 09:02+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/cs/>\n"
|
||||
"Language: cs\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 3.11-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP a DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Povolit"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Více informací o dalších možnostech"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instance"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Naslouchající adresa"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Naslouchající port"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Proxy server"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Pokud níže přidáte nebo odeberete instance, budou použity k přepsání sekce "
|
||||
"'DNS forwardings' v"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "a"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Poskytovatel"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Adresa podsítě"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy"
|
||||
#~ msgstr "HTTPS DNS Proxy"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy Settings"
|
||||
#~ msgstr "Nastavení HTTPS DNS Proxy"
|
197
luci-app-https-dns-proxy/po/de/https-dns-proxy.po
Normal file
197
luci-app-https-dns-proxy/po/de/https-dns-proxy.po
Normal file
|
@ -0,0 +1,197 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-03-05 08:06+0000\n"
|
||||
"Last-Translator: Tobias Strobel <me@strobeltobias.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/de/>\n"
|
||||
"Language: de\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (Familienschutz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (Standard)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Familienfilter)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Familienfilter)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Sicherheitsfilter)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP und DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "DNS über HTTPS Proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "DNS über HTTPS Proxyeinstellungen"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Digitale Gesellschaft"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Deaktivieren"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "EDNS-Clientsubnetz"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Aktivieren"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Weitere Informationen zu den verschiedenen Optionen finden Sie unter"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instanzen"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Listen-Adresse"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Listen-Port"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Lade"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Proxyserver"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (empfohlen)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (gesichert mit ECS-Unterstützung)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (gesichert)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (ungesichert)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Neu laden"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Resolver"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Laufend"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Dienststatus"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Stoppen"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Angehalten"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Unbekannter Anbieter"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Wenn Sie untenstehende Instanzen hinzufügen/entfernen, werden sie für den "
|
||||
"Abschnitt 'DNS-Weiterleitungen' verwendet von"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "und"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "bei"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "ist nicht installiert oder nicht gefunden"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy"
|
||||
#~ msgstr "DNS über HTTPS Proxy"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy Settings"
|
||||
#~ msgstr "DNS über HTTPS Proxy-Einstellungen"
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Anbieter"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Subnetzadresse"
|
||||
|
||||
#~ msgid "Uknown Provider"
|
||||
#~ msgstr "Bekannter Anbieter"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy"
|
||||
#~ msgstr "HTTPS-DNS-Proxy"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy Settings"
|
||||
#~ msgstr "HTTPS-DNS-Proxyeinstellungen"
|
174
luci-app-https-dns-proxy/po/el/https-dns-proxy.po
Normal file
174
luci-app-https-dns-proxy/po/el/https-dns-proxy.po
Normal file
|
@ -0,0 +1,174 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2019-12-03 08:25+0000\n"
|
||||
"Last-Translator: Tavaninja <metalcorpe@gmail.com>\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps_dns_proxy/el/>\n"
|
||||
"Language: el\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 3.10-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Φόρτωση"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
176
luci-app-https-dns-proxy/po/en/https-dns-proxy.po
Normal file
176
luci-app-https-dns-proxy/po/en/https-dns-proxy.po
Normal file
|
@ -0,0 +1,176 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: en\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua:3
|
||||
msgid "LibreDNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua:3
|
||||
msgid "LibreDNS (No Ads)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
206
luci-app-https-dns-proxy/po/es/https-dns-proxy.po
Normal file
206
luci-app-https-dns-proxy/po/es/https-dns-proxy.po
Normal file
|
@ -0,0 +1,206 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-01-01 23:07+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 3.10\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (Protección familiar)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (estándar)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Filtro para adultos)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Filtro familiar)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Filtro de seguridad)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP y DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "DNS sobre proxy HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "Configuración de DNS sobre proxy HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Sociedad digital"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Desactivar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "Subred de cliente EDNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Activar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Para obtener más información sobre diferentes opciones, consulte"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instancias"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Escuchar dirección"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Puerto"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Cargando"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Servidor proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (recomendado)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (Asegurado con soporte ECS)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (Asegurado)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (No asegurado)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Recargar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Resolvedor"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Corriendo"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Estado del servicio"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Detener"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Detenido"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Proveedor desconocido"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Cuando agregue/elimine las instancias a continuación, se utilizarán para "
|
||||
"anular la sección 'Reenvíos DNS' de"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "y"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "a"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "no está instalado o no se encuentra"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy"
|
||||
#~ msgstr "DNS sobre proxy HTTPS"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy Settings"
|
||||
#~ msgstr "Configuración de DNS sobre proxy HTTPS"
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Proveedor"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Direccion de subred"
|
||||
|
||||
#~ msgid "Uknown Provider"
|
||||
#~ msgstr "Proveedor Desconocido"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy"
|
||||
#~ msgstr "Proxy DNS HTTPS"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy Settings"
|
||||
#~ msgstr "Configuración de proxy HTTPS DNS"
|
||||
|
||||
#~ msgid "Group name"
|
||||
#~ msgstr "Nombre del grupo"
|
||||
|
||||
#~ msgid "User name"
|
||||
#~ msgstr "Nombre de usuario"
|
176
luci-app-https-dns-proxy/po/fr/https-dns-proxy.po
Normal file
176
luci-app-https-dns-proxy/po/fr/https-dns-proxy.po
Normal file
|
@ -0,0 +1,176 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-03-11 23:49+0000\n"
|
||||
"Last-Translator: Hydci <giogio59@live.fr>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (protection de la famille)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (Standard)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Filtre Adulte)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Filtre Famille)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Filtre Sécurité)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP et DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "Proxy DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "Paramètres du Proxy DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Société Digitale"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Désactiver"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "Sous-réseau client EDNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Activer"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Pour plus d'informations sur les différentes options, consultez"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instances"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Adresse d'écoute"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Port d'écoute"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Chargement"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Serveur proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (recommandé)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (sécurisé avec prise en charge ECS)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (sécurisé)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (non sécurisé)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Recharger"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Résolveur"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "En cours d'exécution"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Statut du service"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Démarrer"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Arrêter"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Arrêté"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Proveedor desconocido"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Lorsque vous ajoutez/supprimez des instances ci-dessous, elles seront "
|
||||
"utilisées pour passer outre la section \"redirections DNS\" de"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "et"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "à"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "n'est pas installé ou introuvable"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
168
luci-app-https-dns-proxy/po/he/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/he/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: he\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
168
luci-app-https-dns-proxy/po/hi/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/hi/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: hi\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
176
luci-app-https-dns-proxy/po/hu/https-dns-proxy.po
Normal file
176
luci-app-https-dns-proxy/po/hu/https-dns-proxy.po
Normal file
|
@ -0,0 +1,176 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-01-01 23:07+0000\n"
|
||||
"Last-Translator: Balázs Úr <balazs@urbalazs.hu>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/hu/>\n"
|
||||
"Language: hu\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 3.10\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (családvédelem)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (szabványos)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (felnőtt szűrő)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (családszűrő)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (biztonsági szűrő)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP és DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "DNS HTTPS-proxy fölött"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "DNS HTTPS-proxy fölött beállításai"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Digitale Gesellschaft"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Letiltás"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "EDNS ügyfélalhálózat"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Engedélyezés"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "A különböző beállításokkal kapcsolatos további információkért nézze meg"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Példányok"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Cím figyelése"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Port figyelése"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Betöltés"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Proxy-kiszolgáló"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (ajánlott)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (biztonságos ECS támogatással)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (biztonságos)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (nem biztonságos)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Újratöltés"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Feloldó"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Fut"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Szolgáltatás állapota"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Indítás"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Leállítás"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Leállítva"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Ismeretlen szolgáltató"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Ha bármely példányt hozzáadja vagy eltávolítja lent, akkor azok lesznek "
|
||||
"használva a „DNS továbbítások” szakaszának felülbírálását ennek:"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "és"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "ekkor:"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "nincs telepítve vagy nem található"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
174
luci-app-https-dns-proxy/po/it/https-dns-proxy.po
Normal file
174
luci-app-https-dns-proxy/po/it/https-dns-proxy.po
Normal file
|
@ -0,0 +1,174 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-03-07 12:33+0000\n"
|
||||
"Last-Translator: Giuseppe Valitutto <valituttogiuseppe@gmail.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/it/>\n"
|
||||
"Language: it\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP e DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Disabilita"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Abilita"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Caricamento"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
168
luci-app-https-dns-proxy/po/ja/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/ja/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: ja\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
168
luci-app-https-dns-proxy/po/ko/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/ko/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: ko\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
176
luci-app-https-dns-proxy/po/mr/https-dns-proxy.po
Normal file
176
luci-app-https-dns-proxy/po/mr/https-dns-proxy.po
Normal file
|
@ -0,0 +1,176 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-02-07 09:19+0000\n"
|
||||
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
|
||||
"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/mr/>\n"
|
||||
"Language: mr\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 3.11-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "अॅडगार्ड (कौटुंबिक संरक्षण)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "अॅडगार्ड (मानक)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "क्लीन ब्राउझिंग (प्रौढ फिल्टर)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "क्लीन ब्राउझिंग (फॅमिली फिल्टर)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "क्लीन ब्राउझिंग (सुरक्षा फिल्टर)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "क्लाउडफ्लेअर"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "डीएचसीपी आणि डीएनएस"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "एचटीटीपीएस प्रॉक्सी वर डीएनएस"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "एचटीटीपीएस प्रॉक्सी सेटिंग वरील डीएनएस"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "डीएनएस.एसबी"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "डिजिटेल गसेल्सशाफ्ट"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "अक्षम करा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "ईडीएनएस क्लायंट सबनेट"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "सक्षम करा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "वेगवेगळ्या पर्यायांवर अधिक माहितीसाठी तपासा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "गूगल"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "उदाहरणे"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "ऐकण्याचा पत्ता"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "ऐकण्याचा पत्ता"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "लोड करीत आहे"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "प्रॉक्सी सर्व्हर"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (शिफारस केलेले)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (ईसीएस समर्थनासह सुरक्षित)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (सुरक्षित)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (असुरक्षित)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "रीलोड करा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "निराकरणकर्ता"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "चालू आहे"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "सेवा स्थिती"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "प्रारंभ करा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "थांबा"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "बंद"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "अज्ञात प्रदाता"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"जेव्हा आपण खाली कोणतीही उदाहरणे जोडता / काढता तेव्हा ती 'डीएनएस फॉरवर्डिंग' "
|
||||
"विभागाच्या अधिलिखितसाठी वापरली जाईल"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "आणि"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "येथे"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "स्थापित केलेले नाही किंवा सापडले नाही"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
168
luci-app-https-dns-proxy/po/ms/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/ms/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: ms\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
168
luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po
Normal file
168
luci-app-https-dns-proxy/po/nb_NO/https-dns-proxy.po
Normal file
|
@ -0,0 +1,168 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Language: nb_NO\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
198
luci-app-https-dns-proxy/po/pl/https-dns-proxy.po
Normal file
198
luci-app-https-dns-proxy/po/pl/https-dns-proxy.po
Normal file
|
@ -0,0 +1,198 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-04-02 19:50+0000\n"
|
||||
"Last-Translator: Marcin Net <marcin.net@linux.pl>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.0-dev\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (Ochrona rodzinna)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (Standardowy)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Filtr treści dla dorosłych)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Filtr rodzinny)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Filtr bezpieczeństwa)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP i DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "Ustawienia DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Digitale Gesellschaft"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Wyłącz"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "Podsieć klienta EDNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Włącz"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Aby uzyskać więcej informacji na temat różnych opcji, sprawdź"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instancje"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Nasłuchiwany adres"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Nasłuchiwany port"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Ładowanie"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Serwer proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (Zalecane)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (Zabezpieczony z obsługą ECS)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (Zabezpieczony)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (Niezabezpieczony)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Przeładuj"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Dostawca"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Działa"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Status usługi"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Uruchom"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Zatrzymany"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Nieznany dostawca"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Po dodaniu/usunięciu dowolnej instancji poniżej, zastąpią one ustawienia "
|
||||
"sekcji 'Przekazywania DNS' w"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "i"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "na"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "nie jest zainstalowany lub nie znaleziono"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy"
|
||||
#~ msgstr "Proxy DNS over HTTPS"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy Settings"
|
||||
#~ msgstr "Ustawiania proxy DNS over HTTPS"
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Dostawca"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Adres podsieci"
|
||||
|
||||
#~ msgid "Uknown Provider"
|
||||
#~ msgstr "Nieznany dostawca"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy"
|
||||
#~ msgstr "HTTPS DNS Proxy"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy Settings"
|
||||
#~ msgstr "Ustawienia Proxy HTTPS DNS"
|
197
luci-app-https-dns-proxy/po/pt/https-dns-proxy.po
Normal file
197
luci-app-https-dns-proxy/po/pt/https-dns-proxy.po
Normal file
|
@ -0,0 +1,197 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-01-02 16:07+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/pt/>\n"
|
||||
"Language: pt\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 3.10\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (Proteção da Família)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (Padrão)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Filtro Adulto)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Filtro para a Familia)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Filtro de Segurança)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP e DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "Proxy de DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "Configurações de Proxy de DNS Over HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Digitale Gesellschaft"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Desativar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "Sub-rede de clientes EDNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Ativar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Para obter mais informações sobre opções diferentes, verifique"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instâncias"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Endereço de escuta"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Porta de escuta"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "A carregar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Servidor proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (Recomendado)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (Protegido com Suporte de ECS)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (Seguro)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (Sem Segurança)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Recarregar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Resolvedor"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Executando"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Estado do Serviço"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Parar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Parado"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Provedor Desconhecido"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Quando adicionar/remover quaisquer instâncias abaixo, serão usadas para "
|
||||
"substituir a seção 'DNS forwardings' de"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "e"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "em"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "não está instalado ou não foi encontrado"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy"
|
||||
#~ msgstr "Proxy de DNS sobre HTTPS"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy Settings"
|
||||
#~ msgstr "Configurações de Proxy DNS sobre HTTPS"
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Provedor"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Endereço de sub-rede"
|
||||
|
||||
#~ msgid "Uknown Provider"
|
||||
#~ msgstr "Provedor Desconhecido"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy"
|
||||
#~ msgstr "Proxy de DNS HTTPS"
|
||||
|
||||
#~ msgid "HTTPS DNS Proxy Settings"
|
||||
#~ msgstr "Configurações de proxy HTTPS DNS"
|
191
luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po
Normal file
191
luci-app-https-dns-proxy/po/pt_BR/https-dns-proxy.po
Normal file
|
@ -0,0 +1,191 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-02-21 21:18+0000\n"
|
||||
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
|
||||
"openwrt/luciapplicationshttps-dns-proxy/pt_BR/>\n"
|
||||
"Language: pt_BR\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 3.11.1\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr "AdGuard (Proteção Familiar)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr "AdGuard (Padrão)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr "CleanBrowsing (Filtro Adulto)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr "CleanBrowsing (Filtro Familiar)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr "CleanBrowsing (Filtro de Segurança)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr "Cloudflare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr "DHCP e DNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr "DNS sobre Proxy HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr "Configurações de Proxy DNS sobre HTTPS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr "DNS.SB"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr "Digitale Gesellschaft"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Desativar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr "DoH"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr "Sub-rede de clientes EDNS"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Ativar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr "Para obter mais informações sobre diferentes opções, verifique"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr "Google"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr "Instâncias"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr "Escutar endereço"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr "Porta de escuta"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Carregando"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr "ODVR (nic.cz)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr "Servidor proxy"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr "Quad 9 (Preferível)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr "Quad 9 (Protegido com Suporte a ECS)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr "Quad 9 (Seguro)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr "Quad 9 (Sem Segurança)"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr "Recarregar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr "Resolvedor"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr "Em execução"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr "Condição do Serviço"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr "Parar"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr "Parado"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr "Provedor Desconhecido"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
"Quando você adiciona/remove quaisquer instâncias abaixo, elas serão usadas "
|
||||
"para substituir a seção 'Encaminhamentos DNS' de"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr "e"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr "em"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr "não está instalado ou não foi encontrado"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr "rubyfish.cn"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy"
|
||||
#~ msgstr "DNS sobre Proxy HTTPS"
|
||||
|
||||
#~ msgid "DNS over HTTPS Proxy Settings"
|
||||
#~ msgstr "Configurações de DNS sobre Proxy HTTPS"
|
||||
|
||||
#~ msgid "Provider"
|
||||
#~ msgstr "Provedor"
|
||||
|
||||
#~ msgid "Subnet address"
|
||||
#~ msgstr "Endereço de sub-rede"
|
||||
|
||||
#~ msgid "Uknown Provider"
|
||||
#~ msgstr "Provedor Desconhecido"
|
175
luci-app-https-dns-proxy/po/ro/https-dns-proxy.po
Normal file
175
luci-app-https-dns-proxy/po/ro/https-dns-proxy.po
Normal file
|
@ -0,0 +1,175 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-01-10 12:24+0000\n"
|
||||
"Last-Translator: Alexandru Stan <alex9457sn@gmail.com>\n"
|
||||
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationshttps-dns-proxy/ro/>\n"
|
||||
"Language: ro\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 3.10.1\n"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
|
||||
msgid "AdGuard (Family Protection)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
|
||||
msgid "AdGuard (Standard)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
|
||||
msgid "CleanBrowsing (Adult Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
|
||||
msgid "CleanBrowsing (Family Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
|
||||
msgid "CleanBrowsing (Security Filter)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
|
||||
msgid "Cloudflare"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:85
|
||||
msgid "DHCP and DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
|
||||
msgid "DNS Over HTTPS Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:64
|
||||
msgid "DNS Over HTTPS Proxy Settings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/sb.dns.lua:3
|
||||
msgid "DNS.SB"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ch.digitale-gesellschaft.dns.lua:3
|
||||
msgid "Digitale Gesellschaft"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
|
||||
msgid "Disable"
|
||||
msgstr "Dezactivează"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "DoH"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
|
||||
msgid "EDNS client subnet"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:51
|
||||
msgid "Enable"
|
||||
msgstr "Activează"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:87
|
||||
msgid "For more information on different options check"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
|
||||
msgid "Google"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid "Instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:126
|
||||
msgid "Listen address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:139
|
||||
msgid "Listen port"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
|
||||
msgid "Loading"
|
||||
msgstr "Încărcare"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
|
||||
msgid "ODVR (nic.cz)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:146
|
||||
msgid "Proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
|
||||
msgid "Quad 9 (Recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
|
||||
msgid "Quad 9 (Secured with ECS Support)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
|
||||
msgid "Quad 9 (Secured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
|
||||
msgid "Quad 9 (Unsecured)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
|
||||
msgid "Resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:66
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:68
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:41
|
||||
msgid "Start"
|
||||
msgstr "Pornește"
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:45
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:37
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:22
|
||||
msgid "Unknown Provider"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:83
|
||||
msgid ""
|
||||
"When you add/remove any instances below, they will be used to override the "
|
||||
"'DNS forwardings' section of"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:91
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:56
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:32
|
||||
msgid "is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/cn.rubyfish.dns.lua:3
|
||||
msgid "rubyfish.cn"
|
||||
msgstr ""
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue