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:
Tianling Shen 2021-06-29 22:32:29 +08:00 committed by GitHub
parent 87d72cae64
commit d05161e2a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 827 additions and 843 deletions

View File

@ -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
View 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"

View File

View 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))

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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服务器"

View File

@ -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'

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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服务器"

View File

@ -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'

View File

@ -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"
}

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View 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

View File

@ -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>

View 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 界面"

View 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'

View 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
}

View 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

View 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