mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
luci-app-turboacc: add the new offloading controller (#7223)
The new LuCI controller rewritten by Tianling, based on the previous version of luci-app-flowoffload written by Lean and modified by ntlf9t. This app merged flow offloading and shortcut-fe support into a single package, and you can switch to each of them easily without conflicts or rebooting. Also adapted the Qualcomm QCA NSS ECM driver (controlling is not supported yet). For DNS caching, the new promgrams dnsforwarder and dnsproxy were supported, the latter one supports more advanced procotols like DoT, DoH, and QUIC. It is useful for users whose ISP hijacked their DNS requests. Re-licensed under GPL-3.0-only. Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
parent
87d72cae64
commit
d05161e2a3
@ -1,45 +1,61 @@
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt
|
||||
# <https://immortalwrt.org>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dnsforwarder
|
||||
PKG_VERSION:=6.1.15
|
||||
PKG_RELEASE:=10
|
||||
PKG_RELEASE:=11
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/1715173329/dnsforwarder.git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_DATE:=2018-06-26
|
||||
PKG_SOURCE_VERSION:=587e61ae4d75dc976f538088b715a3c8ee26c144
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_MAINTAINER:=Dennis <openwrt@tossp.com>
|
||||
PKG_MIRROR_HASH:=7c141040ae384d254d90b3c3ee502d87330c9fdcd201ff29a669336a27b176d4
|
||||
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_LICENSE_FILE:=LICENSE
|
||||
PKG_MAINTAINER:=Dennis <openwrt@tossp.com>
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
define Package/dnsforwarder
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=A simple DNS forwarder
|
||||
URL:=https://github.com/holmium/dnsforwarder
|
||||
DEPENDS:=+wget +dnsmasq-full +libpthread +coreutils-base64
|
||||
DEPENDS:=+coreutils +coreutils-base64 +dnsmasq-full +libpthread +wget-ssl
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
Forwarding queries to customized domains (and their subdomains) to specified servers over a specified protocol (UDP or TCP). non-standard ports are supported.
|
||||
define Package/dnsforwarder/description
|
||||
Forwarding queries to customized domains (and their subdomains) to specified servers
|
||||
over a specified protocol (UDP or TCP). non-standard ports are supported.
|
||||
endef
|
||||
|
||||
CONFIGURE_ARGS += --enable-downloader=wget
|
||||
CONFIGURE_ARGS+= --enable-downloader=wget
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
define Package/dnsforwarder/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/dnsforwarder $(1)/usr/bin/dnsforwarder
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) files/etc/init.d/dnsforwarder $(1)/etc/init.d/dnsforwarder
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dnsforwarder $(1)/usr/bin/dnsforwarder
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_CONF) files/etc/config/dnsforwarder $(1)/etc/config/dnsforwarder
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) files/etc/init.d/dnsforwarder $(1)/etc/init.d/dnsforwarder
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/dnsforwarder
|
||||
$(INSTALL_CONF) files/etc/dnsforwarder/gfw.txt $(1)/etc/dnsforwarder/gfw.txt
|
||||
$(INSTALL_DIR) $(1)/usr/share/dnsforwarder
|
||||
$(INSTALL_BIN) files/usr/share/dnsforwarder/gfwlist.sh $(1)/usr/share/dnsforwarder/gfwlist.sh
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
$(eval $(call BuildPackage,dnsforwarder))
|
||||
|
50
package/lean/dnsforwarder/files/etc/init.d/dnsforwarder
Normal file → Executable file
50
package/lean/dnsforwarder/files/etc/init.d/dnsforwarder
Normal file → Executable file
@ -2,6 +2,10 @@
|
||||
|
||||
START=60
|
||||
|
||||
extra_command "makeconfig"
|
||||
extra_command "makegfwlist"
|
||||
extra_command "health"
|
||||
|
||||
CRON_FILE=/etc/crontabs/root
|
||||
PID_PATH=/var/run/dnsforwarder
|
||||
PID_FILE=${PID_PATH}/dns.pid
|
||||
@ -21,11 +25,11 @@ del_cron()
|
||||
/etc/init.d/cron restart
|
||||
}
|
||||
|
||||
fixflowoffload(){
|
||||
dns=$(uci get flowoffload.@flow[0].dns 2>/dev/null)
|
||||
fixturboacc(){
|
||||
dns=$(uci get turboacc.config.dns_caching 2>/dev/null)
|
||||
if [ $dns -eq 1 ]; then
|
||||
uci set flowoffload.@flow[0].dns=0 && uci commit flowoffload
|
||||
/etc/init.d/flowoffload restart
|
||||
uci set turboacc.config.dns_caching=0 && uci commit turboacc
|
||||
/etc/init.d/turboacc restart
|
||||
fi
|
||||
}
|
||||
|
||||
@ -51,7 +55,7 @@ health(){
|
||||
}
|
||||
|
||||
|
||||
makegfwlist(){
|
||||
makegfwlist(){
|
||||
local GFW_FILE='/etc/dnsforwarder/gfw.txt'
|
||||
local GFW_TMP_FILE='/tmp/dnsforwarder-gfw.old'
|
||||
local TSTIME=`date '+%Y-%m-%d %H:%M:%S'`
|
||||
@ -62,7 +66,7 @@ makegfwlist(){
|
||||
sort /tmp/edf.ts | uniq > /tmp/edf.ts
|
||||
/usr/share/dnsforwarder/gfwlist.sh -i -l -o /tmp/dnsforwarder-gfw.tmp --extra-domain-file /tmp/edf.ts
|
||||
if [ $? != 0 ]; then
|
||||
echo 'Failed to fetch gfwlist'
|
||||
echo 'Failed to fetch gfwlist'
|
||||
logger -t Failed to fetch gfwlist
|
||||
return 2
|
||||
fi
|
||||
@ -79,7 +83,7 @@ makegfwlist(){
|
||||
cp ${GFW_TMP_FILE} ${GFW_FILE}
|
||||
sed -i "s/TS_BUILD_TIME/${TSTIME}/g" ${GFW_FILE}
|
||||
printf "[\e[33m%s\e[0m]" "PID"
|
||||
restart
|
||||
restart
|
||||
fi
|
||||
}
|
||||
|
||||
@ -88,7 +92,7 @@ makeconfig () {
|
||||
|
||||
local log=$(uci get dnsforwarder.@config[0].log 2>/dev/null)
|
||||
local log_size=$(uci get dnsforwarder.@config[0].log_size 2>/dev/null)
|
||||
|
||||
|
||||
local gfw=$(uci get dnsforwarder.@config[0].gfw 2>/dev/null)
|
||||
|
||||
local udp_local=$(uci -d ',' get dnsforwarder.@config[0].udp_local 2>/dev/null)
|
||||
@ -105,8 +109,8 @@ makeconfig () {
|
||||
local cache=$(uci get dnsforwarder.@config[0].cache 2>/dev/null)
|
||||
local cache_size=$(uci get dnsforwarder.@config[0].cache_size 2>/dev/null)
|
||||
local cache_ignore=$(uci get dnsforwarder.@config[0].cache_ignore 2>/dev/null)
|
||||
local cache_control=$(uci get dnsforwarder.@config[0].cache_control 2>/dev/null)
|
||||
|
||||
local cache_control=$(uci get dnsforwarder.@config[0].cache_control 2>/dev/null)
|
||||
|
||||
local domain_statistic=$(uci get dnsforwarder.@config[0].domain_statistic 2>/dev/null)
|
||||
local udp_local_addr=$(uci get dnsforwarder.@arguments[0].addr 2>/dev/null)
|
||||
udp_local_addr=${udp_local_addr/:/#}
|
||||
@ -118,7 +122,7 @@ makeconfig () {
|
||||
echo "LogFileThresholdLength ${log_size}" >> $DNSFORWARDER_CONF
|
||||
echo "LogFileFolder /var/log" >> $DNSFORWARDER_CONF
|
||||
fi
|
||||
|
||||
|
||||
[ -n "$udp_local" ] && echo "UDPLocal ${udp_local}" >> $DNSFORWARDER_CONF
|
||||
[ -n "$udp_local_addr" ] && eval "makelist 'server=' $udp_local_addr" > /tmp/dnsmasq.dnsforwarder.conf
|
||||
sed -i "s/ //g" /tmp/dnsmasq.dnsforwarder.conf
|
||||
@ -126,7 +130,7 @@ makeconfig () {
|
||||
eval "makelist 'TCPGroup' $tcp_group" >> $DNSFORWARDER_CONF
|
||||
eval "makelist 'UDPGroup' $udp_group" >> $DNSFORWARDER_CONF
|
||||
eval "makelist 'GroupFile' $group_file" >> $DNSFORWARDER_CONF
|
||||
|
||||
|
||||
if [ $gfw = "true" ]; then
|
||||
echo 'GroupFile /etc/dnsforwarder/gfw.txt' >> $DNSFORWARDER_CONF
|
||||
fi
|
||||
@ -136,14 +140,14 @@ makeconfig () {
|
||||
echo "BlockNegativeResponse ${block_negative_resp}" >> $DNSFORWARDER_CONF
|
||||
eval "makelist 'AppendHosts' $append_host" >> $DNSFORWARDER_CONF
|
||||
echo "BlockIpv6WhenIpv4Exists ${block_ipv6}" >> $DNSFORWARDER_CONF
|
||||
|
||||
|
||||
echo "UseCache ${cache}" >> $DNSFORWARDER_CONF
|
||||
if [ $cache = "true" ]; then
|
||||
echo "CacheSize ${cache_size}" >> $DNSFORWARDER_CONF
|
||||
echo "MemoryCache false" >> $DNSFORWARDER_CONF
|
||||
echo "CacheFile /tmp/dnsforwarder.cache" >> $DNSFORWARDER_CONF
|
||||
echo "IgnoreTTL ${cache_ignore}" >> $DNSFORWARDER_CONF
|
||||
eval "makelist 'CacheControl' $cache_control" >> $DNSFORWARDER_CONF
|
||||
eval "makelist 'CacheControl' $cache_control" >> $DNSFORWARDER_CONF
|
||||
echo "ReloadCache true" >> $DNSFORWARDER_CONF
|
||||
echo "OverwriteCache true" >> $DNSFORWARDER_CONF
|
||||
fi
|
||||
@ -168,9 +172,9 @@ start()
|
||||
if [ $vt_enabled = 0 ]; then
|
||||
echo dnsforwarder is not enabled
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
makeconfig
|
||||
fixflowoffload
|
||||
fixturboacc
|
||||
dnsforwarder -f $DNSFORWARDER_CONF -d
|
||||
sleep 10
|
||||
mkdir -p ${PID_PATH}
|
||||
@ -182,14 +186,14 @@ start()
|
||||
local dnsmasq=$(uci get dnsforwarder.@arguments[0].dnsmasq 2>/dev/null)
|
||||
local addr=$(uci get dnsforwarder.@arguments[0].addr 2>/dev/null)
|
||||
[ -n "${addr}" ] && addr=${addr/:/#}
|
||||
|
||||
|
||||
if [ "${dnsmasq}" = "1" ]; then
|
||||
uci delete dhcp.@dnsmasq[0].server 2>/dev/null
|
||||
# uci add_list dhcp.@dnsmasq[0].server=$addr
|
||||
uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null
|
||||
uci set dhcp.@dnsmasq[0].noresolv=1
|
||||
uci set dhcp.@dnsmasq[0].serversfile=/tmp/dnsmasq.dnsforwarder.conf
|
||||
uci commit dhcp
|
||||
uci commit dhcp
|
||||
/etc/init.d/dnsmasq restart
|
||||
fi
|
||||
local dnsmasq_server_addr=$(uci get dhcp.@dnsmasq[0].server 2>/dev/null)
|
||||
@ -214,7 +218,7 @@ stop()
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto 2>/dev/null
|
||||
uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null
|
||||
uci delete dhcp.@dnsmasq[0].serversfile 2>/dev/null
|
||||
uci commit dhcp
|
||||
uci commit dhcp
|
||||
/etc/init.d/dnsmasq restart
|
||||
[ -e ${PID_FILE} ] && {
|
||||
pid=$(cat ${PID_FILE})
|
||||
@ -236,18 +240,18 @@ restart()
|
||||
logger -t There is dnsforwarder pid ${pid}
|
||||
stop
|
||||
} || {
|
||||
logger -t Dnsforwarder is not running
|
||||
logger -t Dnsforwarder is not running
|
||||
}
|
||||
sleep 7
|
||||
local vt_enabled=$(uci get dnsforwarder.@arguments[0].enabled 2>/dev/null)
|
||||
echo dnsforwarder status is ${vt_enabled}
|
||||
echo dnsforwarder status is ${vt_enabled}
|
||||
logger -t Dnsforwarder is initializing enabled is ${vt_enabled}
|
||||
if [ ${vt_enabled} = 1 ]; then
|
||||
[ -n "$pid" ] && {
|
||||
logger -t There is dnsforwarder pid ${pid}
|
||||
stop
|
||||
} || {
|
||||
logger -t Dnsforwarder is not running
|
||||
logger -t Dnsforwarder is not running
|
||||
}
|
||||
|
||||
logger -t Restarting dnsforwarder
|
||||
@ -256,5 +260,3 @@ restart()
|
||||
/etc/init.d/dnsforwarder disable
|
||||
fi
|
||||
}
|
||||
|
||||
EXTRA_COMMANDS="makeconfig makegfwlist health"
|
||||
|
0
package/lean/dnsforwarder/files/usr/share/dnsforwarder/gfwlist.sh
Normal file → Executable file
0
package/lean/dnsforwarder/files/usr/share/dnsforwarder/gfwlist.sh
Normal file → Executable file
74
package/lean/dnsproxy/Makefile
Normal file
74
package/lean/dnsproxy/Makefile
Normal file
@ -0,0 +1,74 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dnsproxy
|
||||
PKG_VERSION:=0.38.1
|
||||
PKG_RELEASE:=$(AUTORELESE)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=9a538d0d2e5f60234187c1e6092deb6c522aeb87c644d55c3cf8f38d384cd4f7
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_DNSPROXY_COMPRESS_GOPROXY \
|
||||
CONFIG_DNSPROXY_COMPRESS_UPX
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
GO_PKG:=github.com/AdguardTeam/dnsproxy
|
||||
GO_PKG_LDFLAGS:=-s -w
|
||||
GO_PKG_LDFLAGS_X:=main.VersionString=v$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include ../../lang/golang/golang-package.mk
|
||||
|
||||
define Package/dnsproxy/config
|
||||
config DNSPROXY_COMPRESS_GOPROXY
|
||||
bool "Compiling with GOPROXY proxy"
|
||||
default n
|
||||
|
||||
config DNSPROXY_COMPRESS_UPX
|
||||
bool "Compress executable files with UPX"
|
||||
default y
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_DNSPROXY_COMPRESS_GOPROXY),y)
|
||||
export GO111MODULE=on
|
||||
export GOPROXY=https://goproxy.baidu.com
|
||||
endif
|
||||
|
||||
define Package/dnsproxy
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=IP Addresses and Names
|
||||
TITLE:=Simple DNS proxy with DoH, DoT, DoQ and DNSCrypt support
|
||||
URL:=https://github.com/github.com/AdguardTeam/dnsproxy
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
||||
endef
|
||||
|
||||
define Package/dnsproxy/description
|
||||
A simple DNS proxy server that supports all existing DNS protocols including
|
||||
DNS-over-TLS, DNS-over-HTTPS, DNSCrypt, and DNS-over-QUIC.Moreover, it can
|
||||
work as a DNS-over-HTTPS, DNS-over-TLS or DNS-over-QUIC server.
|
||||
endef
|
||||
|
||||
GO_PKG_INSTALL_ARGS+= -mod vendor
|
||||
|
||||
define Build/Compile
|
||||
$(call GoPackage/Build/Compile)
|
||||
ifeq ($(CONFIG_DNSPROXY_COMPRESS_UPX),y)
|
||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/dnsproxy
|
||||
endif
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,dnsproxy))
|
||||
$(eval $(call BuildPackage,dnsproxy))
|
@ -1,16 +0,0 @@
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for Flow Offload
|
||||
LUCI_DEPENDS:=+kmod-ipt-offload +pdnsd-alt +kmod-tcp-bbr
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=1.0
|
||||
PKG_RELEASE:=21
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
@ -1,38 +0,0 @@
|
||||
module("luci.controller.flowoffload", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/flowoffload") then
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "network", "flowoffload"}, cbi("flowoffload"), _("Turbo ACC Center"), 1001).dependent = true
|
||||
entry({"admin", "network", "flowoffload", "status"}, call("action_status"))
|
||||
end
|
||||
|
||||
local function is_running()
|
||||
return luci.sys.call("[ `cat /sys/module/xt_FLOWOFFLOAD/refcnt 2>/dev/null` -gt 0 ] 2>/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_bbr()
|
||||
return luci.sys.call("[ `cat /proc/sys/net/ipv4/tcp_congestion_control 2>/dev/null` = bbr ] 2>/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_fullcone()
|
||||
return luci.sys.call("[ `cat /sys/module/xt_FULLCONENAT/refcnt 2>/dev/null` -gt 0 ] 2>/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_dns()
|
||||
return luci.sys.call("pgrep dnscache >/dev/null") == 0
|
||||
end
|
||||
|
||||
function action_status()
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json({
|
||||
run_state = is_running(),
|
||||
down_state = is_bbr(),
|
||||
up_state = is_fullcone(),
|
||||
dns_state = is_dns()
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -1,39 +0,0 @@
|
||||
local m,s,o
|
||||
local SYS = require "luci.sys"
|
||||
|
||||
m = Map("flowoffload")
|
||||
m.title = translate("Turbo ACC Acceleration Settings")
|
||||
m.description = translate("Opensource Linux Flow Offload driver (Fast Path or HWNAT)")
|
||||
m:append(Template("flow/status"))
|
||||
|
||||
s = m:section(TypedSection, "flow")
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
flow = s:option(Flag, "flow_offloading", translate("Enable"))
|
||||
flow.default = 0
|
||||
flow.rmempty = false
|
||||
flow.description = translate("Enable software flow offloading for connections. (decrease cpu load / increase routing throughput)")
|
||||
|
||||
hw = s:option(Flag, "flow_offloading_hw", translate("HWNAT"))
|
||||
hw.default = 0
|
||||
hw.rmempty = true
|
||||
hw.description = translate("Enable Hardware NAT (depends on hw capability like MTK 762x)")
|
||||
hw:depends("flow_offloading", 1)
|
||||
|
||||
bbr = s:option(Flag, "bbr", translate("Enable BBR"))
|
||||
bbr.default = 0
|
||||
bbr.rmempty = false
|
||||
bbr.description = translate("Bottleneck Bandwidth and Round-trip propagation time (BBR)")
|
||||
|
||||
dns = s:option(Flag, "dns", translate("DNS Acceleration"))
|
||||
dns.default = 0
|
||||
dns.rmempty = false
|
||||
dns.description = translate("Enable DNS Cache Acceleration and anti ISP DNS pollution")
|
||||
|
||||
o = s:option(Value, "dns_server", translate("Upsteam DNS Server"))
|
||||
o.default = "114.114.114.114,114.114.115.115"
|
||||
o.description = translate("Muitiple DNS server can saperate with ','")
|
||||
o:depends("dns", 1)
|
||||
|
||||
return m
|
@ -1,24 +0,0 @@
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:Running Status%></legend>
|
||||
<table width="100%" cellspacing="10" id="_xlnetacc_status_table">
|
||||
<tr><td width="33%">FLOW 加速状态</td><td id="_run_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">BBR 加速</td><td id="_down_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">FULLCONE NAT加速</td><td id="_up_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">DNS 加速</td><td id="_dns_state"><em><%:Collecting data...%></em></td></tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var run_state = document.getElementById('_run_state');
|
||||
var down_state = document.getElementById('_down_state');
|
||||
var up_state = document.getElementById('_up_state');
|
||||
var dns_state = document.getElementById('_dns_state');
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "flowoffload", "status")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
run_state.innerHTML = status.run_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
down_state.innerHTML = status.down_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
up_state.innerHTML = status.up_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
dns_state.innerHTML = status.dns_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
}
|
||||
});
|
||||
//]]></script>
|
@ -1,44 +0,0 @@
|
||||
msgid "Flow Offload ACC"
|
||||
msgstr "Flow Offload 转发加速"
|
||||
|
||||
msgid "Running Status"
|
||||
msgstr "运行状态"
|
||||
|
||||
msgid "Turbo ACC Center"
|
||||
msgstr "Turbo ACC 网络加速"
|
||||
|
||||
msgid "Turbo ACC Acceleration Settings"
|
||||
msgstr "Turbo ACC 网络加速设置"
|
||||
|
||||
msgid "Linux Flow Offload Forwarding Engine Settings"
|
||||
msgstr "Linux Flow Offload Forwarding 转发加速引擎设置"
|
||||
|
||||
msgid "Opensource Linux Flow Offload driver (Fast Path or HWNAT)"
|
||||
msgstr "开源 Linux Flow Offload 驱动 (支持 Fast Path 或者 HWNAT)"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enable software flow offloading for connections. (decrease cpu load / increase routing throughput)"
|
||||
msgstr "开启 Flow Offloading 转发加速. (降低CPU占用 / 增强路由转发性能,和多WAN或者QOS功能可能会冲突)"
|
||||
|
||||
msgid "Enable Hardware NAT (depends on hw capability like MTK 762x)"
|
||||
msgstr "启用硬件HWNAT加速(依赖特定的硬件,例如 MTK 762x 系列)"
|
||||
|
||||
msgid "Enable BBR"
|
||||
msgstr "启用 BBR"
|
||||
|
||||
msgid "Bottleneck Bandwidth and Round-trip propagation time (BBR)"
|
||||
msgstr "BBR拥塞控制算法可以加强TCP应用表现,但会降低路由器本机上的WIFI吞吐性能"
|
||||
|
||||
msgid "DNS Acceleration"
|
||||
msgstr "DNS 加速"
|
||||
|
||||
msgid "Enable DNS Cache Acceleration and anti ISP DNS pollution"
|
||||
msgstr "启用DNS多线程查询、缓存,并防止ISP的DNS广告和域名劫持"
|
||||
|
||||
msgid "Upsteam DNS Server"
|
||||
msgstr "上游 DNS 服务器(国内)"
|
||||
|
||||
msgid "Muitiple DNS server can saperate with ','"
|
||||
msgstr "支持多个上游DNS服务器,用','分隔(注意用英文逗号).请填写您最快的DNS服务器"
|
@ -1,8 +0,0 @@
|
||||
|
||||
config flow
|
||||
option flow_offloading '1'
|
||||
option flow_offloading_hw '0'
|
||||
option dns '0'
|
||||
option dns_server '114.114.114.114,114.114.115.115'
|
||||
option bbr '0'
|
||||
|
@ -1,201 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (c) 2011-2015 OpenWrt.org
|
||||
|
||||
START=60
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
PDNSD_BIN="/var/sbin/dnscache"
|
||||
DNSMASQ_RESTART=N
|
||||
DNS_SERVER="114.114.114.114,114.114.115.115"
|
||||
|
||||
pdnsd_genconfig() {
|
||||
DNS_SERVER=$(uci get flowoffload.@flow[0].dns_server 2>/dev/null)
|
||||
|
||||
[ -d /var/etc ] || mkdir -p /var/etc
|
||||
|
||||
if [ ! -f /var/dnscache/pdnsd.cache ]; then
|
||||
mkdir -p /var/dnscache
|
||||
echo -ne "pd13\000\000\000\000" >/var/dnscache/pdnsd.cache
|
||||
chown -R nobody.nogroup /var/dnscache
|
||||
fi
|
||||
|
||||
cat <<-EOF >/var/etc/dnscache.conf
|
||||
global {
|
||||
perm_cache=1024; # dns缓存大小,单位KB,建议不要写的太大
|
||||
cache_dir="/var/dnscache"; # 缓存文件的位置
|
||||
pid_file = /var/run/dnscache.pid;
|
||||
run_as="nobody";
|
||||
server_ip = 0.0.0.0; # pdnsd监听的网卡,0.0.0.0是全部网卡
|
||||
server_port=5333; # pdnsd监听的端口,不要和别的服务冲突即可
|
||||
status_ctl = on;
|
||||
paranoid=on; # 二次请求模式,如果请求主DNS服务器返回的是垃圾地址,就向备用服务器请求
|
||||
query_method=udp_only;
|
||||
neg_domain_pol = off;
|
||||
par_queries = 400; # 最多同时请求数
|
||||
min_ttl = 1h; # DNS结果最短缓存时间
|
||||
max_ttl = 1w; # DNS结果最长缓存时间
|
||||
timeout = 10; # DNS请求超时时间,单位秒
|
||||
}
|
||||
|
||||
server {
|
||||
label = "routine";
|
||||
ip = $DNS_SERVER; # 这里为主要上级 dns 的 ip 地址,建议填写一个当地最快的DNS地址
|
||||
timeout = 5; # DNS请求超时时间
|
||||
reject = 74.125.127.102, # 以下是脏IP,也就是DNS污染一般会返回的结果,如果收到如下DNS结果会触发二次请求(TCP协议一般不会碰到脏IP)
|
||||
74.125.155.102,
|
||||
74.125.39.102,
|
||||
74.125.39.113,
|
||||
209.85.229.138,
|
||||
128.121.126.139,
|
||||
159.106.121.75,
|
||||
169.132.13.103,
|
||||
192.67.198.6,
|
||||
202.106.1.2,
|
||||
202.181.7.85,
|
||||
203.161.230.171,
|
||||
203.98.7.65,
|
||||
207.12.88.98,
|
||||
208.56.31.43,
|
||||
209.145.54.50,
|
||||
209.220.30.174,
|
||||
209.36.73.33,
|
||||
211.94.66.147,
|
||||
213.169.251.35,
|
||||
216.221.188.182,
|
||||
216.234.179.13,
|
||||
243.185.187.39,
|
||||
37.61.54.158,
|
||||
4.36.66.178,
|
||||
46.82.174.68,
|
||||
59.24.3.173,
|
||||
64.33.88.161,
|
||||
64.33.99.47,
|
||||
64.66.163.251,
|
||||
65.104.202.252,
|
||||
65.160.219.113,
|
||||
66.45.252.237,
|
||||
69.55.52.253,
|
||||
72.14.205.104,
|
||||
72.14.205.99,
|
||||
78.16.49.15,
|
||||
8.7.198.45,
|
||||
93.46.8.89,
|
||||
37.61.54.158,
|
||||
243.185.187.39,
|
||||
190.93.247.4,
|
||||
190.93.246.4,
|
||||
190.93.245.4,
|
||||
190.93.244.4,
|
||||
65.49.2.178,
|
||||
189.163.17.5,
|
||||
23.89.5.60,
|
||||
49.2.123.56,
|
||||
54.76.135.1,
|
||||
77.4.7.92,
|
||||
118.5.49.6,
|
||||
159.24.3.173,
|
||||
188.5.4.96,
|
||||
197.4.4.12,
|
||||
220.250.64.24,
|
||||
243.185.187.30,
|
||||
249.129.46.48,
|
||||
253.157.14.165;
|
||||
reject_policy = fail;
|
||||
}
|
||||
|
||||
server {
|
||||
label = "special"; # 这个随便写
|
||||
ip = 208.67.222.222,208.67.220.220; # 这里为备用DNS服务器的 ip 地址
|
||||
port = 5353; # 推荐使用53以外的端口(DNS服务器必须支持)
|
||||
proxy_only = on;
|
||||
timeout = 5;
|
||||
}
|
||||
|
||||
source {
|
||||
owner=localhost;
|
||||
// serve_aliases=on;
|
||||
file="/etc/hosts";
|
||||
}
|
||||
|
||||
rr {
|
||||
name=localhost;
|
||||
reverse=on;
|
||||
a=127.0.0.1;
|
||||
owner=localhost;
|
||||
soa=localhost,root.localhost,42,86400,900,86400,86400;
|
||||
}
|
||||
EOF
|
||||
|
||||
[ -d /var/sbin ] || mkdir -p /var/sbin
|
||||
[ -f /var/sbin/dnscache ] || ln -s /usr/sbin/pdnsd /var/sbin/dnscache
|
||||
echo "Start DNS Cache"
|
||||
}
|
||||
|
||||
stop_pdnsd() {
|
||||
kill $(pidof dnscache) >/dev/null 2>&1 || kill -9 $(ps | grep dnscache | grep -v grep | awk '{print $1}') >/dev/null 2>&1
|
||||
echo "Stop DNS Cache"
|
||||
}
|
||||
|
||||
change_dns() {
|
||||
uci delete dhcp.@dnsmasq[0].server >/dev/null 2>&1
|
||||
uci add_list dhcp.@dnsmasq[0].server=127.0.0.1#5333
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto
|
||||
uci set dhcp.@dnsmasq[0].noresolv=0
|
||||
uci commit dhcp
|
||||
}
|
||||
|
||||
revert_dns() {
|
||||
uci del_list dhcp.@dnsmasq[0].server=127.0.0.1#5333 >/dev/null 2>&1
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto
|
||||
uci set dhcp.@dnsmasq[0].noresolv=0
|
||||
uci commit dhcp
|
||||
}
|
||||
|
||||
start_service() {
|
||||
dns=$(uci get flowoffload.@flow[0].dns 2>/dev/null)
|
||||
bbr=$(uci get flowoffload.@flow[0].bbr 2>/dev/null)
|
||||
if [ $dns -eq 1 ]; then
|
||||
pdnsd_genconfig
|
||||
procd_open_instance
|
||||
procd_set_param command "$PDNSD_BIN" -c /var/etc/dnscache.conf
|
||||
procd_set_param respawn
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
change_dns
|
||||
else
|
||||
revert_dns
|
||||
fi
|
||||
if [ $bbr -eq 1 ]; then
|
||||
sysctl -w net.ipv4.tcp_congestion_control=bbr
|
||||
else
|
||||
sysctl -w net.ipv4.tcp_congestion_control=cubic
|
||||
fi
|
||||
uci set firewall.@defaults[0].flow_offloading=$(uci get flowoffload.@flow[0].flow_offloading)
|
||||
uci set firewall.@defaults[0].flow_offloading_hw=$(uci get flowoffload.@flow[0].flow_offloading_hw)
|
||||
uci commit firewall
|
||||
if [ "$DNSMASQ_RESTART" = N ]; then
|
||||
/etc/init.d/dnsmasq restart && echo "DNSMASQ change"
|
||||
/etc/init.d/firewall restart >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
dns=$(uci get firewall.@defaults[0].dns 2>/dev/null)
|
||||
revert_dns
|
||||
uci set firewall.@defaults[0].flow_offloading=$(uci get flowoffload.@flow[0].flow_offloading)
|
||||
uci set firewall.@defaults[0].flow_offloading_hw=$(uci get flowoffload.@flow[0].flow_offloading_hw)
|
||||
uci commit firewall
|
||||
if [ "$DNSMASQ_RESTART" = N ]; then
|
||||
/etc/init.d/dnsmasq restart && echo "DNSMASQ revert"
|
||||
/etc/init.d/firewall restart >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
restart() {
|
||||
DNSMASQ_RESTART=Y
|
||||
stop
|
||||
start
|
||||
/etc/init.d/dnsmasq restart && echo "DNSMASQ restart"
|
||||
/etc/init.d/firewall restart >/dev/null 2>&1
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci set firewall.@defaults[0].flow_offloading=1
|
||||
uci commit firewall
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@flowoffload[-1]
|
||||
add ucitrack flowoffload
|
||||
set ucitrack.@flowoffload[-1].init=flowoffload
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
exit 0
|
@ -1,17 +0,0 @@
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for Turbo ACC (SFE)
|
||||
LUCI_DEPENDS:=+kmod-fast-classifier +pdnsd-alt +kmod-tcp-bbr
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=1.0
|
||||
PKG_RELEASE:=13
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
@ -1,36 +0,0 @@
|
||||
module("luci.controller.sfe", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/sfe") then
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "network", "sfe"}, cbi("sfe"), _("Turbo ACC Center"), 1000).dependent = true
|
||||
entry({"admin", "network", "sfe", "status"}, call("action_status"))
|
||||
end
|
||||
|
||||
local function is_running()
|
||||
return luci.sys.call("lsmod | grep fast_classifier >/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_bbr()
|
||||
return luci.sys.call("sysctl net.ipv4.tcp_congestion_control | grep bbr >/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_fullcone()
|
||||
return luci.sys.call("iptables -t nat -L -n --line-numbers | grep FULLCONENAT >/dev/null") == 0
|
||||
end
|
||||
|
||||
local function is_dns()
|
||||
return luci.sys.call("pgrep dnscache >/dev/null") == 0
|
||||
end
|
||||
|
||||
function action_status()
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json({
|
||||
run_state = is_running(),
|
||||
down_state = is_bbr(),
|
||||
up_state = is_fullcone(),
|
||||
dns_state = is_dns()
|
||||
})
|
||||
end
|
@ -1,47 +0,0 @@
|
||||
|
||||
m = Map("sfe")
|
||||
m.title = translate("Turbo ACC Acceleration Settings")
|
||||
m.description = translate("Opensource Qualcomm Shortcut FE driver (Fast Path)")
|
||||
|
||||
m:append(Template("sfe/status"))
|
||||
|
||||
s = m:section(TypedSection, "sfe", "")
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
|
||||
enable = s:option(Flag, "enabled", translate("Enable SFE Fast Path"))
|
||||
enable.default = 0
|
||||
enable.rmempty = false
|
||||
enable.description = translate("Enable Fast Path offloading for connections. (decrease cpu load / increase routing throughput)")
|
||||
|
||||
wifi = s:option(Flag, "wifi", translate("Bridge Acceleration"))
|
||||
wifi.default = 0
|
||||
wifi.rmempty = false
|
||||
wifi.description = translate("Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN Server)")
|
||||
wifi:depends("enabled", 1)
|
||||
|
||||
if nixio.fs.access("/proc/sys/net/ipv6") then
|
||||
ipv6 = s:option(Flag, "ipv6", translate("IPv6 Acceleration"))
|
||||
ipv6.default = 0
|
||||
ipv6.rmempty = false
|
||||
ipv6.description = translate("Enable IPv6 Acceleration")
|
||||
ipv6:depends("enabled", 1)
|
||||
end
|
||||
|
||||
bbr = s:option(Flag, "bbr", translate("Enable BBR"))
|
||||
bbr.default = 0
|
||||
bbr.rmempty = false
|
||||
bbr.description = translate("Bottleneck Bandwidth and Round-trip propagation time (BBR)")
|
||||
|
||||
dns = s:option(Flag, "dns", translate("DNS Acceleration"))
|
||||
dns.default = 0
|
||||
dns.rmempty = false
|
||||
dns.description = translate("Enable DNS Cache Acceleration and anti ISP DNS pollution")
|
||||
|
||||
o = s:option(Value, "dns_server", translate("Upsteam DNS Server"))
|
||||
o.default = "114.114.114.114,114.114.115.115"
|
||||
o.description = translate("Muitiple DNS server can saperate with ','")
|
||||
o:depends("dns", 1)
|
||||
|
||||
return m
|
@ -1,24 +0,0 @@
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:Running Status%></legend>
|
||||
<table width="100%" cellspacing="10" id="_xlnetacc_status_table">
|
||||
<tr><td width="33%">SFE 加速状态</td><td id="_run_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">BBR 加速</td><td id="_down_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">FULLCONE NAT加速</td><td id="_up_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%">DNS 加速</td><td id="_dns_state"><em><%:Collecting data...%></em></td></tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var run_state = document.getElementById('_run_state');
|
||||
var down_state = document.getElementById('_down_state');
|
||||
var up_state = document.getElementById('_up_state');
|
||||
var dns_state = document.getElementById('_dns_state');
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "sfe", "status")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
run_state.innerHTML = status.run_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
down_state.innerHTML = status.down_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
up_state.innerHTML = status.up_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
dns_state.innerHTML = status.dns_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
}
|
||||
});
|
||||
//]]></script>
|
@ -1,56 +0,0 @@
|
||||
msgid "SFE Acceleration"
|
||||
msgstr "SFE 转发加速"
|
||||
|
||||
msgid "Running Status"
|
||||
msgstr "运行状态"
|
||||
|
||||
msgid "Turbo ACC Center"
|
||||
msgstr "Turbo ACC 网络加速"
|
||||
|
||||
msgid "Turbo ACC Acceleration Settings"
|
||||
msgstr "Turbo ACC 网络加速设置"
|
||||
|
||||
msgid "Shortcut Forwarding Engine Acceleration Settings"
|
||||
msgstr "SFE 转发加速引擎设置"
|
||||
|
||||
msgid "Opensource Qualcomm Shortcut FE driver (Fast Path)"
|
||||
msgstr "来自高通开源的 Shortcut FE 转发加速引擎 (Fast Path)"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Enable SFE Fast Path"
|
||||
msgstr "启用 SFE Fast Path 加速"
|
||||
|
||||
msgid "Enable Fast Path offloading for connections. (decrease cpu load / increase routing throughput)"
|
||||
msgstr "开启 Fast Path 转发加速. (降低CPU占用 / 增强路由转发性能,和多WAN或者QOS功能可能会冲突)"
|
||||
|
||||
msgid "Bridge Acceleration"
|
||||
msgstr "桥接加速"
|
||||
|
||||
msgid "Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN Server)"
|
||||
msgstr "启用桥接加速 (可能会和路由器上桥接模式的VPN服务器冲突)"
|
||||
|
||||
msgid "IPv6 Acceleration"
|
||||
msgstr "IPv6 加速"
|
||||
|
||||
msgid "Enable IPv6 Acceleration"
|
||||
msgstr "开启IPv6加速"
|
||||
|
||||
msgid "Enable BBR"
|
||||
msgstr "启用 BBR"
|
||||
|
||||
msgid "Bottleneck Bandwidth and Round-trip propagation time (BBR)"
|
||||
msgstr "BBR拥塞控制算法可以加强TCP应用表现,但会降低路由器本机上的WIFI吞吐性能"
|
||||
|
||||
msgid "DNS Acceleration"
|
||||
msgstr "DNS 加速"
|
||||
|
||||
msgid "Enable DNS Cache Acceleration and anti ISP DNS pollution"
|
||||
msgstr "启用DNS多线程查询、缓存,并防止ISP的DNS广告和域名劫持"
|
||||
|
||||
msgid "Upsteam DNS Server"
|
||||
msgstr "上游 DNS 服务器(国内)"
|
||||
|
||||
msgid "Muitiple DNS server can saperate with ','"
|
||||
msgstr "支持多个上游DNS服务器,用','分隔(注意用英文逗号).请填写您最快的DNS服务器"
|
@ -1,9 +0,0 @@
|
||||
|
||||
config sfe 'config'
|
||||
option enabled '1'
|
||||
option ipv6 '0'
|
||||
option wifi '0'
|
||||
option bbr '0'
|
||||
option dns '0'
|
||||
option dns_server '114.114.114.114,114.114.115.115'
|
||||
|
@ -1,209 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2007-2012 OpenWrt.org
|
||||
|
||||
START=90
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
PDNSD_BIN="/var/sbin/dnscache"
|
||||
DNSMASQ_RESTART=N
|
||||
DNS_SERVER="114.114.114.114,114.114.115.115"
|
||||
|
||||
pdnsd_genconfig() {
|
||||
DNS_SERVER=$(uci get sfe.config.dns_server 2>/dev/null)
|
||||
|
||||
[ -d /var/etc ] || mkdir -p /var/etc
|
||||
|
||||
if [ ! -f /var/dnscache/pdnsd.cache ]; then
|
||||
mkdir -p /var/dnscache
|
||||
echo -ne "pd13\000\000\000\000" >/var/dnscache/pdnsd.cache
|
||||
chown -R nobody.nogroup /var/dnscache
|
||||
fi
|
||||
|
||||
cat <<-EOF >/var/etc/dnscache.conf
|
||||
global {
|
||||
perm_cache=1024; # dns缓存大小,单位KB,建议不要写的太大
|
||||
cache_dir="/var/dnscache"; # 缓存文件的位置
|
||||
pid_file="/var/run/dnscache.pid";
|
||||
run_as="nobody";
|
||||
server_ip = 0.0.0.0; # pdnsd监听的网卡,0.0.0.0是全部网卡
|
||||
server_port=5333; # pdnsd监听的端口,不要和别的服务冲突即可
|
||||
status_ctl = on;
|
||||
paranoid=on; # 二次请求模式,如果请求主DNS服务器返回的是垃圾地址,就向备用服务器请求
|
||||
query_method=udp_only;
|
||||
neg_domain_pol = off;
|
||||
par_queries = 400; # 最多同时请求数
|
||||
min_ttl = 1h; # DNS结果最短缓存时间
|
||||
max_ttl = 1w; # DNS结果最长缓存时间
|
||||
timeout = 10; # DNS请求超时时间,单位秒
|
||||
}
|
||||
|
||||
server {
|
||||
label = "routine";
|
||||
ip = $DNS_SERVER; # 这里为主要上级 dns 的 ip 地址,建议填写一个当地最快的DNS地址
|
||||
timeout = 5; # DNS请求超时时间
|
||||
reject = 74.125.127.102, # 以下是脏IP,也就是DNS污染一般会返回的结果,如果收到如下DNS结果会触发二次请求(TCP协议一般不会碰到脏IP)
|
||||
74.125.155.102,
|
||||
74.125.39.102,
|
||||
74.125.39.113,
|
||||
209.85.229.138,
|
||||
128.121.126.139,
|
||||
159.106.121.75,
|
||||
169.132.13.103,
|
||||
192.67.198.6,
|
||||
202.106.1.2,
|
||||
202.181.7.85,
|
||||
203.161.230.171,
|
||||
203.98.7.65,
|
||||
207.12.88.98,
|
||||
208.56.31.43,
|
||||
209.145.54.50,
|
||||
209.220.30.174,
|
||||
209.36.73.33,
|
||||
211.94.66.147,
|
||||
213.169.251.35,
|
||||
216.221.188.182,
|
||||
216.234.179.13,
|
||||
243.185.187.39,
|
||||
37.61.54.158,
|
||||
4.36.66.178,
|
||||
46.82.174.68,
|
||||
59.24.3.173,
|
||||
64.33.88.161,
|
||||
64.33.99.47,
|
||||
64.66.163.251,
|
||||
65.104.202.252,
|
||||
65.160.219.113,
|
||||
66.45.252.237,
|
||||
69.55.52.253,
|
||||
72.14.205.104,
|
||||
72.14.205.99,
|
||||
78.16.49.15,
|
||||
8.7.198.45,
|
||||
93.46.8.89,
|
||||
37.61.54.158,
|
||||
243.185.187.39,
|
||||
190.93.247.4,
|
||||
190.93.246.4,
|
||||
190.93.245.4,
|
||||
190.93.244.4,
|
||||
65.49.2.178,
|
||||
189.163.17.5,
|
||||
23.89.5.60,
|
||||
49.2.123.56,
|
||||
54.76.135.1,
|
||||
77.4.7.92,
|
||||
118.5.49.6,
|
||||
159.24.3.173,
|
||||
188.5.4.96,
|
||||
197.4.4.12,
|
||||
220.250.64.24,
|
||||
243.185.187.30,
|
||||
249.129.46.48,
|
||||
253.157.14.165;
|
||||
reject_policy = fail;
|
||||
}
|
||||
|
||||
server {
|
||||
label = "special"; # 这个随便写
|
||||
ip = 208.67.222.222,208.67.220.220; # 这里为备用DNS服务器的 ip 地址
|
||||
port = 5353; # 推荐使用53以外的端口(DNS服务器必须支持)
|
||||
proxy_only = on;
|
||||
timeout = 5;
|
||||
}
|
||||
|
||||
source {
|
||||
owner=localhost;
|
||||
// serve_aliases=on;
|
||||
file="/etc/hosts";
|
||||
}
|
||||
|
||||
rr {
|
||||
name=localhost;
|
||||
reverse=on;
|
||||
a=127.0.0.1;
|
||||
owner=localhost;
|
||||
soa=localhost,root.localhost,42,86400,900,86400,86400;
|
||||
}
|
||||
EOF
|
||||
|
||||
[ -d /var/sbin ] || mkdir -p /var/sbin
|
||||
[ -f /var/sbin/dnscache ] || ln -s /usr/sbin/pdnsd /var/sbin/dnscache
|
||||
}
|
||||
|
||||
change_dns() {
|
||||
uci delete dhcp.@dnsmasq[0].server >/dev/null 2>&1
|
||||
uci add_list dhcp.@dnsmasq[0].server=127.0.0.1#5333
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto
|
||||
uci set dhcp.@dnsmasq[0].noresolv=0
|
||||
uci commit dhcp
|
||||
}
|
||||
|
||||
revert_dns() {
|
||||
uci del_list dhcp.@dnsmasq[0].server=127.0.0.1#5333 >/dev/null 2>&1
|
||||
uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto
|
||||
uci set dhcp.@dnsmasq[0].noresolv=0
|
||||
uci commit dhcp
|
||||
}
|
||||
|
||||
start_service() {
|
||||
enable=$(uci get sfe.config.enabled 2>/dev/null)
|
||||
wifi=$(uci get sfe.config.wifi)
|
||||
ipv6=$(uci get sfe.config.ipv6)
|
||||
dns=$(uci get sfe.config.dns 2>/dev/null)
|
||||
bbr=$(uci get sfe.config.bbr 2>/dev/null)
|
||||
|
||||
if [ $enable -eq 1 ]; then
|
||||
! (lsmod | grep fast_classifier >/dev/null) && (modprobe fast_classifier)
|
||||
if [ $wifi -eq 1 ]; then
|
||||
echo 1 >/sys/fast_classifier/skip_to_bridge_ingress
|
||||
else
|
||||
echo 0 >/sys/fast_classifier/skip_to_bridge_ingress
|
||||
fi
|
||||
if [ $ipv6 -eq 1 ]; then
|
||||
sfe_ipv6=$(cat /sys/sfe_ipv6/debug_dev)
|
||||
[ ! -f /dev/sfe_ipv6 ] && mknod /dev/sfe_ipv6 c $sfe_ipv6 0
|
||||
else
|
||||
rm -f /dev/sfe_ipv6
|
||||
fi
|
||||
else
|
||||
rmmod fast_classifier >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ $dns -eq 1 ]; then
|
||||
pdnsd_genconfig
|
||||
procd_open_instance
|
||||
procd_set_param command "$PDNSD_BIN" -c /var/etc/dnscache.conf
|
||||
procd_set_param respawn
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
change_dns
|
||||
else
|
||||
revert_dns
|
||||
fi
|
||||
|
||||
if [ $bbr -eq 1 ]; then
|
||||
sysctl -w net.ipv4.tcp_congestion_control=bbr
|
||||
else
|
||||
sysctl -w net.ipv4.tcp_congestion_control=cubic
|
||||
fi
|
||||
if [ "$DNSMASQ_RESTART" = N ]; then
|
||||
/etc/init.d/dnsmasq restart
|
||||
fi
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
enable=$(uci get sfe.config.enabled 2>/dev/null)
|
||||
[ $enable -ne 1 ] && rmmod fast_classifier >/dev/null 2>&1
|
||||
revert_dns
|
||||
if [ "$DNSMASQ_RESTART" = N ]; then
|
||||
/etc/init.d/dnsmasq restart
|
||||
fi
|
||||
}
|
||||
|
||||
restart() {
|
||||
DNSMASQ_RESTART=Y
|
||||
stop
|
||||
start
|
||||
/etc/init.d/dnsmasq restart && echo "DNSMASQ restart"
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@sfe[-1]
|
||||
add ucitrack sfe
|
||||
set ucitrack.@sfe[-1].init=sfe
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
[ ! -f /usr/sbin/dnscache ] && ln /usr/sbin/pdnsd /usr/sbin/dnscache
|
||||
/etc/init.d/sfe enable
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
dns_enable=$(uci get sfe.config.dns 2>/dev/null)
|
||||
|
||||
if [ $dns_enable -eq 1 ]; then
|
||||
if ! pidof dnscache>/dev/null; then
|
||||
/etc/init.d/sfe restart
|
||||
fi
|
||||
fi
|
55
package/lean/luci-app-turboacc/Makefile
Normal file
55
package/lean/luci-app-turboacc/Makefile
Normal file
@ -0,0 +1,55 @@
|
||||
# SPDX-Identifier-License: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2018 Lean <coolsnowwolf@gmail.com>
|
||||
# Copyright (C) 2019-2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-turboacc
|
||||
PKG_RELEASE:=$(COMMITCOUNT)
|
||||
|
||||
PKG_LICENSE:=GPL-3.0-only
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
LUCI_TITLE:=LuCI support for Flow Offload / Shortcut-FE
|
||||
LUCI_DEPENDS:=+pdnsd-alt \
|
||||
+PACKAGE_TURBOACC_INCLUDE_BBR_CCA:kmod-tcp-bbr \
|
||||
+PACKAGE_TURBOACC_INCLUDE_DNSFORWARDER:dnsforwarder \
|
||||
+PACKAGE_TURBOACC_INCLUDE_DNSPROXY:dnsproxy \
|
||||
+PACKAGE_TURBOACC_INCLUDE_OFFLOADING:kmod-ipt-offload \
|
||||
+PACKAGE_TURBOACC_INCLUDE_SHORTCUT_FE:kmod-fast-classifier
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
define Package/luci-app-turboacc/config
|
||||
config PACKAGE_TURBOACC_INCLUDE_OFFLOADING
|
||||
bool "Include Flow Offload"
|
||||
depends on PACKAGE_TURBOACC_INCLUDE_SHORTCUT_FE=n
|
||||
default y
|
||||
|
||||
config PACKAGE_TURBOACC_INCLUDE_SHORTCUT_FE
|
||||
bool "Include Shortcut-FE"
|
||||
default n
|
||||
|
||||
config PACKAGE_TURBOACC_INCLUDE_BBR_CCA
|
||||
bool "Include BBR CCA"
|
||||
default y
|
||||
|
||||
config PACKAGE_TURBOACC_INCLUDE_DNSFORWARDER
|
||||
bool "Include DNSForwarder"
|
||||
default n
|
||||
|
||||
config PACKAGE_TURBOACC_INCLUDE_DNSPROXY
|
||||
bool "Include DNSProxy"
|
||||
default n
|
||||
endef
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_PACKAGE_TURBOACC_INCLUDE_BBR_CCA \
|
||||
CONFIG_PACKAGE_TURBOACC_INCLUDE_DNSFORWARDER \
|
||||
CONFIG_PACKAGE_TURBOACC_INCLUDE_DNSPROXY \
|
||||
CONFIG_PACKAGE_TURBOACC_INCLUDE_OFFLOADING \
|
||||
CONFIG_PACKAGE_TURBOACC_INCLUDE_SHORTCUT_FE
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
@ -0,0 +1,39 @@
|
||||
module("luci.controller.turboacc", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/turboacc") then
|
||||
return
|
||||
end
|
||||
local page
|
||||
page = entry({"admin", "network", "turboacc"}, cbi("turboacc"), _("Turbo ACC Center"), 101)
|
||||
page.i18n = "turboacc"
|
||||
page.dependent = true
|
||||
|
||||
entry({"admin", "network", "turboacc", "status"}, call("action_status"))
|
||||
end
|
||||
|
||||
local function fastpath_status()
|
||||
return luci.sys.call("/etc/init.d/turboacc check_status fastpath") == 0
|
||||
end
|
||||
|
||||
local function bbr_status()
|
||||
return luci.sys.call("/etc/init.d/turboacc check_status bbr") == 0
|
||||
end
|
||||
|
||||
local function fullconenat_status()
|
||||
return luci.sys.call("/etc/init.d/turboacc check_status fullconenat") == 0
|
||||
end
|
||||
|
||||
local function dnscaching_status()
|
||||
return luci.sys.call("/etc/init.d/turboacc check_status dns") == 0
|
||||
end
|
||||
|
||||
function action_status()
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json({
|
||||
fastpath_state = fastpath_status(),
|
||||
fullconenat_state = fullconenat_status(),
|
||||
bbr_state = bbr_status(),
|
||||
dnscaching_state = dnscaching_status()
|
||||
})
|
||||
end
|
79
package/lean/luci-app-turboacc/luasrc/model/cbi/turboacc.lua
Normal file
79
package/lean/luci-app-turboacc/luasrc/model/cbi/turboacc.lua
Normal file
@ -0,0 +1,79 @@
|
||||
local kernel_version = luci.sys.exec("echo -n $(uname -r)")
|
||||
|
||||
m = Map("turboacc")
|
||||
m.title = translate("Turbo ACC Acceleration Settings")
|
||||
m.description = translate("Opensource Flow Offloading driver (Fast Path or Hardware NAT)")
|
||||
|
||||
m:append(Template("turboacc/status"))
|
||||
|
||||
s = m:section(TypedSection, "turboacc", "")
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
if nixio.fs.access("/lib/modules/" .. kernel_version .. "/xt_FLOWOFFLOAD.ko") then
|
||||
sw_flow = s:option(Flag, "sw_flow", translate("Software flow offloading"))
|
||||
sw_flow.default = 0
|
||||
sw_flow.description = translate("Software based offloading for routing/NAT")
|
||||
sw_flow:depends("sfe_flow", 0)
|
||||
end
|
||||
|
||||
if luci.sys.call("cat /proc/cpuinfo | grep -q MT76") == 0 then
|
||||
hw_flow = s:option(Flag, "hw_flow", translate("Hardware flow offloading"))
|
||||
hw_flow.default = 0
|
||||
hw_flow.description = translate("Requires hardware NAT support. Implemented at least for mt76xx")
|
||||
hw_flow:depends("sw_flow", 1)
|
||||
end
|
||||
|
||||
if nixio.fs.access("/lib/modules/" .. kernel_version .. "/fast-classifier.ko") then
|
||||
sfe_flow = s:option(Flag, "sfe_flow", translate("Shortcut-FE flow offloading"))
|
||||
sfe_flow.default = 0
|
||||
sfe_flow.description = translate("Shortcut-FE based offloading for routing/NAT")
|
||||
sfe_flow:depends("sw_flow", 0)
|
||||
end
|
||||
|
||||
sfe_bridge = s:option(Flag, "sfe_bridge", translate("Bridge Acceleration"))
|
||||
sfe_bridge.default = 0
|
||||
sfe_bridge.description = translate("Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN server)")
|
||||
sfe_bridge:depends("sfe_flow", 1)
|
||||
|
||||
if nixio.fs.access("/proc/sys/net/ipv6") then
|
||||
sfe_ipv6 = s:option(Flag, "sfe_ipv6", translate("IPv6 Acceleration"))
|
||||
sfe_ipv6.default = 0
|
||||
sfe_ipv6.description = translate("Enable IPv6 Acceleration")
|
||||
sfe_ipv6:depends("sfe_flow", 1)
|
||||
end
|
||||
|
||||
if nixio.fs.access("/lib/modules/" .. kernel_version .. "/tcp_bbr.ko") then
|
||||
bbr_cca = s:option(Flag, "bbr_cca", translate("BBR CCA"))
|
||||
bbr_cca.default = 0
|
||||
bbr_cca.description = translate("Using BBR CCA can improve TCP network performance effectively")
|
||||
end
|
||||
|
||||
if nixio.fs.access("/lib/modules/" .. kernel_version .. "/xt_FULLCONENAT.ko") then
|
||||
fullcone_nat = s:option(Flag, "fullcone_nat", translate("FullCone NAT"))
|
||||
fullcone_nat.default = 0
|
||||
fullcone_nat.description = translate("Using FullCone NAT can improve gaming performance effectively")
|
||||
end
|
||||
|
||||
dns_caching = s:option(Flag, "dns_caching", translate("DNS Caching"))
|
||||
dns_caching.default = 0
|
||||
dns_caching.rmempty = false
|
||||
dns_caching.description = translate("Enable DNS Caching and anti ISP DNS pollution")
|
||||
|
||||
dns_caching_mode = s:option(ListValue, "dns_caching_mode", translate("Resolve DNS Mode"), translate("DNS Program"))
|
||||
dns_caching_mode:value("1", translate("Using PDNSD to query and cache"))
|
||||
if nixio.fs.access("/usr/bin/dnsforwarder") then
|
||||
dns_caching_mode:value("2", translate("Using DNSForwarder to query and cache"))
|
||||
end
|
||||
if nixio.fs.access("/usr/bin/dnsproxy") then
|
||||
dns_caching_mode:value("3", translate("Using DNSProxy to query and cache"))
|
||||
end
|
||||
dns_caching_mode.default = 1
|
||||
dns_caching_mode:depends("dns_caching", 1)
|
||||
|
||||
dns_caching_dns = s:option(Value, "dns_caching_dns", translate("Upsteam DNS Server"))
|
||||
dns_caching_dns.default = "114.114.114.114,114.114.115.115,223.5.5.5,223.6.6.6,180.76.76.76,119.29.29.29,119.28.28.28,1.2.4.8,210.2.4.8"
|
||||
dns_caching_dns.description = translate("Muitiple DNS server can saperate with ','")
|
||||
dns_caching_dns:depends("dns_caching", 1)
|
||||
|
||||
return m
|
@ -0,0 +1,25 @@
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:Running Status%></legend>
|
||||
<table width="100%" cellspacing="10" id="_turboacc_status_table">
|
||||
<tr><td width="33%"><%:Flow Offloading%></td><td id="_fastpath_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%"><%:FullCone NAT%></td><td id="_fullconenat_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%"><%:BBR CCA%></td><td id="_bbr_state"><em><%:Collecting data...%></em></td></tr>
|
||||
<tr><td width="33%"><%:DNS Caching%></td><td id="_dnscaching_state"><em><%:Collecting data...%></em></td></tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var fastpath_state = document.getElementById('_fastpath_state');
|
||||
var bbr_state = document.getElementById('_bbr_state');
|
||||
var fullconenat_state = document.getElementById('_fullconenat_state');
|
||||
var dnscaching_state = document.getElementById('_dnscaching_state');
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "turboacc", "status")%>', null, function(x, status) {
|
||||
if ( x && x.status == 200 ) {
|
||||
fastpath_state.innerHTML = status.fastpath_state ? '<em><b><font color=green><%=luci.sys.exec("/etc/init.d/turboacc check_status fastpath")%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
fullconenat_state.innerHTML = status.fullconenat_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
bbr_state.innerHTML = status.bbr_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
dnscaching_state.innerHTML = status.dnscaching_state ? '<em><b><font color=green><%:RUNNING%></font></b></em>' : '<em><b><font color=red><%:NOT RUNNING%></font></b></em>';
|
||||
}
|
||||
});
|
||||
//]]>
|
||||
//]]></script>
|
99
package/lean/luci-app-turboacc/po/zh-cn/turboacc.po
Normal file
99
package/lean/luci-app-turboacc/po/zh-cn/turboacc.po
Normal file
@ -0,0 +1,99 @@
|
||||
msgid "Turbo ACC Center"
|
||||
msgstr "Turbo ACC 网络加速"
|
||||
|
||||
msgid "Turbo ACC Acceleration Settings"
|
||||
msgstr "Turbo ACC 网络加速设置"
|
||||
|
||||
msgid "Linux Flow Offload Forwarding Engine Settings"
|
||||
msgstr "Linux Flow Offload Forwarding 转发加速引擎设置"
|
||||
|
||||
msgid "Opensource Flow Offloading driver (Fast Path or Hardware NAT)"
|
||||
msgstr "开源流量分载驱动 (支持 Fast Path 或者 硬件 NAT)"
|
||||
|
||||
msgid "Software flow offloading"
|
||||
msgstr "软件流量分载"
|
||||
|
||||
msgid "Software based offloading for routing/NAT"
|
||||
msgstr "基于软件的 Routing/NAT 分载"
|
||||
|
||||
msgid "Hardware flow offloading"
|
||||
msgstr "硬件流量分载"
|
||||
|
||||
msgid "Requires hardware NAT support. Implemented at least for mt76xx"
|
||||
msgstr "需要硬件 NAT 支持。目前 mt76xx 已实现"
|
||||
|
||||
msgid "Shortcut-FE flow offloading"
|
||||
msgstr "Shortcut-FE 流量分载"
|
||||
|
||||
msgid "Shortcut-FE based offloading for routing/NAT"
|
||||
msgstr "基于 Shortcut-FE 的 Routing/NAT 分载"
|
||||
|
||||
msgid "Bridge Acceleration"
|
||||
msgstr "桥接加速"
|
||||
|
||||
msgid "Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN server)"
|
||||
msgstr "启用桥接加速 (可能会和路由器上桥接模式的VPN服务器冲突)"
|
||||
|
||||
msgid "IPv6 Acceleration"
|
||||
msgstr "IPv6 加速"
|
||||
|
||||
msgid "Enable IPv6 Acceleration"
|
||||
msgstr "启用 IPv6 加速"
|
||||
|
||||
msgid "BBR CCA"
|
||||
msgstr "BBR 拥塞控制算法"
|
||||
|
||||
msgid "Using BBR CCA can improve TCP network performance effectively"
|
||||
msgstr "使用 BBR 拥塞控制算法可以有效提升 TCP 网络性能"
|
||||
|
||||
msgid "FullCone NAT"
|
||||
msgstr "全锥形 NAT"
|
||||
|
||||
msgid "Using FullCone NAT can improve gaming performance effectively"
|
||||
msgstr "使用全锥形 NAT 可以有效提升游戏体验"
|
||||
|
||||
msgid "DNS Caching"
|
||||
msgstr "DNS 缓存"
|
||||
|
||||
msgid "Enable DNS Caching and anti ISP DNS pollution"
|
||||
msgstr "启用 DNS 多线程查询、缓存,并防止 ISP 的 DNS 广告和域名劫持"
|
||||
|
||||
msgid "Resolve DNS Mode"
|
||||
msgstr "DNS 解析方式"
|
||||
|
||||
msgid "DNS Program"
|
||||
msgstr "DNS 解析程序"
|
||||
|
||||
msgid "Using PDNSD to query and cache"
|
||||
msgstr "使用 PDNSD 解析"
|
||||
|
||||
|
||||
msgid "Using DNSForwarder to query and cache"
|
||||
msgstr "使用 DNSForwarder 解析"
|
||||
|
||||
msgid "Using DNSProxy to query and cache"
|
||||
msgstr "使用 DNSProxy 解析"
|
||||
|
||||
msgid "Upsteam DNS Server"
|
||||
msgstr "上游 DNS 服务器"
|
||||
|
||||
msgid "Muitiple DNS server can saperate with ','"
|
||||
msgstr "多个上游 DNS 服务器请用 ',' 分隔(注意用英文逗号)"
|
||||
|
||||
msgid "Running Status"
|
||||
msgstr "运行状态"
|
||||
|
||||
msgid "Flow Offloading"
|
||||
msgstr "流量分载"
|
||||
|
||||
msgid "BBR CCA"
|
||||
msgstr "BBR 拥塞控制算法"
|
||||
|
||||
msgid "FullCone NAT"
|
||||
msgstr "全锥型 NAT"
|
||||
|
||||
msgid "DNS Caching"
|
||||
msgstr "DNS 缓存"
|
||||
|
||||
msgid "Open Web Interface"
|
||||
msgstr "打开 Web 界面"
|
12
package/lean/luci-app-turboacc/root/etc/config/turboacc
Normal file
12
package/lean/luci-app-turboacc/root/etc/config/turboacc
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
config turboacc 'config'
|
||||
option sw_flow '1'
|
||||
option hw_flow '1'
|
||||
option sfe_flow '1'
|
||||
option sfe_bridge '1'
|
||||
option sfe_ipv6 '0'
|
||||
option fullcone_nat '1'
|
||||
option bbr_cca '1'
|
||||
option dns_caching '0'
|
||||
option dns_caching_mode '1'
|
||||
option dns_caching_dns '114.114.114.114,114.114.115.115,223.5.5.5,223.6.6.6,180.76.76.76,119.29.29.29,119.28.28.28,1.2.4.8,210.2.4.8'
|
339
package/lean/luci-app-turboacc/root/etc/init.d/turboacc
Executable file
339
package/lean/luci-app-turboacc/root/etc/init.d/turboacc
Executable file
@ -0,0 +1,339 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2018 Lean <coolsnowwolf@gmail.com>
|
||||
# Copyright (C) 2019-2021 Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
START=90
|
||||
STOP=10
|
||||
|
||||
extra_command "check_status" "Check running status of utils"
|
||||
|
||||
restart_utils="true"
|
||||
|
||||
inital_conf(){
|
||||
config_load "turboacc"
|
||||
config_get "sw_flow" "config" "sw_flow" "0"
|
||||
config_get "hw_flow" "config" "hw_flow" "0"
|
||||
config_get "sfe_flow" "config" "sfe_flow" "0"
|
||||
config_get "sfe_bridge" "config" "sfe_bridge" "0"
|
||||
config_get "sfe_ipv6" "config" "sfe_ipv6" "0"
|
||||
config_get "bbr_cca" "config" "bbr_cca" "0"
|
||||
config_get "fullcone_nat" "config" "fullcone_nat" "0"
|
||||
config_get "dns_caching" "config" "dns_caching" "0"
|
||||
config_get "dns_caching_mode" "config" "dns_caching_mode" "0"
|
||||
config_get "dns_caching_dns" "config" "dns_caching_dns"
|
||||
|
||||
[ ! -e "/lib/modules/$(uname -r)/xt_FLOWOFFLOAD.ko" ] && { sw_flow="0"; hw_flow="0"; }
|
||||
[ ! -e "/lib/modules/$(uname -r)/fast-classifier.ko" ] && { sfe_flow="0"; sfe_bridge="0"; sfe_ipv6="0"; }
|
||||
[ ! -e "/lib/modules/$(uname -r)/tcp_bbr.ko" ] && bbr_cca="0"
|
||||
[ ! -e "/lib/modules/$(uname -r)/xt_FULLCONENAT.ko" ] && fullcone_nat="0"
|
||||
}
|
||||
|
||||
start_pdnsd() {
|
||||
[ -d "/var/run/dnscache" ] || mkdir -p "/var/run/dnscache"
|
||||
cat > "/var/run/dnscache/dnscache.conf" <<EOF
|
||||
global {
|
||||
perm_cache=1024; # dns缓存大小,单位KB,建议不要写的太大
|
||||
cache_dir="/var/dnscache"; # 缓存文件的位置
|
||||
pid_file = /var/run/dnscache.pid;
|
||||
server_ip = 127.0.0.1; # pdnsd监听的网卡,0.0.0.0是全部网卡
|
||||
server_port=5333; # pdnsd监听的端口,不要和别的服务冲突即可
|
||||
status_ctl = on;
|
||||
paranoid=on; # 二次请求模式,如果请求主DNS服务器返回的是垃圾地址,就向备用服务器请求
|
||||
query_method=udp_only;
|
||||
neg_domain_pol = off;
|
||||
par_queries = 400; # 最多同时请求数
|
||||
min_ttl = 1h; # DNS结果最短缓存时间
|
||||
max_ttl = 1w; # DNS结果最长缓存时间
|
||||
timeout = 10; # DNS请求超时时间,单位秒
|
||||
}
|
||||
|
||||
server {
|
||||
label = "routine";
|
||||
ip = ${dns_caching_dns}; # 这里为主要上级 dns 的 ip 地址,建议填写一个当地最快的DNS地址
|
||||
timeout = 5; # DNS请求超时时间
|
||||
reject = 74.125.127.102, # 以下是脏IP,也就是DNS污染一般会返回的结果,如果收到如下DNS结果会触发二次请求(TCP协议一般不会碰到脏IP)
|
||||
74.125.155.102,
|
||||
74.125.39.102,
|
||||
74.125.39.113,
|
||||
209.85.229.138,
|
||||
128.121.126.139,
|
||||
159.106.121.75,
|
||||
169.132.13.103,
|
||||
192.67.198.6,
|
||||
202.106.1.2,
|
||||
202.181.7.85,
|
||||
203.161.230.171,
|
||||
203.98.7.65,
|
||||
207.12.88.98,
|
||||
208.56.31.43,
|
||||
209.145.54.50,
|
||||
209.220.30.174,
|
||||
209.36.73.33,
|
||||
211.94.66.147,
|
||||
213.169.251.35,
|
||||
216.221.188.182,
|
||||
216.234.179.13,
|
||||
243.185.187.39,
|
||||
37.61.54.158,
|
||||
4.36.66.178,
|
||||
46.82.174.68,
|
||||
59.24.3.173,
|
||||
64.33.88.161,
|
||||
64.33.99.47,
|
||||
64.66.163.251,
|
||||
65.104.202.252,
|
||||
65.160.219.113,
|
||||
66.45.252.237,
|
||||
69.55.52.253,
|
||||
72.14.205.104,
|
||||
72.14.205.99,
|
||||
78.16.49.15,
|
||||
8.7.198.45,
|
||||
93.46.8.89,
|
||||
37.61.54.158,
|
||||
243.185.187.39,
|
||||
190.93.247.4,
|
||||
190.93.246.4,
|
||||
190.93.245.4,
|
||||
190.93.244.4,
|
||||
65.49.2.178,
|
||||
189.163.17.5,
|
||||
23.89.5.60,
|
||||
49.2.123.56,
|
||||
54.76.135.1,
|
||||
77.4.7.92,
|
||||
118.5.49.6,
|
||||
159.24.3.173,
|
||||
188.5.4.96,
|
||||
197.4.4.12,
|
||||
220.250.64.24,
|
||||
243.185.187.30,
|
||||
249.129.46.48,
|
||||
253.157.14.165;
|
||||
reject_policy = fail;
|
||||
}
|
||||
|
||||
server {
|
||||
label = "special"; # 这个随便写
|
||||
ip = 117.50.10.10,52.80.52.52,119.29.29.29; # 这里为备用DNS服务器的 ip 地址
|
||||
port = 5353; # 推荐使用53以外的端口(DNS服务器必须支持
|
||||
proxy_only = on;
|
||||
timeout = 5;
|
||||
}
|
||||
|
||||
source {
|
||||
owner=localhost;
|
||||
// serve_aliases=on;
|
||||
file="/etc/hosts";
|
||||
}
|
||||
|
||||
rr {
|
||||
name=localhost;
|
||||
reverse=on;
|
||||
a=127.0.0.1;
|
||||
owner=localhost;
|
||||
soa=localhost,root.localhost,42,86400,900,86400,86400;
|
||||
}
|
||||
EOF
|
||||
|
||||
if [ ! -f "/var/dnscache/pdnsd.cache" ]; then
|
||||
mkdir -p "/var/dnscache"
|
||||
echo -ne "pd13\000\000\000\000" > "/var/dnscache/pdnsd.cache"
|
||||
chown -R nobody.nogroup "/var/dnscache"
|
||||
fi
|
||||
|
||||
[ -d "/var/sbin" ] || mkdir -p "/var/sbin"
|
||||
cp -a "/usr/sbin/pdnsd" "/var/sbin/dnscache"
|
||||
/var/sbin/dnscache -c "/var/run/dnscache/dnscache.conf" > "/var/log/dnscache.file" 2>&1 &
|
||||
echo "PDNSD: Start DNS Caching"
|
||||
}
|
||||
|
||||
start_dnsforwarder() {
|
||||
mkdir -p "/var/run/dnscache"
|
||||
cat > "/var/run/dnscache/dnscache.conf" <<EOF
|
||||
LogOn false
|
||||
LogFileThresholdLength 102400
|
||||
LogFileFolder /var/run/dnscache
|
||||
UDPLocal 127.0.0.1:5333
|
||||
UDPGroup ${dns_caching_dns} * on
|
||||
GroupFile
|
||||
BlockIP 243.185.187.39,46.82.174.68,37.61.54.158,93.46.8.89,59.24.3.173,203.98.7.65,8.7.198.45,78.16.49.15,159.106.121.75,69.63.187.12,31.13.76.8,31.13.64.49
|
||||
IPSubstituting
|
||||
BlockNegativeResponse false
|
||||
Hosts
|
||||
HostsUpdateInterval 18000
|
||||
HostsDownloadPath
|
||||
HostsScript
|
||||
HostsRetryInterval 30
|
||||
AppendHosts
|
||||
BlockIpv6WhenIpv4Exists false
|
||||
UseCache true
|
||||
CacheSize 1048576
|
||||
MemoryCache true
|
||||
CacheFile
|
||||
IgnoreTTL false
|
||||
OverrideTTL -1
|
||||
MultipleTTL 1
|
||||
ReloadCache false
|
||||
OverwriteCache false
|
||||
DisabledType
|
||||
DisabledDomain
|
||||
DisabledList
|
||||
DomainStatistic false
|
||||
DomainStatisticTempletFile
|
||||
StatisticUpdateInterval 29
|
||||
EOF
|
||||
|
||||
[ -d "/var/sbin" ] || mkdir -p "/var/sbin"
|
||||
cp -a "/usr/bin/dnsforwarder" "/var/sbin/dnscache"
|
||||
/var/sbin/dnscache -f "/var/run/dnscache/dnscache.conf" > "/var/log/dnscache.file" 2>&1 &
|
||||
echo "DnsForwarder: Start DNS Caching"
|
||||
|
||||
}
|
||||
|
||||
start_dnsproxy() {
|
||||
[ -d "/var/run/dnscache" ] || mkdir -p "/var/run/dnscache"
|
||||
echo -e "${dns_caching_dns//,/\\n}" > "/var/run/dnscache/dnscache.conf"
|
||||
|
||||
[ -d "/var/sbin" ] || mkdir -p "/var/sbin"
|
||||
cp -a "/usr/bin/dnsproxy" "/var/sbin/dnscache"
|
||||
/var/sbin/dnscache -l "127.0.0.1" -p "5333" -b "tls://9.9.9.9" -f "tls://8.8.8.8" -u "/var/run/dnscache/dnscache.conf" --all-servers --cache --cache-min-ttl=3600 > "/var/log/dnscache.file" 2>&1 &
|
||||
echo "DNSProxy: Start DNS Caching"
|
||||
}
|
||||
|
||||
stop_dnscache() {
|
||||
killall -9 "dnscache"
|
||||
kill -9 $(ps | grep dnscache-while.sh | grep -v "grep" | awk '{print $1}')
|
||||
rm -rf "/var/dnscache" "/var/run/dnscache"
|
||||
echo "Stop DNS Caching"
|
||||
}
|
||||
|
||||
change_dns() {
|
||||
uci -q delete dhcp.@dnsmasq[0].server
|
||||
uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5333"
|
||||
uci set dhcp.@dnsmasq[0].noresolv="1"
|
||||
uci commit dhcp
|
||||
|
||||
}
|
||||
|
||||
revert_dns() {
|
||||
uci -q del_list dhcp.@dnsmasq[0].server="127.0.0.1#5333"
|
||||
uci set dhcp.@dnsmasq[0].resolvfile="/tmp/resolv.conf.d/resolv.conf.auto"
|
||||
uci set dhcp.@dnsmasq[0].noresolv="0"
|
||||
uci commit dhcp
|
||||
}
|
||||
|
||||
start(){
|
||||
inital_conf
|
||||
|
||||
uci set firewall.@defaults[0].flow_offloading="${sw_flow}"
|
||||
uci set firewall.@defaults[0].flow_offloading_hw="${hw_flow}"
|
||||
uci set firewall.@defaults[0].fullcone="${fullcone_nat}"
|
||||
uci commit firewall
|
||||
|
||||
[ "${sw_flow}" -ne "1" ] && [ "${sfe_flow}" -eq "1" ] && {
|
||||
lsmod | grep -q fast_classifier || modprobe fast_classifier 2>"/dev/null"
|
||||
echo "${sfe_bridge}" > "/sys/fast_classifier/skip_to_bridge_ingress" 2>"/dev/null"
|
||||
if [ "${sfe_ipv6}" -eq "1" ]; then
|
||||
[ ! -e "/dev/sfe_ipv6" ] && mknod "/dev/sfe_ipv6" "c" "$(cat "/sys/sfe_ipv6/debug_dev")" "0"
|
||||
else
|
||||
rm -f "/dev/sfe_ipv6"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "${bbr_cca}" -eq "1" ]; then
|
||||
sysctl -w net.ipv4.tcp_congestion_control="bbr"
|
||||
else
|
||||
sysctl -w net.ipv4.tcp_congestion_control="cubic"
|
||||
fi
|
||||
|
||||
if [ "${dns_caching}" -eq "1" ]; then
|
||||
stop_dnscache
|
||||
sleep 1
|
||||
|
||||
rm -f "/var/log/dnscache.file"
|
||||
if [ "${dns_caching_mode}" = "1" ]; then
|
||||
start_pdnsd
|
||||
elif [ "${dns_caching_mode}" = "2" ]; then
|
||||
start_dnsforwarder
|
||||
elif [ "${dns_caching_mode}" = "3" ]; then
|
||||
start_dnsproxy
|
||||
fi
|
||||
|
||||
change_dns
|
||||
/usr/share/dnscache/dnscache-while.sh > "/var/log/dnscache.file" 2>&1 &
|
||||
else
|
||||
stop_dnscache
|
||||
revert_dns
|
||||
fi
|
||||
|
||||
if [ "${restart_utils}" = "true" ]; then
|
||||
/etc/init.d/dnsmasq restart >"/dev/null" 2>&1 && echo "DNSMASQ change"
|
||||
/etc/init.d/firewall restart >"/dev/null" 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
stop(){
|
||||
inital_conf
|
||||
|
||||
uci set firewall.@defaults[0].flow_offloading="${sw_flow}"
|
||||
uci set firewall.@defaults[0].flow_offloading_hw="${hw_flow}"
|
||||
uci set firewall.@defaults[0].fullcone="${fullcone_nat}"
|
||||
uci commit firewall
|
||||
|
||||
[ "${sfe_flow}" -ne "1" ] && {
|
||||
echo "0" > "/sys/fast_classifier/skip_to_bridge_ingress" 2>"/dev/null"
|
||||
rm -f "/dev/sfe_ipv6"
|
||||
rmmod "fast_classifier" 2>"/dev/null"
|
||||
}
|
||||
|
||||
stop_dnscache
|
||||
revert_dns
|
||||
|
||||
if [ "${restart_utils}" = "true" ]; then
|
||||
/etc/init.d/dnsmasq restart >"/dev/null" 2>&1 && echo "DNSMASQ revert"
|
||||
/etc/init.d/firewall restart >"/dev/null" 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
restart(){
|
||||
restart_utils="false"
|
||||
stop
|
||||
start
|
||||
/etc/init.d/dnsmasq restart >"/dev/null" 2>&1 && echo "DNSMASQ restart"
|
||||
/etc/init.d/firewall restart >"/dev/null" 2>&1
|
||||
}
|
||||
|
||||
|
||||
check_status(){
|
||||
case "$1" in
|
||||
"fastpath")
|
||||
if [ "$(cat "/sys/module/xt_FLOWOFFLOAD/refcnt" 2>"/dev/null" || echo 0)" -ne "0" ]; then
|
||||
echo -n "Flow Offloading"
|
||||
exit 0
|
||||
elif lsmod | grep -q "ecm"; then
|
||||
echo -n "QCA-NSS-ECM"
|
||||
exit 0
|
||||
elif lsmod | grep -q "fast_classifier"; then
|
||||
echo -n "Shortcut-FE"
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
"fullconenat")
|
||||
[ "$(cat "/sys/module/xt_FULLCONENAT/refcnt" 2>"/dev/null" || echo 0)" -ne "0" ] && \
|
||||
exit 0 || exit 1
|
||||
;;
|
||||
"bbr")
|
||||
[ "x$(cat "/proc/sys/net/ipv4/tcp_congestion_control" 2>"/dev/null")" = "xbbr" ] && \
|
||||
exit 0 || exit 1
|
||||
;;
|
||||
"dns")
|
||||
pgrep "dnscache" >"/dev/null" && exit 0 || exit 1
|
||||
;;
|
||||
*)
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
}
|
10
package/lean/luci-app-turboacc/root/etc/uci-defaults/turboacc
Executable file
10
package/lean/luci-app-turboacc/root/etc/uci-defaults/turboacc
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@turboacc[-1]
|
||||
add ucitrack turboacc
|
||||
set ucitrack.@turboacc[-1].init=turboacc
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
exit 0
|
38
package/lean/luci-app-turboacc/root/usr/share/dnscache/dnscache-while.sh
Executable file
38
package/lean/luci-app-turboacc/root/usr/share/dnscache/dnscache-while.sh
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
sleeptime=60
|
||||
|
||||
dnsconf="/var/run/dnscache/dnscache.conf"
|
||||
dnsprogram="/var/sbin/dnscache"
|
||||
logfile="/var/log/dnscache.file"
|
||||
|
||||
dns_caching="$(uci -q get turboacc.config.dns_caching)"
|
||||
dns_caching_mode="$(uci -q get turboacc.config.dns_caching_mode)"
|
||||
|
||||
clean_log() {
|
||||
logrow="$(grep -c "" "${logfile}")"
|
||||
[ "${logrow}" -lt "500" ] || echo "${curtime} Log 条数超限,清空处理!" > "${logfile}"
|
||||
}
|
||||
|
||||
while [ "${dns_caching}" -eq "1" ];
|
||||
do
|
||||
curtime="$(date "+%H:%M:%S")"
|
||||
|
||||
clean_log
|
||||
|
||||
if pidof dnscache > "/dev/null"; then
|
||||
echo -e "${curtime} online!" >> "${logfile}"
|
||||
else
|
||||
if [ "${dns_caching_mode}" = "1" ]; then
|
||||
${dnsprogram} -c "${dnsconf}" > "${logfile}" 2>&1 &
|
||||
elif [ "${dns_caching_mode}" = "2" ]; then
|
||||
${dnsprogram} -f "${dnsconf}" > "${logfile}" 2>&1 &
|
||||
elif [ "${dns_caching_mode}" = "3" ]; then
|
||||
${dnsprogram} -o "${logfile}" -l "127.0.0.1" -p "5333" -b "tls://9.9.9.9" -f "tls://8.8.8.8" -u "${dnsconf}" --all-servers --cache --cache-min-ttl=3600 > "${logfile}" 2>&1 &
|
||||
fi
|
||||
echo "${curtime} 重启服务!" >> ${logfile}
|
||||
fi
|
||||
|
||||
sleep "${sleeptime}"
|
||||
continue
|
||||
done
|
Loading…
Reference in New Issue
Block a user