mirror of
https://github.com/sirpdboy/sirpdboy-package.git
synced 2025-01-09 04:17:45 +08:00
opentopd 1.2.0
This commit is contained in:
parent
41caa9a1a0
commit
7eb6560792
237
luci-app-adguardhome/root/etc/AdGuardHome.yaml
Normal file
237
luci-app-adguardhome/root/etc/AdGuardHome.yaml
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
bind_host: 0.0.0.0
|
||||||
|
bind_port: 3000
|
||||||
|
users:
|
||||||
|
- name: admin
|
||||||
|
password: $2y$10$vHRcARdPCieYG3RXWomV5evDYN.Nj/edtwEkQgQJZcK6z7qTLaIc6
|
||||||
|
http_proxy: ""
|
||||||
|
language: zh-cn
|
||||||
|
rlimit_nofile: 0
|
||||||
|
debug_pprof: false
|
||||||
|
web_session_ttl: 720
|
||||||
|
dns:
|
||||||
|
bind_host: 0.0.0.0
|
||||||
|
port: 5553
|
||||||
|
statistics_interval: 1
|
||||||
|
querylog_enabled: true
|
||||||
|
querylog_file_enabled: true
|
||||||
|
querylog_interval: 1
|
||||||
|
querylog_size_memory: 1000
|
||||||
|
anonymize_client_ip: false
|
||||||
|
protection_enabled: true
|
||||||
|
blocking_mode: default
|
||||||
|
blocking_ipv4: ""
|
||||||
|
blocking_ipv6: ""
|
||||||
|
blocked_response_ttl: 60
|
||||||
|
parental_block_host: family-block.dns.adguard.com
|
||||||
|
safebrowsing_block_host: standard-block.dns.adguard.com
|
||||||
|
ratelimit: 0
|
||||||
|
ratelimit_whitelist: []
|
||||||
|
refuse_any: true
|
||||||
|
upstream_dns:
|
||||||
|
- tls://1dot1dot1dot1.cloudflare-dns.com
|
||||||
|
- tls://dns.google
|
||||||
|
- https://cloudflare-dns.com/dns-query
|
||||||
|
- https://1.0.0.1/dns-query
|
||||||
|
- https://dns.adgk.net:4433/dns-query
|
||||||
|
- https://esdns.kbsml.com/dns-query
|
||||||
|
- tcp://8.8.4.4
|
||||||
|
- 117.50.11.11
|
||||||
|
- 117.50.22.22
|
||||||
|
- 223.5.5.5
|
||||||
|
- 208.67.222.222
|
||||||
|
- 114.114.114.114
|
||||||
|
- 180.76.76.76
|
||||||
|
bootstrap_dns:
|
||||||
|
- 119.29.29.29
|
||||||
|
- 223.5.5.5
|
||||||
|
- 114.114.114.114
|
||||||
|
- 8.8.4.4:53
|
||||||
|
- 1.0.0.1:53
|
||||||
|
- 2620:fe::10
|
||||||
|
- 2620:fe::fe:10
|
||||||
|
all_servers: false
|
||||||
|
fastest_addr: false
|
||||||
|
allowed_clients: []
|
||||||
|
disallowed_clients: []
|
||||||
|
blocked_hosts: []
|
||||||
|
cache_size: 1194304
|
||||||
|
cache_ttl_min: 60
|
||||||
|
cache_ttl_max: 86400
|
||||||
|
bogus_nxdomain: []
|
||||||
|
aaaa_disabled: true
|
||||||
|
enable_dnssec: true
|
||||||
|
edns_client_subnet: true
|
||||||
|
filtering_enabled: true
|
||||||
|
filters_update_interval: 24
|
||||||
|
parental_enabled: false
|
||||||
|
safesearch_enabled: false
|
||||||
|
safebrowsing_enabled: false
|
||||||
|
safebrowsing_cache_size: 1048576
|
||||||
|
safesearch_cache_size: 1048576
|
||||||
|
parental_cache_size: 1048576
|
||||||
|
cache_time: 30
|
||||||
|
rewrites: []
|
||||||
|
blocked_services: []
|
||||||
|
tls:
|
||||||
|
enabled: false
|
||||||
|
server_name: ""
|
||||||
|
force_https: false
|
||||||
|
port_https: 443
|
||||||
|
port_dns_over_tls: 853
|
||||||
|
allow_unencrypted_doh: false
|
||||||
|
strict_sni_check: false
|
||||||
|
certificate_chain: ""
|
||||||
|
private_key: ""
|
||||||
|
certificate_path: ""
|
||||||
|
private_key_path: ""
|
||||||
|
filters:
|
||||||
|
- enabled: true
|
||||||
|
url: https://adaway.org/hosts.txt
|
||||||
|
name: Adaway HOST
|
||||||
|
id: 139789111
|
||||||
|
- enabled: true
|
||||||
|
url: https://raw.githubusercontent.com/neodevpro/neodevhost/master/adblocker
|
||||||
|
name: NEO DEV HOST
|
||||||
|
id: 139789112
|
||||||
|
- enabled: true
|
||||||
|
url: https://banbendalao.coding.net/p/adgk/d/ADgk/git/raw/master/ADgk.txt
|
||||||
|
name: adgk手机去广告规则
|
||||||
|
id: 139789121
|
||||||
|
- enabled: true
|
||||||
|
url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD@master/anti-ad-easylist.txt
|
||||||
|
name: anti-AD命中率最高列表
|
||||||
|
id: 139789122
|
||||||
|
- enabled: true
|
||||||
|
url: https://gitee.com/halflife/list/raw/master/ad.txt
|
||||||
|
name: halflife合并乘风
|
||||||
|
id: 139789131
|
||||||
|
- enabled: true
|
||||||
|
url: https://easylist.to/easylist/easyprivacy.txt
|
||||||
|
name: EasyPrivacy隐私相关
|
||||||
|
id: 139789132
|
||||||
|
- enabled: true
|
||||||
|
url: https://www.i-dont-care-about-cookies.eu/abp/
|
||||||
|
name: I don't care about cookies隐私相关
|
||||||
|
id: 139789133
|
||||||
|
- enabled: true
|
||||||
|
url: https://gitee.com/cjx82630/cjxlist/raw/master/cjx-ublock.txt
|
||||||
|
name: CJX's uBlock list隐私相关
|
||||||
|
id: 139789141
|
||||||
|
- enabled: false
|
||||||
|
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt
|
||||||
|
name: 乘风 广告过滤规则
|
||||||
|
id: 139789142
|
||||||
|
- enabled: false
|
||||||
|
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt
|
||||||
|
name: 乘风 视频广告过滤规则
|
||||||
|
id: 139789143
|
||||||
|
- enabled: false
|
||||||
|
url: https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts
|
||||||
|
name: 1024host
|
||||||
|
id: 139789151
|
||||||
|
- enabled: false
|
||||||
|
url: https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext
|
||||||
|
name: Peter Lowe’s Ad and tracking server list
|
||||||
|
id: 139789152
|
||||||
|
- enabled: false
|
||||||
|
url: https://easylist.to/easylist/fanboy-social.txt
|
||||||
|
name: Fanboy's Social Blocking List
|
||||||
|
id: 139789153
|
||||||
|
- enabled: false
|
||||||
|
url: https://easylist.to/easylist/fanboy-annoyance.txt
|
||||||
|
name: Fanboy's Annoyance List
|
||||||
|
id: 139789154
|
||||||
|
- enabled: false
|
||||||
|
url: https://secure.fanboy.co.nz/fanboy-cookiemonster.txt
|
||||||
|
name: EasyList Cookie List
|
||||||
|
id: 139789155
|
||||||
|
- enabled: false
|
||||||
|
url: https://fanboy.co.nz/fanboy-antifacebook.txt
|
||||||
|
name: Anti-Facebook List
|
||||||
|
id: 139789161
|
||||||
|
- enabled: false
|
||||||
|
url: https://filters.adtidy.org/extension/ublock/filters/14.txt
|
||||||
|
name: AdGuard Annoyances filter
|
||||||
|
id: 139789162
|
||||||
|
- enabled: false
|
||||||
|
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
|
||||||
|
name: MalwareDomainList.com Hosts List
|
||||||
|
id: 139789163
|
||||||
|
- enabled: false
|
||||||
|
url: https://www.fanboy.co.nz/enhancedstats.txt
|
||||||
|
name: Fanboy's Enhanced Tracking List
|
||||||
|
id: 139789164
|
||||||
|
- enabled: false
|
||||||
|
url: https://filters.adtidy.org/extension/ublock/filters/3.txt
|
||||||
|
name: AdGuard Tracking Protection filter
|
||||||
|
id: 139789165
|
||||||
|
- enabled: false
|
||||||
|
url: https://easylist.to/easylist/easylist.txt
|
||||||
|
name: EasyList
|
||||||
|
id: 139789171
|
||||||
|
- enabled: false
|
||||||
|
url: https://filters.adtidy.org/extension/ublock/filters/11.txt
|
||||||
|
name: AdGuard Mobile Ads filter
|
||||||
|
id: 139789172
|
||||||
|
- enabled: false
|
||||||
|
url: https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt
|
||||||
|
name: AdGuard Base filter
|
||||||
|
id: 139789173
|
||||||
|
- enabled: false
|
||||||
|
url: https://easylist-downloads.adblockplus.org/antiadblockfilters.txt
|
||||||
|
name: Adblock Warning Removal List
|
||||||
|
id: 139789174
|
||||||
|
- enabled: false
|
||||||
|
url: https://fanboy.co.nz/fanboy-problematic-sites.txt
|
||||||
|
name: Fanboy's problematic-sites
|
||||||
|
id: 139789175
|
||||||
|
- enabled: false
|
||||||
|
url: http://sub.adtchrome.com/adt-chinalist-easylist.txt
|
||||||
|
name: ChinaList+EasyList(修正)
|
||||||
|
id: 139789181
|
||||||
|
- enabled: false
|
||||||
|
url: https://raw.githubusercontent.com/adbyby/xwhyc-rules/master/lazy.txt
|
||||||
|
name: Adbyby Lazy Rule
|
||||||
|
id: 139789182
|
||||||
|
- enabled: false
|
||||||
|
url: https://raw.githubusercontent.com/VeleSila/yhosts/master/hosts.txt
|
||||||
|
name: hosts
|
||||||
|
id: 139789183
|
||||||
|
- enabled: false
|
||||||
|
url: https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-notubo.txt
|
||||||
|
name: aak-cont-list-notubo
|
||||||
|
id: 139789184
|
||||||
|
whitelist_filters: []
|
||||||
|
user_rules:
|
||||||
|
- '@@||jd.com^important'
|
||||||
|
- '@@||flyme.cn^$important'
|
||||||
|
- '@@||meizu.com^$important'
|
||||||
|
- '@@||wl.jd.com^$important'
|
||||||
|
- '@@||flydigi.com^'
|
||||||
|
- '@@||pv.sohu.com^$important'
|
||||||
|
- /googleads.$~script,domain=~googleads.github.io
|
||||||
|
- /pagead/lvz?
|
||||||
|
- '||google.com/pagead/'
|
||||||
|
- '||static.doubleclick.net^$domain=youtube.com'
|
||||||
|
- '||youtube.com/get_midroll_'
|
||||||
|
- '@@||g.live.com^$important'
|
||||||
|
- '@@||s.click.taobao.com^$important'
|
||||||
|
- '@@||ipassport.ele.me^$important'
|
||||||
|
dhcp:
|
||||||
|
enabled: false
|
||||||
|
interface_name: ""
|
||||||
|
gateway_ip: ""
|
||||||
|
subnet_mask: ""
|
||||||
|
range_start: ""
|
||||||
|
range_end: ""
|
||||||
|
lease_duration: 86400
|
||||||
|
icmp_timeout_msec: 1000
|
||||||
|
clients: []
|
||||||
|
log_compress: false
|
||||||
|
log_localtime: false
|
||||||
|
log_max_backups: 0
|
||||||
|
log_max_size: 100
|
||||||
|
log_max_age: 3
|
||||||
|
log_file: ""
|
||||||
|
verbose: false
|
||||||
|
schema_version: 6
|
15
luci-app-dnspod/Makefile
Normal file
15
luci-app-dnspod/Makefile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#
|
||||||
|
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
LUCI_TITLE:=LuCI Support for Auto DNS for dnspod
|
||||||
|
LUCI_DEPENDS:= +bash +curl
|
||||||
|
PKG_VERSION:=1.14
|
||||||
|
|
||||||
|
include $(TOPDIR)/feeds/luci/luci.mk
|
||||||
|
|
||||||
|
# call BuildPackage - OpenWrt buildroot signature
|
14
luci-app-dnspod/luasrc/controller/dnspod.lua
Normal file
14
luci-app-dnspod/luasrc/controller/dnspod.lua
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
--[[
|
||||||
|
LuCI - Lua Configuration Interface
|
||||||
|
|
||||||
|
#
|
||||||
|
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||||
|
#
|
||||||
|
]]--
|
||||||
|
module("luci.controller.dnspod", package.seeall)
|
||||||
|
|
||||||
|
function index()
|
||||||
|
entry({"admin", "network", "dnspod"}, cbi("dnspod"), _("动态DNSPOD"), 59)
|
||||||
|
end
|
135
luci-app-dnspod/luasrc/model/cbi/dnspod.lua
Normal file
135
luci-app-dnspod/luasrc/model/cbi/dnspod.lua
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
--[[
|
||||||
|
LuCI - Lua Configuration Interface
|
||||||
|
|
||||||
|
#
|
||||||
|
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||||
|
#
|
||||||
|
]]--
|
||||||
|
|
||||||
|
require("luci.sys")
|
||||||
|
|
||||||
|
if luci.sys.call("ps -w | grep ddnspod |grep -v grep >/dev/null") == 0 then
|
||||||
|
m = Map("dnspod", translate("动态DNSPOD"), "%s - %s" %{translate("DDNSPOD"), translate("<strong><font color=\"green\">Running</font></strong>")})
|
||||||
|
else
|
||||||
|
m = Map("dnspod", translate("动态DNSPOD"), "%s - %s" %{translate("DDNSPOD"), translate("<strong><font color=\"red\">Not Running</font></strong>")})
|
||||||
|
end
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
s = m:section(TypedSection, "base_arg", translate("基本设置"))
|
||||||
|
s.addremove = false
|
||||||
|
s.anonymous = true
|
||||||
|
|
||||||
|
enable = s:option(Flag, "enabled", translate("Enable"), translate("Enable or disable server"))
|
||||||
|
enable.default = 0
|
||||||
|
enable.rmempty = false
|
||||||
|
|
||||||
|
o = s:option(Value,"time",translate("Inspection Time"),translate("域名检查间隔时间,单位秒"))
|
||||||
|
o.default = 600
|
||||||
|
o.rmempty=false
|
||||||
|
|
||||||
|
o = s:option(Button,"delete",translate("删除全部域名记录"))
|
||||||
|
o.inputstyle = "reset"
|
||||||
|
o.write = function()
|
||||||
|
luci.sys.call("cat /dev/null > /usr/share/dnspod/last.ip")
|
||||||
|
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnspod"))
|
||||||
|
end
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
s = m:section(TypedSection, "ip_last", translate("ip获取设置"))
|
||||||
|
s.addremove = false
|
||||||
|
s.anonymous = true
|
||||||
|
|
||||||
|
o = s:option(ListValue, "IPtype", translate("ip获取途径"))
|
||||||
|
o:value("1", translate("网络获取一"))
|
||||||
|
o:value("2", translate("网络获取二"))
|
||||||
|
o:value("3", translate("网络获取三"))
|
||||||
|
o:value("4", translate("网络获取四"))
|
||||||
|
o:value("5", translate("本地获取"))
|
||||||
|
o.default = 1
|
||||||
|
|
||||||
|
o = s:option(Value, "iface", translate("选择接口"))
|
||||||
|
o:value("wan", translate("WAN"))
|
||||||
|
o:value("lan", translate("LAN"))
|
||||||
|
o.default = "wan"
|
||||||
|
o:depends("IPtype", "5")
|
||||||
|
|
||||||
|
o = s:option(Value, "ipv6iface", translate("ipv6选择接口"))
|
||||||
|
o:value("wan", translate("WAN"))
|
||||||
|
o:value("lan", translate("LAN"))
|
||||||
|
o.default = "lan"
|
||||||
|
o:depends("IPtype", "5")
|
||||||
|
|
||||||
|
o = s:option(Value, "linenumber", translate("ipv6选择"))
|
||||||
|
o:value("1p", translate("第一行"))
|
||||||
|
o:value("2p", translate("第二行"))
|
||||||
|
o:value("3p", translate("第三行"))
|
||||||
|
o:value("4p", translate("第四行"))
|
||||||
|
o:value("5p", translate("第五行"))
|
||||||
|
o:value("6p", translate("第六行"))
|
||||||
|
o.default = "2p"
|
||||||
|
o:depends("IPtype", "5")
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
s = m:section(TypedSection, "login_mode", translate("账号设置"))
|
||||||
|
s.addremove = false
|
||||||
|
s.anonymous = true
|
||||||
|
|
||||||
|
o = s:option(ListValue, "mode", translate("解析模式"))
|
||||||
|
o:value("login", translate("账号解析"))
|
||||||
|
o:value("token", translate("token解析"))
|
||||||
|
|
||||||
|
email = s:option(Value, "login_email", translate("登录邮箱"),"登录DNSPOD的用户名")
|
||||||
|
email:depends("mode", "login")
|
||||||
|
pass = s:option(Value, "login_password", translate("登录密码"),"登录DNSPOD的密码")
|
||||||
|
pass.password=true
|
||||||
|
pass:depends("mode", "login")
|
||||||
|
|
||||||
|
token = s:option(Value, "artoken", translate("ID,TOKEN"))
|
||||||
|
token:depends("mode", "token")
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
s = m:section(TypedSection, "domain_name", translate("域名"))
|
||||||
|
s.template = "cbi/tblsection"
|
||||||
|
s.anonymous = true
|
||||||
|
s.addremove = true
|
||||||
|
s.sortable = true
|
||||||
|
|
||||||
|
record_type = s:option(ListValue, "record_type", translate("记录类型"),"A,AAAA")
|
||||||
|
record_type:value("A", translate("A"))
|
||||||
|
record_type:value("AAAA", translate("AAAA"))
|
||||||
|
|
||||||
|
sub = s:option(Value, "sub_domain", translate("子域名"),"想要解析的子域名,例如:www")
|
||||||
|
|
||||||
|
main = s:option(Value, "main_domain", translate("主域名"),"想要解析的主域名,例如:baidu.com")
|
||||||
|
|
||||||
|
comment = s:option(Value, "comment", translate("Comment"))
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
s=m:section(TypedSection,"base",translate("Update Log"))
|
||||||
|
s.anonymous=true
|
||||||
|
local a="/var/log/ddnspod.log"
|
||||||
|
tvlog=s:option(TextValue,"sylogtext")
|
||||||
|
tvlog.rows=16
|
||||||
|
tvlog.readonly="readonly"
|
||||||
|
tvlog.wrap="off"
|
||||||
|
|
||||||
|
function tvlog.cfgvalue(s,s)
|
||||||
|
sylogtext=""
|
||||||
|
if a and nixio.fs.access(a) then
|
||||||
|
sylogtext=luci.sys.exec("tail -n 100 %s"%a)
|
||||||
|
end
|
||||||
|
return sylogtext
|
||||||
|
end
|
||||||
|
|
||||||
|
tvlog.write=function(s,s,s)
|
||||||
|
end
|
||||||
|
|
||||||
|
local apply = luci.http.formvalue("cbi.apply")
|
||||||
|
if apply then
|
||||||
|
io.popen("/etc/init.d/dnspod restart &")
|
||||||
|
end
|
||||||
|
|
||||||
|
return m
|
6
luci-app-dnspod/po/zh-cn/dnspod.po
Normal file
6
luci-app-dnspod/po/zh-cn/dnspod.po
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgid "Enable or disable server"
|
||||||
|
msgstr "启用或禁用服务"
|
||||||
|
|
25
luci-app-dnspod/root/etc/config/dnspod
Normal file
25
luci-app-dnspod/root/etc/config/dnspod
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
config base_arg 'base_arg'
|
||||||
|
option enabled '0'
|
||||||
|
option time '600'
|
||||||
|
|
||||||
|
config domain_name
|
||||||
|
option record_type 'AAAA'
|
||||||
|
option sub_domain 'ipv6'
|
||||||
|
option main_domain '12345.xyz'
|
||||||
|
|
||||||
|
config domain_name
|
||||||
|
option record_type 'A'
|
||||||
|
option sub_domain 'www'
|
||||||
|
option main_domain '12345.xyz'
|
||||||
|
|
||||||
|
config ip_last
|
||||||
|
option ip_all '2'
|
||||||
|
option IPtype '1'
|
||||||
|
|
||||||
|
config login_mode
|
||||||
|
option mode 'token'
|
||||||
|
option artoken '12424,532453245345b2301e22bca69b1f06ef55'
|
||||||
|
|
||||||
|
config base
|
||||||
|
|
70
luci-app-dnspod/root/etc/init.d/dnspod
Normal file
70
luci-app-dnspod/root/etc/init.d/dnspod
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
START=80
|
||||||
|
|
||||||
|
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
|
logfile="/var/log/ddnspod.log"
|
||||||
|
|
||||||
|
uci_get_by_name() {
|
||||||
|
local ret=$(uci get dnspod.$1.$2 2>/dev/null)
|
||||||
|
echo ${ret:=$3}
|
||||||
|
}
|
||||||
|
|
||||||
|
start(){
|
||||||
|
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||||
|
if [ $enable -eq 1 ]; then
|
||||||
|
sleeptime=$(uci get dnspod.base_arg.time 2>/dev/null)
|
||||||
|
icount=`ps -w | grep ddnspod.sh |grep -v grep| wc -l`
|
||||||
|
if [ $icount = 1 ] ;then
|
||||||
|
kill -9 $(ps | grep ddnspod.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||||
|
cat /dev/null > /var/log/ddnspod.log
|
||||||
|
cat /dev/null > /var/log/ddnspod1.log
|
||||||
|
cat /dev/null > /usr/share/dnspod/dns.conf
|
||||||
|
fi
|
||||||
|
local login_email=$(uci get dnspod.@login_mode[0].login_email 2>/dev/null)
|
||||||
|
local login_password=$(uci get dnspod.@login_mode[0].login_password 2>/dev/null)
|
||||||
|
local artoken=$(uci get dnspod.@login_mode[0].artoken 2>/dev/null)
|
||||||
|
rm -f /usr/share/dnspod/dns.conf
|
||||||
|
|
||||||
|
cat >>/usr/share/dnspod/dns.conf <<EOF
|
||||||
|
# For security reasons, it is recommended that you use token-based auth instead
|
||||||
|
arMail="$login_email"
|
||||||
|
arPass="$login_password"
|
||||||
|
|
||||||
|
# Combine your token ID and token together as follows
|
||||||
|
arToken="$artoken"
|
||||||
|
|
||||||
|
# Place each domain you want to check as follows
|
||||||
|
# you can have multiple arDdnsCheck blocks
|
||||||
|
EOF
|
||||||
|
|
||||||
|
for arDdnsCheck in $(uci -X show dnspod | grep domain_name | awk -F'[.=]' '{print $2}'); do
|
||||||
|
local main_domain=$(uci_get_by_name $arDdnsCheck main_domain)
|
||||||
|
local sub_domain=$(uci_get_by_name $arDdnsCheck sub_domain)
|
||||||
|
local record_type=$(uci_get_by_name $arDdnsCheck record_type)
|
||||||
|
|
||||||
|
cat >>/usr/share/dnspod/dns.conf <<EOF
|
||||||
|
arDdnsCheck "$main_domain" "$sub_domain" "$record_type"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
done
|
||||||
|
sleep 2
|
||||||
|
bash /usr/share/dnspod/ddnspod.sh >> /var/log/ddnspod1.log 2>&1 &
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>正在运行:检查更新DNS记录间隔时间为${sleeptime}秒<<<<<<<<" >> ${logfile}
|
||||||
|
|
||||||
|
#nohup /usr/share/dnspod/ddnspod.sh > /var/log/ddnspod.log 2>&1 &
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
stop()
|
||||||
|
{
|
||||||
|
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||||
|
if [ $enable -ne 1 ]; then
|
||||||
|
kill -9 $(ps | grep ddnspod.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||||
|
kill $(ps -w | grep ddnspod |grep -v grep) >/dev/null 2>&1
|
||||||
|
cat /dev/null > /var/log/ddnspod1.log
|
||||||
|
cat /dev/null > /usr/share/dnspod/dns.conf
|
||||||
|
cat /dev/null > /var/log/ddnspod.log && echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>停止运行:DNS记录以保存<<<<<<<<" >> ${logfile}
|
||||||
|
fi
|
||||||
|
}
|
14
luci-app-dnspod/root/etc/uci-defaults/luci-dnspod
Normal file
14
luci-app-dnspod/root/etc/uci-defaults/luci-dnspod
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
uci -q batch <<-EOF >/dev/null
|
||||||
|
delete ucitrack.@dnspod[-1]
|
||||||
|
add ucitrack dnspod
|
||||||
|
set ucitrack.@dnspod[-1].init=dnspod
|
||||||
|
commit ucitrack
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
/etc/init.d/dnspod stop
|
||||||
|
|
||||||
|
rm -f /tmp/luci-indexcache
|
||||||
|
exit 0
|
357
luci-app-dnspod/root/usr/share/dnspod/ddnspod.sh
Normal file
357
luci-app-dnspod/root/usr/share/dnspod/ddnspod.sh
Normal file
@ -0,0 +1,357 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# AnripDdns v5.08
|
||||||
|
# Dynamic DNS using DNSPod API
|
||||||
|
# Original by anrip<mail@anrip.com>, http://www.anrip.com/ddnspod
|
||||||
|
# Edited by ProfFan
|
||||||
|
# Edited by dz
|
||||||
|
#################################################
|
||||||
|
enable=1
|
||||||
|
sleeptime=60
|
||||||
|
ip_mode=2
|
||||||
|
WanIp=""
|
||||||
|
LastIpFile=/usr/share/dnspod/last.ip
|
||||||
|
logfile="/var/log/ddnspod.log"
|
||||||
|
sleeptime=$(uci get dnspod.base_arg.time 2>/dev/null)
|
||||||
|
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||||
|
IPtype=$(uci get dnspod.@ip_last[0].IPtype 2>/dev/null)
|
||||||
|
iface=$(uci get dnspod.@ip_last[0].iface 2>/dev/null)
|
||||||
|
ipv6iface=$(uci get dnspod.@ip_last[0].ipv6iface 2>/dev/null)
|
||||||
|
linenumber=$(uci get dnspod.@ip_last[0].linenumber 2>/dev/null)
|
||||||
|
|
||||||
|
clean_log(){
|
||||||
|
logrow=$(grep -c "" ${logfile})
|
||||||
|
if [ $logrow -ge 100 ];then
|
||||||
|
cat /dev/null > ${logfile}
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") Log条数超限,清空处理!" >> ${logfile}
|
||||||
|
fi
|
||||||
|
|
||||||
|
logrow1=$(grep -c "" ${logfile1})
|
||||||
|
if [ $logrow1 -ge 300 ];then
|
||||||
|
cat /dev/null > ${logfile1}
|
||||||
|
echo "Log条数超限,清空处理!" >> ${logfile1}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
while [ "$enable" = "1" ];
|
||||||
|
do
|
||||||
|
|
||||||
|
clean_log
|
||||||
|
|
||||||
|
function getPublicIp() {
|
||||||
|
record_type=$record_type
|
||||||
|
if [ $record_type = 'AAAA' ]; then
|
||||||
|
case $IPtype in
|
||||||
|
'1')
|
||||||
|
WanIp=`curl -6 -s 'https://api.myip.com' | grep ip |sed 's/.*ip":"\([^"]*\)".*/\1/g'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'2')
|
||||||
|
WanIp=`curl -6 -s 'http://ip-api.com/json/?fields=query' | grep query |sed 's/.*query":"\([^"]*\)".*/\1/g'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'3')
|
||||||
|
WanIp=`curl -6 -s 'https://ipapi.co/ip/'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'4')
|
||||||
|
WanIp=`curl -6 -s 'https://ifconfig.co'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'5')
|
||||||
|
WanIp=`ubus call network.interface.$ipv6iface status | grep '"address"' | grep -oE '([a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){0,7}::[a-f0-9]{0,4}(:[a-f0-9]{1,4}){0,7})' |sed -n ''$linenumber''`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'6')
|
||||||
|
WanIp=`curl -6 -s 'https://ip6.seeip.org'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
case $IPtype in
|
||||||
|
'1')
|
||||||
|
#WanIp=`curl -4 -s 'https://api.myip.com' | grep ip |sed 's/.*ip":"\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)".*/\1/g'`
|
||||||
|
WanIp=`curl -sL --connect-timeout 3 14.215.150.17:6666`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'2')
|
||||||
|
#WanIp=`curl -4 -s 'http://ip-api.com/json/?fields=query' | grep query |sed 's/.*query":"\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)".*/\1/g'`
|
||||||
|
WanIp=`curl -sL --connect-timeout 3 members.3322.org/dyndns/getip`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'3')
|
||||||
|
WanIp=`curl -4 -s 'https://ipapi.co/ip/'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'4')
|
||||||
|
WanIp=`curl -4 -s 'https://ifconfig.co'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'5')
|
||||||
|
WanIp=`ubus call network.interface.$iface status | grep '"address"' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
'6')
|
||||||
|
WanIp=`curl -4 -s 'https://ip4.seeip.org'`
|
||||||
|
echo $WanIp
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS Detection
|
||||||
|
case $(uname) in
|
||||||
|
'Linux')
|
||||||
|
echo "Linux"
|
||||||
|
arIpAddress() {
|
||||||
|
# local extip
|
||||||
|
# extip=$(ip -o -4 addr list | grep -Ev '\s(docker|lo)' | awk '{print $4}' | cut -d/ -f1 | grep -Ev '(^127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.1[6-9]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.2[0-9]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.3[0-1]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^192\.168\.[0-9]{1,3}\.[0-9]{1,3}$)')
|
||||||
|
# if [ "x${extip}" = "x" ]; then
|
||||||
|
# extip=$(ip -o -4 addr list | grep -Ev '\s(docker|lo)' | awk '{print $4}' | cut -d/ -f1 )
|
||||||
|
# fi
|
||||||
|
# echo $extip
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
IPtype="1"
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
IPtype="2"
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
IPtype="3"
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
IPtype="4"
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${WanIp}" = "x" ]; then
|
||||||
|
IPtype="6"
|
||||||
|
WanIp=$(getPublicIp)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo $WanIp
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
'FreeBSD')
|
||||||
|
echo 'FreeBSD'
|
||||||
|
exit 100
|
||||||
|
;;
|
||||||
|
'WindowsNT')
|
||||||
|
echo "Windows"
|
||||||
|
exit 100
|
||||||
|
;;
|
||||||
|
'Darwin')
|
||||||
|
echo "Mac"
|
||||||
|
arIpAddress() {
|
||||||
|
ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
'SunOS')
|
||||||
|
echo 'Solaris'
|
||||||
|
exit 100
|
||||||
|
;;
|
||||||
|
'AIX')
|
||||||
|
echo 'AIX'
|
||||||
|
exit 100
|
||||||
|
;;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Get script dir
|
||||||
|
# See: http://stackoverflow.com/a/29835459/4449544
|
||||||
|
rreadlink() ( # Execute the function in a *subshell* to localize variables and the effect of `cd`.
|
||||||
|
|
||||||
|
target=$1 fname= targetDir= CDPATH=
|
||||||
|
|
||||||
|
# Try to make the execution environment as predictable as possible:
|
||||||
|
# All commands below are invoked via `command`, so we must make sure that `command`
|
||||||
|
# itself is not redefined as an alias or shell function.
|
||||||
|
# (Note that command is too inconsistent across shells, so we don't use it.)
|
||||||
|
# `command` is a *builtin* in bash, dash, ksh, zsh, and some platforms do not even have
|
||||||
|
# an external utility version of it (e.g, Ubuntu).
|
||||||
|
# `command` bypasses aliases and shell functions and also finds builtins
|
||||||
|
# in bash, dash, and ksh. In zsh, option POSIX_BUILTINS must be turned on for that
|
||||||
|
# to happen.
|
||||||
|
{ \unalias command; \unset -f command; } >/dev/null 2>&1
|
||||||
|
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on # make zsh find *builtins* with `command` too.
|
||||||
|
|
||||||
|
while :; do # Resolve potential symlinks until the ultimate target is found.
|
||||||
|
[ -L "$target" ] || [ -e "$target" ] || { command printf '%s\n' "ERROR: '$target' does not exist." >&2; return 1; }
|
||||||
|
command cd "$(command dirname -- "$target")" # Change to target dir; necessary for correct resolution of target path.
|
||||||
|
fname=$(command basename -- "$target") # Extract filename.
|
||||||
|
[ "$fname" = '/' ] && fname='' # !! curiously, `basename /` returns '/'
|
||||||
|
if [ -L "$fname" ]; then
|
||||||
|
# Extract [next] target path, which may be defined
|
||||||
|
# *relative* to the symlink's own directory.
|
||||||
|
# Note: We parse `ls -l` output to find the symlink target
|
||||||
|
# which is the only POSIX-compliant, albeit somewhat fragile, way.
|
||||||
|
target=$(command ls -l "$fname")
|
||||||
|
target=${target#* -> }
|
||||||
|
continue # Resolve [next] symlink target.
|
||||||
|
fi
|
||||||
|
break # Ultimate target reached.
|
||||||
|
done
|
||||||
|
targetDir=$(command pwd -P) # Get canonical dir. path
|
||||||
|
# Output the ultimate target's canonical path.
|
||||||
|
# Note that we manually resolve paths ending in /. and /.. to make sure we have a normalized path.
|
||||||
|
if [ "$fname" = '.' ]; then
|
||||||
|
command printf '%s\n' "${targetDir%/}"
|
||||||
|
elif [ "$fname" = '..' ]; then
|
||||||
|
# Caveat: something like /var/.. will resolve to /private (assuming /var@ -> /private/var), i.e. the '..' is applied
|
||||||
|
# AFTER canonicalization.
|
||||||
|
command printf '%s\n' "$(command dirname -- "${targetDir}")"
|
||||||
|
else
|
||||||
|
command printf '%s\n' "${targetDir%/}/$fname"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
DIR=$(dirname -- "$(rreadlink "$0")")
|
||||||
|
|
||||||
|
# Global Variables:
|
||||||
|
|
||||||
|
# Token-based Authentication
|
||||||
|
arToken=""
|
||||||
|
# Account-based Authentication
|
||||||
|
arMail=""
|
||||||
|
arPass=""
|
||||||
|
|
||||||
|
# Load config
|
||||||
|
|
||||||
|
#. $DIR/dns.conf
|
||||||
|
|
||||||
|
# Get Domain IP
|
||||||
|
# arg: domain
|
||||||
|
arNslookup() {
|
||||||
|
#wget --quiet --output-document=- $inter$1
|
||||||
|
if [ ! -f $LastIpFile ]; then
|
||||||
|
echo ""
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat $LastIpFile | grep $1 | awk '{print $2}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get data
|
||||||
|
# arg: type data
|
||||||
|
arApiPost() {
|
||||||
|
local inter="https://dnsapi.cn/${1:?'Info.Version'}"
|
||||||
|
if [ "x${arToken}" = "x" ]; then # undefine token
|
||||||
|
local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
|
||||||
|
else
|
||||||
|
local param="login_token=${arToken}&format=json&${2}"
|
||||||
|
fi
|
||||||
|
curl -s -k -X POST $inter -d $param
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update
|
||||||
|
# arg: main domain sub domain
|
||||||
|
arDdnsUpdate() {
|
||||||
|
local domainID recordID recordRS recordCD myIP
|
||||||
|
# Get domain ID
|
||||||
|
domainID=$(arApiPost "Domain.Info" "domain=${1}")
|
||||||
|
domainID=$(echo $domainID | sed 's/.*{"id":"\([0-9]*\)".*/\1/')
|
||||||
|
|
||||||
|
# Update IP
|
||||||
|
arIpAddress
|
||||||
|
myIP=$(arIpAddress)
|
||||||
|
|
||||||
|
if echo $myIP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
|
||||||
|
post_type="Record.Ddns"
|
||||||
|
record_types="A"
|
||||||
|
else
|
||||||
|
post_type="Record.Modify"
|
||||||
|
record_types="AAAA"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get Record ID
|
||||||
|
recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}&record_type=${record_types}&record_line=默认")
|
||||||
|
recordID=$(echo $recordID | sed 's/.*\[{"id":"\([0-9]*\)".*/\1/')
|
||||||
|
|
||||||
|
recordRS=$(arApiPost "$post_type" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_type=${record_types}&value=${myIP}&record_line=默认")
|
||||||
|
recordCD=$(echo $recordRS | sed 's/.*{"code":"\([0-9]*\)".*/\1/')
|
||||||
|
|
||||||
|
# Output IP
|
||||||
|
if [ "$recordCD" = "1" ]; then
|
||||||
|
echo $recordRS | sed 's/.*,"value":"\([^"]*\)".*/\1/'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# Echo error message
|
||||||
|
echo $recordRS | sed 's/.*,"message":"\([^"]*\)".*/\1/'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# DDNS Check
|
||||||
|
# Arg: Main Sub
|
||||||
|
arDdnsCheck() {
|
||||||
|
record_type=${3}
|
||||||
|
#arIpAddress
|
||||||
|
|
||||||
|
local postRS
|
||||||
|
local hostIP=$(arIpAddress)
|
||||||
|
local lastIP=$(arNslookup "${3}-${2}.${1}")
|
||||||
|
echo "domain name: ${2}.${1}"
|
||||||
|
echo "hostIP: ${3} ${hostIP}"
|
||||||
|
echo "lastIP: ${3} ${lastIP}"
|
||||||
|
if [ "$lastIP" != "$hostIP" ]; then
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 域名: ${2}.${1} 记录类型: ${3}" >> ${logfile}
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 当前IP: ${hostIP}" >> ${logfile}
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 记录IP: ${lastIP}" >> ${logfile}
|
||||||
|
echo "--- Update last.ip"
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 更新域名记录" >> ${logfile}
|
||||||
|
if [ -f $LastIpFile ]
|
||||||
|
then
|
||||||
|
grep -v "${3}-${2}.${1}" $LastIpFile > $LastIpFile.bak
|
||||||
|
fi
|
||||||
|
echo "${3}-${2}.${1} ${hostIP}" >> $LastIpFile.bak
|
||||||
|
mv $LastIpFile.bak $LastIpFile
|
||||||
|
|
||||||
|
echo "--- Update dns zone"
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 更新DNS日志" >> ${logfile}
|
||||||
|
postRS=$(arDdnsUpdate $1 $2)
|
||||||
|
echo "postRS: ${postRS}"
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") 输出记录: ${postRS}" >> ${logfile}
|
||||||
|
sleep 2
|
||||||
|
echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>正在运行:检查更新DNS记录间隔时间为${sleeptime}秒<<<<<<<<" >> ${logfile}
|
||||||
|
if [ $? -ne 1 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# DDNS
|
||||||
|
#echo ${#domains[@]}
|
||||||
|
#for index in ${!domains[@]}; do
|
||||||
|
# echo "${domains[index]} ${subdomains[index]}"
|
||||||
|
# arDdnsCheck "${domains[index]}" "${subdomains[index]}"
|
||||||
|
#done
|
||||||
|
|
||||||
|
date
|
||||||
|
. $DIR/dns.conf
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo "+++++++++++++++++++++++++++"
|
||||||
|
|
||||||
|
sleep ${sleeptime}
|
||||||
|
continue
|
||||||
|
done
|
12
luci-app-dnspod/root/usr/share/dnspod/dns.conf
Normal file
12
luci-app-dnspod/root/usr/share/dnspod/dns.conf
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# For security reasons, it is recommended that you use token-based auth instead
|
||||||
|
# arMail=""
|
||||||
|
# arPass=""
|
||||||
|
|
||||||
|
# Combine your token ID and token together as follows
|
||||||
|
arToken="6541626156242"
|
||||||
|
|
||||||
|
# Place each domain you want to check as follows
|
||||||
|
# you can have multiple arDdnsCheck blocks
|
||||||
|
arDdnsCheck "1" "11"
|
||||||
|
arDdnsCheck "2" "22"
|
||||||
|
arDdnsCheck "3" "33"
|
@ -11,7 +11,7 @@ THEME_NAME:=opentopd
|
|||||||
THEME_TITLE:=opentopd Theme
|
THEME_TITLE:=opentopd Theme
|
||||||
|
|
||||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||||
PKG_VERSION:=1.1.9
|
PKG_VERSION:=1.2.0
|
||||||
PKG_RELEASE:=20201007
|
PKG_RELEASE:=20201007
|
||||||
|
|
||||||
|
|
||||||
@ -19,4 +19,12 @@ include $(INCLUDE_DIR)/package.mk
|
|||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
include $(TOPDIR)/feeds/luci/luci.mk
|
||||||
|
|
||||||
|
|
||||||
|
define Package/luci-theme-opentopd/postinst
|
||||||
|
#!/bin/sh
|
||||||
|
rm -Rf /var/luci-modulecache
|
||||||
|
rm -Rf /var/luci-indexcache
|
||||||
|
exit 0
|
||||||
|
endef
|
||||||
|
|
||||||
# call BuildPackage - OpenWrt buildroot signature
|
# call BuildPackage - OpenWrt buildroot signature
|
||||||
|
@ -48,8 +48,10 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-expand_more:before {
|
|
||||||
content: "\e20b";
|
|
||||||
|
.icon-expand_more:before{
|
||||||
|
content: "\e20b";
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-menu:before {
|
.icon-menu:before {
|
||||||
|
@ -177,6 +177,7 @@ hr {
|
|||||||
border-color: #EEE;
|
border-color: #EEE;
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
top: 4rem;
|
top: 4rem;
|
||||||
bottom: 0rem;
|
bottom: 0rem;
|
||||||
@ -184,33 +185,36 @@ hr {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
height: calc(100% - 4rem);
|
height: calc(100% - 4rem);
|
||||||
}
|
}
|
||||||
|
.main > .loading {
|
||||||
.main>.loading {
|
position: fixed;
|
||||||
position: fixed;
|
z-index: 1000;
|
||||||
width: 100%;
|
top: 0;
|
||||||
height: 100%;
|
display: block;
|
||||||
z-index: 1000;
|
width: 100%;
|
||||||
display: block;
|
height: 100%;
|
||||||
background-color: rgba(239,195,145,1.00);
|
pointer-events: none;
|
||||||
top: 0;
|
background-color: #rgba(239,195,145,1.00);
|
||||||
}
|
}
|
||||||
|
.main > .loading > span {
|
||||||
.main>.loading>span {
|
font-family: monospace;
|
||||||
display: block;
|
font-size: 2rem;
|
||||||
text-align: center;
|
font-size-adjust: 0.35;
|
||||||
margin-top: 2rem;
|
position: relative;
|
||||||
color: #888;
|
top: 12.5%;
|
||||||
font-size: 1.2rem;
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
color: #888;
|
||||||
}
|
}
|
||||||
|
.main > .loading > span > .loading-img {
|
||||||
.main>.loading>span>.loading-img:before {
|
position: relative;
|
||||||
content: "\e603";
|
top: 0.1rem;
|
||||||
}
|
left: 0.05rem;
|
||||||
|
display: inline-block;
|
||||||
.main>.loading>span>.loading-img {
|
width: 1.25rem;
|
||||||
animation: anim-rotate 2s infinite linear;
|
height: 1.25rem;
|
||||||
margin-right: 0.2rem;
|
margin-right: 1rem;
|
||||||
display: inline-block;
|
animation: anim-rotate 2s infinite linear;
|
||||||
|
background: url(../icons/spinner.svg) no-repeat center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes anim-rotate {
|
@keyframes anim-rotate {
|
||||||
@ -243,6 +247,7 @@ header {
|
|||||||
header .container {
|
header .container {
|
||||||
margin-top: .5rem;
|
margin-top: .5rem;
|
||||||
padding: .5rem 1rem 0 1rem
|
padding: .5rem 1rem 0 1rem
|
||||||
|
|
||||||
}
|
}
|
||||||
header .container .pull-right>* {
|
header .container .pull-right>* {
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -265,16 +270,19 @@ header .fill {
|
|||||||
}
|
}
|
||||||
header .fill .container {
|
header .fill .container {
|
||||||
height: 3rem;
|
height: 3rem;
|
||||||
padding: 0 1.25rem;
|
padding: 0 1rem;
|
||||||
background: #333;
|
background: #333;
|
||||||
background-color:#333;
|
background-color:#333;
|
||||||
|
vertical-align:middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
header>.container>.brand, header > .fill > .container > .brand {
|
header>.container>.brand, header > .fill > .container > .brand {
|
||||||
font-size: 1.3rem;
|
font-size: 1.3rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
padding-left: 1rem;
|
padding-left: 1rem;
|
||||||
|
|
||||||
cursor: default;
|
cursor: default;
|
||||||
vertical-align: text-bottom;
|
vertical-align: text-bottom;
|
||||||
display: none
|
display: none
|
||||||
@ -283,6 +291,9 @@ header>.container>.brand, header > .fill > .container > .brand {
|
|||||||
footer {
|
footer {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-shadow: 0 0 2px #bbb;
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
font-size: .8rem
|
font-size: .8rem
|
||||||
}
|
}
|
||||||
@ -534,6 +545,8 @@ background-color:#fff;
|
|||||||
li {
|
li {
|
||||||
list-style-type: none
|
list-style-type: none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.main .main-right {
|
.main .main-right {
|
||||||
width: calc(100% - 15rem);
|
width: calc(100% - 15rem);
|
||||||
float: right;
|
float: right;
|
||||||
@ -579,37 +592,14 @@ li {
|
|||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
text-decoration: inherit
|
text-decoration: inherit
|
||||||
}
|
}
|
||||||
.main .loading {
|
|
||||||
position: fixed;
|
/* button style */
|
||||||
width: 100%;
|
.btn,
|
||||||
height: 100%;
|
|
||||||
z-index: 2000;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
background-color: #F4BF8B;
|
|
||||||
top: 0
|
|
||||||
}
|
|
||||||
.main .loading span {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 2rem;
|
|
||||||
color: #fe7a00;
|
|
||||||
font-size: 2rem
|
|
||||||
}
|
|
||||||
.main .loading span .loading-img {
|
|
||||||
animation: anim-rotate 2s infinite linear;
|
|
||||||
margin-right: .4rem;
|
|
||||||
display: inline-block
|
|
||||||
}
|
|
||||||
.main .loading span .loading-img::before {
|
|
||||||
content: "\e903"
|
|
||||||
}
|
|
||||||
.cbi-button {
|
.cbi-button {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
height: auto;
|
height: auto;
|
||||||
color: rgba(0,0,0,0.87);
|
color: #fe7a00;
|
||||||
background-color: #F0F0F0;
|
background-color: #F0F0F0;
|
||||||
transition: all .2s ease-in-out;
|
transition: all .2s ease-in-out;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -630,10 +620,50 @@ li {
|
|||||||
font-size: .875rem;
|
font-size: .875rem;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
line-height: 1em
|
line-height: 1em
|
||||||
|
|
||||||
}
|
}
|
||||||
.cbi-button:hover, .cbi-button:focus, .cbi-button:active {
|
|
||||||
outline: 0;
|
.cbi-button-up, .cbi-button-down {
|
||||||
text-decoration: none
|
display: inline-block;
|
||||||
|
min-width: 0;
|
||||||
|
padding: .2rem .6rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
color: #fe7a00 !important;
|
||||||
|
/*background: url(../icons/arrow.svg) no-repeat center;
|
||||||
|
background-size: 12px 20px;*/
|
||||||
|
content:"\e20b";
|
||||||
|
}
|
||||||
|
.cbi-button-up {
|
||||||
|
transform: scaleY(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-button:not(select) {
|
||||||
|
-webkit-appearance: none !important;
|
||||||
|
}
|
||||||
|
.btn:hover,
|
||||||
|
.btn:focus,
|
||||||
|
.btn:active,
|
||||||
|
.cbi-button:hover,
|
||||||
|
.cbi-button:focus,
|
||||||
|
.cbi-button:active,
|
||||||
|
.item:hover::after,
|
||||||
|
.item:focus::after,
|
||||||
|
.item:active::after,
|
||||||
|
.cbi-page-actions .cbi-button-apply + .cbi-button-save:hover,
|
||||||
|
.cbi-page-actions .cbi-button-apply + .cbi-button-save:focus,
|
||||||
|
.cbi-page-actions .cbi-button-apply + .cbi-button-save:active {
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
button:hover,
|
||||||
|
.btn:hover,
|
||||||
|
.btn:focus,
|
||||||
|
.cbi-button:hover,
|
||||||
|
.cbi-button:focus,
|
||||||
|
.item:hover::after,
|
||||||
|
.item:focus::after {
|
||||||
|
opacity: 0.7;
|
||||||
|
top:0.15rem;
|
||||||
}
|
}
|
||||||
.cbi-button:hover, .cbi-button:focus {
|
.cbi-button:hover, .cbi-button:focus {
|
||||||
box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.2)
|
box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.2)
|
||||||
@ -641,11 +671,12 @@ li {
|
|||||||
.cbi-button:active {
|
.cbi-button:active {
|
||||||
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)
|
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)
|
||||||
}
|
}
|
||||||
|
.btn:disabled,
|
||||||
.cbi-button:disabled {
|
.cbi-button:disabled {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
opacity: .6;
|
opacity: 0.6;
|
||||||
box-shadow: none
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
.cbi-button-check {
|
.cbi-button-check {
|
||||||
margin-top: .25rem !important
|
margin-top: .25rem !important
|
||||||
@ -692,7 +723,7 @@ form.inline+form.inline, .cbi-button+.cbi-button {
|
|||||||
min-width: 15rem
|
min-width: 15rem
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
min-width: 20rem;
|
min-width: 15rem;
|
||||||
appearance: none;
|
appearance: none;
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTY1MzQ4MDM3OTIyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4qIHsgdGV4dC1zaGFkb3c6IHRyYW5zcGFyZW50IDBweCAwcHggMHB4LCByZ2JhKDAsIDAsIDAsIDAuNSkgMHB4IDBweCAwcHggIWltcG9ydGFudDsgfQo8L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMjAuNDggMjQ1Ljc2aDk4My4wNEw1MTIgNzc4LjI0eiIgcC1pZD0iMjU4NCIgZmlsbD0iIzcwNzA3MCI+PC9wYXRoPjwvc3ZnPg==') !important;
|
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTY1MzQ4MDM3OTIyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4qIHsgdGV4dC1zaGFkb3c6IHRyYW5zcGFyZW50IDBweCAwcHggMHB4LCByZ2JhKDAsIDAsIDAsIDAuNSkgMHB4IDBweCAwcHggIWltcG9ydGFudDsgfQo8L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMjAuNDggMjQ1Ljc2aDk4My4wNEw1MTIgNzc4LjI0eiIgcC1pZD0iMjU4NCIgZmlsbD0iIzcwNzA3MCI+PC9wYXRoPjwvc3ZnPg==') !important;
|
||||||
@ -918,13 +949,7 @@ small {
|
|||||||
white-space: normal;
|
white-space: normal;
|
||||||
line-height: 1.42857143
|
line-height: 1.42857143
|
||||||
}
|
}
|
||||||
.cbi-button-up, .cbi-button-down {
|
|
||||||
display: inline-block;
|
|
||||||
min-width: 0;
|
|
||||||
padding: .2rem .6rem;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
color: #fe7a00 !important;
|
|
||||||
}
|
|
||||||
.cbi-optionals {
|
.cbi-optionals {
|
||||||
padding: 1rem 1rem 0 1rem;
|
padding: 1rem 1rem 0 1rem;
|
||||||
border-top: 1px solid #CCC
|
border-top: 1px solid #CCC
|
||||||
@ -1072,14 +1097,16 @@ td>table>tbody>tr>td, .td>.table>.tbody>.tr>.td {
|
|||||||
|
|
||||||
.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
|
.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
background-color: #e9ecef;
|
/* background-color: #e9ecef; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.td.cbi-section-actions {
|
.td.cbi-section-actions {
|
||||||
text-align: right;
|
/* text-align: right; */
|
||||||
vertical-align: middle
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.td.cbi-section-actions>* {
|
.td.cbi-section-actions>* {
|
||||||
display: flex
|
/* display: flex; */
|
||||||
}
|
}
|
||||||
.td.cbi-section-actions>*>*, .td.cbi-section-actions>*>form>* {
|
.td.cbi-section-actions>*>*, .td.cbi-section-actions>*>form>* {
|
||||||
flex: 1 1 4em;
|
flex: 1 1 4em;
|
||||||
@ -1161,6 +1188,7 @@ td>table>tbody>tr>td, .td>.table>.tbody>.tr>.td {
|
|||||||
display: none;
|
display: none;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 1.4rem
|
font-size: 1.4rem
|
||||||
|
|
||||||
}
|
}
|
||||||
.darkMask {
|
.darkMask {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -1189,19 +1217,22 @@ body.lang_pl.node-main-login .cbi-value-title {
|
|||||||
width: 12rem
|
width: 12rem
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fix Main Login*/
|
|
||||||
.node-main-login>.main>.main-right>header {
|
|
||||||
background: none !important;
|
|
||||||
box-shadow: none !important;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* fix Main Login */
|
||||||
|
|
||||||
|
.node-main-login .main .main-right header {
|
||||||
|
background: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
.node-main-login>.main>.main-right>header>.fill>.container {
|
.node-main-login>.main>.main-right>header>.fill>.container {
|
||||||
margin: 2rem auto;
|
margin: 2rem auto;
|
||||||
max-width: 1140px;
|
max-width: 1140px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-main-login>.main>.main-right>header>.fill>.container>.brand {
|
.node-main-login>.main>.main-right>header>.fill>.container>.brand {
|
||||||
|
font-size: 2rem;
|
||||||
|
color: #fe7a00;
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1210,16 +1241,13 @@ body.lang_pl.node-main-login .cbi-value-title {
|
|||||||
top: 0;
|
top: 0;
|
||||||
height: 100% !important;
|
height: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-main-login>.main>.main-left {
|
.node-main-login>.main>.main-left {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.node-main-login > .main > .main-right {
|
.node-main-login > .main > .main-right {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
.node-main-login .main .main-right .login-bg {
|
||||||
.node-main-login>.main>.main-right>.login-bg {
|
|
||||||
display: block;
|
display: block;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -1268,7 +1296,10 @@ body.lang_pl.node-main-login .cbi-value-title {
|
|||||||
margin-top: 2rem !important;
|
margin-top: 2rem !important;
|
||||||
background-color: #D5CAB6 !important;
|
background-color: #D5CAB6 !important;
|
||||||
border-radius: .375rem;
|
border-radius: .375rem;
|
||||||
box-shadow: rgba(0,0,0,0.75) 0 0 35px -5px;
|
/* text-align: left;
|
||||||
|
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
|
||||||
|
transition: box-shadow .25s, -webkit-box-shadow .25s;*/
|
||||||
|
box-shadow: rgba(0,0,0,0.75) 0 0 35px -5px;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1415,7 +1446,7 @@ body.lang_pl.node-main-login .cbi-value-title {
|
|||||||
line-height: 1;
|
line-height: 1;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
content: "\e901";
|
content: "\e910";
|
||||||
color: #adb5bd;
|
color: #adb5bd;
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -1563,19 +1594,7 @@ body.lang_pl.node-main-login .cbi-value-title {
|
|||||||
.cbi-rowstyle-2 .cbi-button-up, .cbi-rowstyle-2 .cbi-button-down {
|
.cbi-rowstyle-2 .cbi-button-up, .cbi-rowstyle-2 .cbi-button-down {
|
||||||
background-color: #FFF !important
|
background-color: #FFF !important
|
||||||
}
|
}
|
||||||
.cbi-button-up, .cbi-button-down, .cbi-value-helpicon, .showSide, .main>.loading>span {
|
|
||||||
font-family: 'advancedtomato' !important;
|
|
||||||
font-style: normal !important;
|
|
||||||
font-weight: normal !important;
|
|
||||||
font-variant: normal !important;
|
|
||||||
text-transform: none !important;
|
|
||||||
line-height: 1;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale
|
|
||||||
}
|
|
||||||
.cbi-button-up {
|
|
||||||
transform: rotate(180deg)
|
|
||||||
}
|
|
||||||
select {
|
select {
|
||||||
padding: .36rem .8rem;
|
padding: .36rem .8rem;
|
||||||
color: #555;
|
color: #555;
|
||||||
@ -1587,7 +1606,7 @@ select, input {
|
|||||||
font-size: .875rem;
|
font-size: .875rem;
|
||||||
transition: all .15s ease-in-out;
|
transition: all .15s ease-in-out;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
padding: .625rem .75rem;
|
padding: .75rem;
|
||||||
color: #8898aa;
|
color: #8898aa;
|
||||||
border: 1px solid #dee2e6;
|
border: 1px solid #dee2e6;
|
||||||
border-radius: .25rem;
|
border-radius: .25rem;
|
||||||
@ -1596,7 +1615,7 @@ select, input {
|
|||||||
box-shadow: 0 3px 2px rgba(233,236,239,0.05);
|
box-shadow: 0 3px 2px rgba(233,236,239,0.05);
|
||||||
outline: none;
|
outline: none;
|
||||||
transition: box-shadow .15s ease;
|
transition: box-shadow .15s ease;
|
||||||
margin: .25rem
|
margin: 0;
|
||||||
}
|
}
|
||||||
select:not([multiple="multiple"]):focus, input:focus {
|
select:not([multiple="multiple"]):focus, input:focus {
|
||||||
border-color: #fe7a00;
|
border-color: #fe7a00;
|
||||||
@ -2399,15 +2418,8 @@ div.cbi-value var, td.cbi-value-field var {
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
color: #0069D6
|
color: #0069D6
|
||||||
}
|
}
|
||||||
small {
|
|
||||||
font-size: 90%;
|
|
||||||
white-space: normal;
|
|
||||||
line-height: 1.42857143
|
|
||||||
}
|
|
||||||
.cbi-optionals {
|
|
||||||
padding: 1rem 1rem 0 1rem;
|
|
||||||
border-top: 1px solid #CCC
|
|
||||||
}
|
|
||||||
input[name="ping"], input[name="traceroute"], input[name="nslookup"] {
|
input[name="ping"], input[name="traceroute"], input[name="nslookup"] {
|
||||||
width: 80%
|
width: 80%
|
||||||
}
|
}
|
||||||
@ -2636,19 +2648,14 @@ input[name="ping"], input[name="traceroute"], input[name="nslookup"] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width:1600px) {
|
@media screen and (max-width:1600px) {
|
||||||
.cbi-value input[type="password"],
|
|
||||||
.cbi-value input[type="text"] {
|
.main-left {
|
||||||
min-width: 25rem;
|
width: calc(0% + 13rem);
|
||||||
}
|
}
|
||||||
.cbi-value-field .cbi-input-select {
|
|
||||||
min-width: 25rem;
|
.main-right {
|
||||||
|
width: calc(100% - 13rem);
|
||||||
}
|
}
|
||||||
.main .main-left {
|
|
||||||
width: calc(0% + 13rem)
|
|
||||||
}
|
|
||||||
.main .main-right {
|
|
||||||
width: calc(100% - 13rem)
|
|
||||||
}
|
|
||||||
.cbi-button {
|
.cbi-button {
|
||||||
font-size: .8rem
|
font-size: .8rem
|
||||||
}
|
}
|
||||||
@ -2677,22 +2684,18 @@ select {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width:1280px) {
|
@media screen and (max-width:1280px) {
|
||||||
.cbi-value input[type="password"],
|
|
||||||
.cbi-value input[type="text"] {
|
|
||||||
min-width: 22rem;
|
|
||||||
}
|
|
||||||
.cbi-value-field .cbi-input-select {
|
|
||||||
min-width: 22rem;
|
|
||||||
}
|
|
||||||
header>.container {
|
header>.container {
|
||||||
margin-top: .25rem
|
margin-top: .25rem
|
||||||
}
|
}
|
||||||
.main .main-left {
|
.main-left {
|
||||||
width: calc(0% + 13rem)
|
width: calc(0% + 13rem);
|
||||||
}
|
}
|
||||||
.main .main-right {
|
|
||||||
width: calc(100% - 13rem)
|
.main-right {
|
||||||
}
|
width: calc(100% - 13rem);
|
||||||
|
}
|
||||||
|
|
||||||
.cbi-tabmenu li a, .tabs li a {
|
.cbi-tabmenu li a, .tabs li a {
|
||||||
padding: .2rem .5rem
|
padding: .2rem .5rem
|
||||||
}
|
}
|
||||||
@ -2700,7 +2703,8 @@ header>.container {
|
|||||||
font-size: 1.1rem;
|
font-size: 1.1rem;
|
||||||
padding-bottom: 1rem
|
padding-bottom: 1rem
|
||||||
}
|
}
|
||||||
table {
|
.table,
|
||||||
|
table {
|
||||||
font-size: .7rem !important;
|
font-size: .7rem !important;
|
||||||
width: 100% !important
|
width: 100% !important
|
||||||
}
|
}
|
||||||
@ -2712,33 +2716,7 @@ table {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width:600px) {
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width:10px;
|
|
||||||
height:10px
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar, ::-webkit-scrollbar-corner {
|
|
||||||
background:transparent
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
background:#9e9e9e
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-thumb:hover {
|
|
||||||
background:#757575
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-thumb:active {
|
|
||||||
background:#424242
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width:992px) {
|
@media screen and (max-width:992px) {
|
||||||
.cbi-value input[type="password"],
|
|
||||||
.cbi-value input[type="text"] {
|
|
||||||
min-width: 20rem;
|
|
||||||
}
|
|
||||||
.cbi-value-field .cbi-input-select {
|
|
||||||
min-width: 20rem;
|
|
||||||
}
|
|
||||||
.main .main-left {
|
.main .main-left {
|
||||||
width: 0;
|
width: 0;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@ -2747,10 +2725,12 @@ background:#424242
|
|||||||
.main .main-right {
|
.main .main-right {
|
||||||
width: 100%
|
width: 100%
|
||||||
}
|
}
|
||||||
|
|
||||||
.showSide {
|
.showSide {
|
||||||
padding: .1rem;
|
padding: .5rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block
|
display: inline-block
|
||||||
|
|
||||||
}
|
}
|
||||||
.showSide:hover {
|
.showSide:hover {
|
||||||
text-decoration: none
|
text-decoration: none
|
||||||
@ -2759,14 +2739,17 @@ background:#424242
|
|||||||
content: "\e90d";
|
content: "\e90d";
|
||||||
font-size: 1.8rem
|
font-size: 1.8rem
|
||||||
}
|
}
|
||||||
|
.node-main-login .showSide {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
header>.fill>.container>.brand {
|
header>.fill>.container>.brand {
|
||||||
display: inline-block
|
display: inline-block
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.cbi-value-title {
|
.cbi-value-title {
|
||||||
width: 9rem;
|
width: 9rem;
|
||||||
padding-right: 1rem
|
padding-right: 1rem
|
||||||
}
|
}
|
||||||
.node-network-diagnostics>.main .cbi-map fieldset>div * {
|
.node-network-diagnostics>.main .cbi-map fieldset>div * {
|
||||||
width: 100% !important
|
width: 100% !important
|
||||||
@ -2783,31 +2766,31 @@ header>.fill>.container>.brand {
|
|||||||
.node-network-diagnostics>.main .cbi-map fieldset>div {
|
.node-network-diagnostics>.main .cbi-map fieldset>div {
|
||||||
width: 100% !important
|
width: 100% !important
|
||||||
}
|
}
|
||||||
|
.node-main-login>.main .cbi-value-title {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
#diag-rc-output>pre {
|
#diag-rc-output>pre {
|
||||||
font-size: 1rem
|
font-size: 1rem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width:480px) {
|
@media screen and (max-width:480px) {
|
||||||
body {
|
body {
|
||||||
font-size: .8rem
|
font-size: .8rem
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.cbi-section,
|
||||||
|
fieldset {
|
||||||
|
padding: 0;
|
||||||
|
margin: 1rem 0 0 0;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
.pull-right {
|
.pull-right {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 0rem !important
|
margin-top: 0rem !important
|
||||||
}
|
}
|
||||||
.cbi-value input[type="password"],
|
|
||||||
.cbi-value input[type="text"] {
|
|
||||||
min-width: 18rem;
|
|
||||||
}
|
|
||||||
.cbi-value-field .cbi-input-select {
|
|
||||||
min-width: 18rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
padding: 0;
|
|
||||||
margin: 1rem 0 0 0
|
|
||||||
}
|
|
||||||
.tabs {
|
.tabs {
|
||||||
margin: .5rem 0
|
margin: .5rem 0
|
||||||
}
|
}
|
||||||
@ -2830,6 +2813,10 @@ h2 {
|
|||||||
.main>.main-left>.nav>.slide>.slide-menu>li>a {
|
.main>.main-left>.nav>.slide>.slide-menu>li>a {
|
||||||
font-size: .9rem
|
font-size: .9rem
|
||||||
}
|
}
|
||||||
|
/* .main>.main-left>.nav>.slide>.menu:before {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
*/
|
||||||
.main>.main-left>.nav>.slide>.menu:after {
|
.main>.main-left>.nav>.slide>.menu:after {
|
||||||
top: .9rem
|
top: .9rem
|
||||||
}
|
}
|
||||||
@ -2848,30 +2835,97 @@ h2 {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 0 .25rem
|
padding: 0 .25rem
|
||||||
}
|
}
|
||||||
.cbi-value input[type="password"], .cbi-value input[type="text"] {
|
|
||||||
min-width: 15rem
|
.cbi-value input[type="password"],
|
||||||
}
|
.cbi-value input[type="text"] {
|
||||||
select {
|
min-width: 15rem;
|
||||||
width: 15rem;
|
|
||||||
min-width: auto
|
|
||||||
}
|
|
||||||
.cbi-value>.cbi-value-field {
|
|
||||||
display: inline-block
|
|
||||||
}
|
|
||||||
.cbi-value-field,
|
|
||||||
.cbi-value-description {
|
|
||||||
width: 95%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cbi-value-field .cbi-input-select {
|
||||||
|
min-width: 15rem;
|
||||||
|
}
|
||||||
|
/*
|
||||||
.cbi-value-field .cbi-input-select {
|
.cbi-value-field .cbi-input-select {
|
||||||
width: 95%;
|
width: 95%;
|
||||||
min-width: unset;
|
min-width: unset;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
.cbi-value-field,
|
||||||
|
.cbi-value-description {
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
select,
|
||||||
|
input {
|
||||||
|
width: 95%;
|
||||||
|
min-width: unset;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-value>.cbi-value-field {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
.cbi-value-field .cbi-input-textarea {
|
.cbi-value-field .cbi-input-textarea {
|
||||||
width: 95% !important;
|
width: 95% !important;
|
||||||
min-width: unset;
|
min-width: unset;
|
||||||
}
|
}
|
||||||
|
.node-main-login {
|
||||||
|
width: 18rem;
|
||||||
|
padding-left: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-tabmenu>li,
|
||||||
|
.tabs>li {
|
||||||
|
padding: 0.6rem 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-tabmenu>li>a,
|
||||||
|
.tabs>li>a {
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-page-actions>div>input {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-main-login>.main .container {
|
||||||
|
padding: 0.5rem 1rem 2rem 1rem;
|
||||||
|
margin: 0 auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-main-login>.main form>div:nth-last-child(1) {
|
||||||
|
margin-top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-main-login>.main .cbi-value-title {
|
||||||
|
width: 100% !important;
|
||||||
|
margin-top: 0rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 0 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-main-login>.main fieldset {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node-main-login .alert-message.warning {
|
||||||
|
width: calc(100% - 2rem);
|
||||||
|
padding: 1rem 1rem;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
.node-main-login>.main .container h2 {
|
||||||
|
|
||||||
|
margin: -70px auto 15px auto;
|
||||||
|
|
||||||
|
}
|
||||||
.cbi-value-field .cbi-input-checkbox, .cbi-value-field .cbi-input-radio {
|
.cbi-value-field .cbi-input-checkbox, .cbi-value-field .cbi-input-radio {
|
||||||
margin: 0 .25rem 0 .25rem;
|
margin: 0 .25rem 0 .25rem;
|
||||||
height: 1rem;
|
height: 1rem;
|
||||||
@ -2887,12 +2941,19 @@ height:0px
|
|||||||
.tabs>li>a {
|
.tabs>li>a {
|
||||||
font-size: .9rem
|
font-size: .9rem
|
||||||
}
|
}
|
||||||
select, input {
|
select,
|
||||||
font-size: .9rem
|
input {
|
||||||
}
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
.mobile-hide {
|
.mobile-hide {
|
||||||
display: none
|
display: none
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.panel-title {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
.node-status-realtime table>tbody>tr>td, .node-status-realtime table>tfoot>tr>td, .node-status-realtime table>thead>tr>td {
|
.node-status-realtime table>tbody>tr>td, .node-status-realtime table>tfoot>tr>td, .node-status-realtime table>thead>tr>td {
|
||||||
font-size: .8125rem;
|
font-size: .8125rem;
|
||||||
color: #525f7f;
|
color: #525f7f;
|
||||||
@ -2953,3 +3014,61 @@ width:10rem !important
|
|||||||
height: auto
|
height: auto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (min-width:600px) {
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width:10px;
|
||||||
|
height:10px
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar, ::-webkit-scrollbar-corner {
|
||||||
|
background:transparent
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background:#9e9e9e
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background:#757575
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb:active {
|
||||||
|
background:#424242
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (min-width: 992px) {
|
||||||
|
|
||||||
|
.cbi-value input[type="password"],
|
||||||
|
.cbi-value input[type="text"] {
|
||||||
|
min-width: 18rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-value-field .cbi-input-select {
|
||||||
|
min-width: 18rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (min-width: 1280px) {
|
||||||
|
|
||||||
|
.cbi-value input[type="password"],
|
||||||
|
.cbi-value input[type="text"] {
|
||||||
|
min-width: 22rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-value-field .cbi-input-select {
|
||||||
|
min-width: 22rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 1600px) {
|
||||||
|
|
||||||
|
.cbi-value input[type="password"],
|
||||||
|
.cbi-value input[type="text"] {
|
||||||
|
min-width: 25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cbi-value-field .cbi-input-select {
|
||||||
|
min-width: 25rem;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#202124" d="m8,10.033663l-6.898535,-6.013274l-1.060688,0.972974l7.959223,6.986249l7.959223,-6.986249l-1.060688,-0.972974l-6.898535,6.013274z"/></svg>
|
After Width: | Height: | Size: 221 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#888" d="M8,0c-4.355,0-7.898,3.481-7.998,7.812,0.092-3.779,2.966-6.812,6.498-6.812,3.59,0,6.5,3.134,6.5,7,0,0.828,0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5c0-4.418-3.582-8-8-8zM8,16c4.355,0,7.898-3.481,7.998-7.812-0.092,3.779-2.966,6.812-6.498,6.812-3.59,0-6.5-3.134-6.5-7,0-0.828-0.672-1.5-1.5-1.5s-1.5,0.672-1.5,1.5c0,4.418,3.582,8,8,8z"/></svg>
|
After Width: | Height: | Size: 413 B |
@ -1,9 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
if [ "$PKG_UPGRADE" != 1 ]; then
|
|
||||||
uci batch <<-EOF
|
uci batch <<-EOF
|
||||||
set luci.themes.opentopd=/luci-static/opentopd
|
set luci.themes.opentopd=/luci-static/opentopd
|
||||||
set luci.main.mediaurlbase=/luci-static/opentopd
|
set luci.main.mediaurlbase=/luci-static/opentopd
|
||||||
commit luci
|
commit luci
|
||||||
EOF
|
EOF
|
||||||
fi
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -1,8 +1,18 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2018-2020 Nick Peng (pymumu@gmail.com)
|
# Copyright (C) 2018-2020 Ruilin Peng (Nick) <pymumu@gmail.com>.
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
|
||||||
#
|
#
|
||||||
|
# smartdns is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# smartdns is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=smartdns
|
PKG_NAME:=smartdns
|
||||||
@ -21,7 +31,7 @@ PKG_BUILD_PARALLEL:=1
|
|||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
MAKE_VARS += VER=$(PKG_VERSION)
|
MAKE_VARS += VER=$(PKG_VERSION)
|
||||||
MAKE_PATH:=src
|
MAKE_PATH:=src
|
||||||
|
|
||||||
define Package/smartdns
|
define Package/smartdns
|
||||||
@ -34,7 +44,7 @@ endef
|
|||||||
|
|
||||||
define Package/smartdns/description
|
define Package/smartdns/description
|
||||||
SmartDNS is a local DNS server which accepts DNS query requests from local network clients,
|
SmartDNS is a local DNS server which accepts DNS query requests from local network clients,
|
||||||
gets DNS query results from multiple upstream DNS servers concurrently, and returns the fastest IP to clients.
|
get DNS query results from multiple upstream DNS servers concurrently, and returns the fastest IP to clients.
|
||||||
Unlike dnsmasq's all-servers, smartdns returns the fastest IP.
|
Unlike dnsmasq's all-servers, smartdns returns the fastest IP.
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -42,7 +52,6 @@ define Package/smartdns/conffiles
|
|||||||
/etc/config/smartdns
|
/etc/config/smartdns
|
||||||
/etc/smartdns/address.conf
|
/etc/smartdns/address.conf
|
||||||
/etc/smartdns/blacklist-ip.conf
|
/etc/smartdns/blacklist-ip.conf
|
||||||
/etc/smartdns/anti-ad-smartdns.conf
|
|
||||||
/etc/smartdns/custom.conf
|
/etc/smartdns/custom.conf
|
||||||
endef
|
endef
|
||||||
|
|
||||||
@ -53,7 +62,6 @@ define Package/smartdns/install
|
|||||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/address.conf $(1)/etc/smartdns/address.conf
|
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/address.conf $(1)/etc/smartdns/address.conf
|
||||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/blacklist-ip.conf $(1)/etc/smartdns/blacklist-ip.conf
|
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/blacklist-ip.conf $(1)/etc/smartdns/blacklist-ip.conf
|
||||||
$(INSTALL_CONF) $(CURDIR)/conf/custom.conf $(1)/etc/smartdns/custom.conf
|
$(INSTALL_CONF) $(CURDIR)/conf/custom.conf $(1)/etc/smartdns/custom.conf
|
||||||
$(INSTALL_CONF) $(CURDIR)/conf/anti-ad-smartdns.conf $(1)/etc/smartdns/anti-ad-smartdns.conf
|
|
||||||
$(INSTALL_CONF) $(CURDIR)/conf/smartdns.conf $(1)/etc/config/smartdns
|
$(INSTALL_CONF) $(CURDIR)/conf/smartdns.conf $(1)/etc/config/smartdns
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -15,5 +15,3 @@ cache-size 10240
|
|||||||
#bind: 6053 -group smartdns
|
#bind: 6053 -group smartdns
|
||||||
#bind: 7053 -group world
|
#bind: 7053 -group world
|
||||||
|
|
||||||
# 去广告文件,去掉#就可以使用自带去广告的文件了,也可以自己上传。
|
|
||||||
# conf-file /etc/smartdns/anti-ad-smartdns.conf
|
|
||||||
|
Loading…
Reference in New Issue
Block a user