mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-30 16:55:13 +08:00
update
This commit is contained in:
commit
1741072933
93 files changed
+6216
No files matched your search
@@ -0,0 +1,23 @@
|
||||
## 适用于openwrt 23.05 及以上的分支.
|
||||
## 所有插件都为网上收集的开源插件,感谢作者们的付出.
|
||||
|
||||
## 本仓库所有插件已编译IPK下载
|
||||
### 使用软件源请删除 opkg配置(/etc/opkg.conf) 中的 option check_signature
|
||||
|
||||
|
||||
| CPU架构 | 下载地址 | 适用设备 | 软件源 | 更新频率 |
|
||||
|----------------|-----------------------------------------------------|--------------------------------------|-----------|-----------|
|
||||
| X86_64 | [📥](https://dl.openwrt.ai/latest/packages/x86_64/kiddin9/) | 64位PC软路由 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/x86_64/kiddin9 | 日更 |
|
||||
| i386_pentium4 | [📥](https://dl.openwrt.ai/latest/packages/i386_pentium4/kiddin9/) | 32位PC软路由 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/i386_pentium4/kiddin9 | 日更 |
|
||||
| aarch64_generic | [📥](https://dl.openwrt.ai/latest/packages/aarch64_generic/kiddin9/) | R2S/R4S等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_generic/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a72 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a72/kiddin9/) | 树莓派4B等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a72/kiddin9 | 日更 |
|
||||
| arm_arm1176jzf-s_vfp | [📥](https://dl.openwrt.ai/latest/packages/arm_arm1176jzf-s_vfp/kiddin9/) | 树莓派1等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_arm1176jzf-s_vfp/kiddin9 | 日更 |
|
||||
| mipsel_24kc | [📥](https://dl.openwrt.ai/latest/packages/mipsel_24kc/kiddin9/) | k2p,ac2100等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/mipsel_24kc/kiddin9 | 日更 |
|
||||
| mips_24kc | [📥](https://dl.openwrt.ai/latest/packages/mips_24kc/kiddin9/) | GL-AR300M,NETGEAR WNDR4300等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/mips_24kc/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a53 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a53/kiddin9/) | N1,红米AX6,小米AX6S等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a53/kiddin9 | 日更 |
|
||||
| arm_cortex-a9 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a9/kiddin9/) | 斐讯K3,华硕RT-AC68U,RT-AC88U等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a9/kiddin9 | 日更 |
|
||||
| arm_cortex-a7_neon-vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a7_neon-vfpv4/kiddin9/) | 华硕RT-ACRH17,RT-AC58U等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a7_neon-vfpv4/kiddin9 | 日更 |
|
||||
| arm_cortex-a9_vfpv3-d16 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a9_vfpv3-d16/kiddin9/) | Linksys WRT1900ACS等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a9_vfpv3-d16/kiddin9 | 日更 |
|
||||
| arm_cortex-a5_vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a5_vfpv4/kiddin9/) | 玩客云等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a5_vfpv4/kiddin9 | 日更 |
|
||||
| arm_cortex-a15_neon-vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a15_neon-vfpv4/kiddin9/) | NETGEAR R7800等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a15_neon-vfpv4/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a76 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a76/kiddin9/) | 树莓派5等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a76/kiddin9 | 日更 |
|
||||
@@ -0,0 +1,19 @@
|
||||
--- a/application/migrator/model/init.go
|
||||
+++ b/application/migrator/model/init.go
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/jinzhu/gorm"
|
||||
|
||||
"github.com/cloudreve/Cloudreve/v4/application/migrator/conf"
|
||||
- "github.com/cloudreve/Cloudreve/v4/pkg/util"
|
||||
_ "github.com/jinzhu/gorm/dialects/mssql"
|
||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
||||
_ "github.com/jinzhu/gorm/dialects/postgres"
|
||||
@@ -37,7 +36,7 @@ func Init() error {
|
||||
switch confDBType {
|
||||
case "UNSET", "sqlite":
|
||||
// 未指定数据库或者明确指定为 sqlite 时,使用 SQLite 数据库
|
||||
- db, err = gorm.Open("sqlite3", util.RelativePath(conf.DatabaseConfig.DBFile))
|
||||
+ db, err = gorm.Open("sqlite3", "/etc/cloudreve/" + conf.DatabaseConfig.DBFile)
|
||||
case "postgres":
|
||||
db, err = gorm.Open(confDBType, fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable",
|
||||
conf.DatabaseConfig.Host,
|
||||
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
|
||||
function NEWPART(){
|
||||
ROOT_DISK=$1
|
||||
# 检查是否有未分配空间
|
||||
DISK_SIZE=$(parted -s $ROOT_DISK unit MB print | grep '^Disk' | awk '{print $3}' | sed 's/MB//')
|
||||
LAST_PART_END=$(parted -s $ROOT_DISK unit MB print | tail -n 2 | head -n 1 | awk '{print $3}' | sed 's/MB//')
|
||||
[ $LAST_PART_END == "End" ] && return 0
|
||||
UNALLOCATED_SPACE="$(awk "BEGIN {print $DISK_SIZE - $LAST_PART_END}")"
|
||||
awk 'BEGIN {exit !('$UNALLOCATED_SPACE' >= '1024')}' && {
|
||||
# 创建新分区
|
||||
parted -s $ROOT_DISK mkpart primary ext4 ${LAST_PART_END}MB 100% && {
|
||||
|
||||
ROOT_DISK_NAME="$(echo $ROOT_DISK | cut -d / -f 3)"
|
||||
LAST_PART_NAME="$(lsblk -nlo NAME | grep $ROOT_DISK_NAME | tail -n 1)"
|
||||
# 格式化新分区
|
||||
mkfs.ext4 -F -L "docker" /dev/${LAST_PART_NAME}
|
||||
pgrep -x /usr/bin/dockerd > /dev/null && /etc/init.d/dockerd stop
|
||||
mkdir -p /opt/docker
|
||||
eval $(block info /dev/${LAST_PART_NAME} | grep -o -e 'UUID="\S*"')
|
||||
[ ! -f /etc/config/fstab ] && ( block detect > /etc/config/fstab )
|
||||
uci set fstab.mountdocker="mount"
|
||||
uci set fstab.mountdocker.uuid="${UUID}"
|
||||
uci set fstab.mountdocker.target="/opt/docker"
|
||||
uci commit fstab
|
||||
umount -f /dev/${LAST_PART_NAME}
|
||||
/sbin/block mount
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cat /etc/mtab | grep -q "/opt/docker" || {
|
||||
uci -q get fstab.mountdocker || {
|
||||
disk="$(lsblk | awk '/disk/ {print $1; exit}')"
|
||||
NEWPART /dev/$disk
|
||||
}
|
||||
}
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,57 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=homebox
|
||||
PKG_VERSION:=0.0.0-dev.2024101306
|
||||
PKG_RELEASE:=21
|
||||
|
||||
ifeq ($(ARCH),aarch64)
|
||||
H_ARCH:=arm64
|
||||
|
||||
else ifeq ($(ARCH),arm)
|
||||
H_ARCH:=arm
|
||||
|
||||
else ifeq ($(ARCH),i386)
|
||||
H_ARCH:=386
|
||||
|
||||
else ifeq ($(ARCH),mips)
|
||||
H_ARCH:=mips
|
||||
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
H_ARCH:=mips
|
||||
|
||||
else ifeq ($(ARCH),x86_64)
|
||||
H_ARCH:=amd64
|
||||
endif
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=A Toolbox for Home Local Networks Speed Test
|
||||
URL:=https://github.com/XGHeaven/homebox
|
||||
DEPENDS:=@(i386||x86_64||arm||aarch64||mipsel||mips) +libstdcpp
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
A Toolbox for Home Local Networks Speed Test
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
[ ! -f $(PKG_BUILD_DIR)/server-linux-$(H_ARCH).tar.gz ] && wget https://github.com/XGHeaven/homebox/releases/download/v$(PKG_VERSION)/server-linux-$(H_ARCH).tar.gz -O $(PKG_BUILD_DIR)/server-linux-$(H_ARCH).tar.gz
|
||||
tar -xzvf $(PKG_BUILD_DIR)/server-linux-$(H_ARCH).tar.gz -C $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/server-linux-$(H_ARCH) $(1)/usr/bin/homebox
|
||||
$(INSTALL_CONF) ./files/homebox.config $(1)/etc/config/homebox
|
||||
$(INSTALL_BIN) ./files/homebox.init $(1)/etc/init.d/homebox
|
||||
$(INSTALL_BIN) ./files/homebox.uci-default $(1)/etc/uci-defaults/homebox
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=Luci for support bridge
|
||||
LUCI_DEPENDS:=+ip-bridge +kmod-nft-bridge
|
||||
|
||||
define Package/luci-app-bridge/conffiles
|
||||
/etc/bridge/network
|
||||
/etc/bridge/firewall
|
||||
endef
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -0,0 +1,20 @@
|
||||
module("luci.controller.bridge", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/bridge") then
|
||||
return
|
||||
end
|
||||
|
||||
local page
|
||||
|
||||
page = entry({"admin", "network", "bridge"}, cbi("bridge"), _("Transparent bridge"), 60)
|
||||
page.dependent = true
|
||||
entry({"admin","network","bridge","status"},call("act_status")).leaf=true
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e={}
|
||||
e.running=luci.sys.call("iptables -L INPUT | grep zone_.*input | grep bridge >/dev/null")==0
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
local e=require"nixio.fs"
|
||||
|
||||
m=Map("bridge",translate("Transparent bridge"),
|
||||
translate("<font color=green>Let the routing become a transparent bridge device that communicates with the superior routing without perception and has the function of firewall.</font>"))
|
||||
|
||||
m:section(SimpleSection).template = "bridge/bridge_status"
|
||||
|
||||
s=m:section(TypedSection,"bridge",translate("Settings"))
|
||||
s.anonymous=true
|
||||
o=s:option(Flag,"enabled", translate("Passerelle transparente"))
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"gateway", translate("GatewayIP"), translate("Superior routing IP"))
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"ipaddr", translate("Bridge IP"), translate("Need to be on the same network segment as the upper-level route but do not conflict with other device IPs."))
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"netmask", translate("Netmask"))
|
||||
o.rmempty=false
|
||||
|
||||
o=s:option(Value,"network", translate("Number of network ports"), translate("The number of physical network ports on the soft route is automatically detected when left blank."))
|
||||
|
||||
o = m:section(TypedSection, "bridge", translate("Setting instructions:"), translate("<li>Applicable to network environments that have superior routing and require some functions of soft routing but do not want multi-level NAT.</li>The switch or client needs to be connected to the network port of the soft route.<li>The WEB console of the soft route after the transparent bridge is enabled is the bridge IP.</li>Some features on the soft route will be invalid after enabling the transparent bridge, such as Full Cone, multi-dial, etc.<li>After closing, restore the network settings when the plugin is installed, and the WEB console reverts to the original set IP.</li>"))
|
||||
o.anonymous = true
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,22 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(3, '<%=url([[admin]], [[network]], [[bridge]], [[status]])%>', null,
|
||||
function(x, data) {
|
||||
var tb = document.getElementById('bridge_status');
|
||||
if (data && tb) {
|
||||
if (data.running) {
|
||||
|
||||
tb.innerHTML = '<font color=green><%:RUNNING%></font>';
|
||||
} else {
|
||||
tb.innerHTML = '<font color=red><%:NOT RUNNING%></font>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="bridge_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
@@ -0,0 +1,48 @@
|
||||
msgid "Transparent bridge"
|
||||
msgstr "透明网桥"
|
||||
|
||||
msgid "Passerelle transparente"
|
||||
msgstr "开启透明网桥"
|
||||
|
||||
msgid "<font color=green>Let the routing become a transparent bridge device that communicates with the superior routing without perception and has the function of firewall.</font>"
|
||||
msgstr "<font color=green>让路由成为与上级路由通信,无感知,并具备防火墙功能的透明网桥设备。</font>"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
msgid "GatewayIP"
|
||||
msgstr "网关IP"
|
||||
|
||||
msgid "Superior routing IP"
|
||||
msgstr "上级路由IP"
|
||||
|
||||
msgid "Bridge IP"
|
||||
msgstr "网桥IP"
|
||||
|
||||
msgid "Need to be on the same network segment as the upper-level route but do not conflict with other device IPs."
|
||||
msgstr "需要和上级路由在同一个网段但不要和其它设备IP冲突 "
|
||||
|
||||
msgid "Netmask"
|
||||
msgstr "子网掩码"
|
||||
|
||||
msgid "Number of network ports"
|
||||
msgstr "网口数"
|
||||
|
||||
msgid "The number of physical network ports on the soft route is automatically detected when left blank."
|
||||
msgstr "软路由物理网口数量,留空则自动探测。"
|
||||
|
||||
msgid "Setting instructions:"
|
||||
msgstr "设置说明:"
|
||||
|
||||
msgid ""
|
||||
"<li>Applicable to network environments that have superior routing and require some functions of soft routing but do not want multi-level NAT.</li>"
|
||||
"The switch or client needs to be connected to the network port of the soft route.<li>"
|
||||
"The WEB console of the soft route after the transparent bridge is enabled is the bridge IP.</li>"
|
||||
"Some features on the soft route will be invalid after enabling the transparent bridge, such as Full Cone, multi-dial, etc.<li>"
|
||||
"After closing, restore the network settings when the plugin is installed, and the WEB console reverts to the original set IP.</li>"
|
||||
msgstr ""
|
||||
"<li><font color=orange>✯</font>适用于有上级路由,需要软路由的一些功能但又不想多级NAT的网络环境。</li>"
|
||||
"<font color=orange>✯</font>交换机或客户端需要连接到软路由的网口下面。<li>"
|
||||
"<font color=orange>✯</font>启用透明网桥后软路由的WEB控制台为网桥IP。</li>"
|
||||
"<font color=orange>✯</font>启用透明网桥后软路由上的一些功能会失效,如:Full Cone、多拨等。<li>"
|
||||
"<font color=orange>✯</font>关闭后恢复插件安装时的网络设置,WEB控制台恢复为原始设置的IP。</li>"
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
config bridge 'bridge'
|
||||
option gateway '192.168.1.1'
|
||||
option ipaddr '192.168.1.2'
|
||||
option netmask '255.255.255.0'
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
|
||||
run_bridge()
|
||||
{
|
||||
config_get enabled $1 enabled
|
||||
config_get gateway $1 gateway
|
||||
config_get ipaddr $1 ipaddr
|
||||
config_get netmask $1 netmask
|
||||
config_get network $1 network
|
||||
|
||||
ipv6=$(uci get network.globals.ula_prefix)
|
||||
if=$(cat /etc/config/network | wc -l)
|
||||
|
||||
if [ "$enabled" = "1" ]; then
|
||||
|
||||
#防止重复配置
|
||||
a=$(uci get network.bridge.device | sed 's/ /\n/g' |wc -l)
|
||||
b=$(uci get network.bridge.ipaddr)
|
||||
c=$(uci get network.bridge.netmask)
|
||||
d=$(uci get network.bridge.gateway)
|
||||
e=$(ls /sys/class/net | grep "eth" | wc -l)
|
||||
|
||||
if [ "$a" = "$network" ] || [ "$a" = "$e" ] && [ "$network" = "" ] || [ "$a" = "$network" ]; then
|
||||
f=yes
|
||||
else
|
||||
f=no
|
||||
fi
|
||||
|
||||
if [ "$b" = "$ipaddr" ] && [ "$c" = "$netmask" ] && [ "$d" = "$gateway" ] && [ "$f" = "yes" ]; then
|
||||
break;
|
||||
else
|
||||
|
||||
#模拟输入
|
||||
if [ "$network" = "0" ] || [ "$network" = "" ]; then
|
||||
eth=$(ls /sys/class/net | grep "eth" | tr '\n' ' ' | sed 's/[ ]*$//g')
|
||||
else
|
||||
eth=$(ETH $network | tr '\n' ' ' | sed 's/[ ]*$//g')
|
||||
fi
|
||||
|
||||
#备份配置
|
||||
if [ ! -f "/etc/bridge/firewall" ]; then
|
||||
mkdir /etc/bridge
|
||||
cp /etc/config/network /etc/bridge/network
|
||||
cp /etc/config/firewall /etc/bridge/firewall
|
||||
|
||||
fi
|
||||
|
||||
#清空配置
|
||||
cat /dev/null> /etc/config/network
|
||||
cat /dev/null> /etc/config/firewall
|
||||
|
||||
#写入network网络接口
|
||||
uci set network.loopback=interface
|
||||
uci set network.loopback.device=lo
|
||||
uci set network.loopback.proto=static
|
||||
uci set network.loopback.ipaddr=127.0.0.1
|
||||
uci set network.loopback.netmask=255.0.0.0
|
||||
uci set network.globals=globals
|
||||
uci set network.globals.ula_prefix=$ipv6
|
||||
uci set network.bridge=interface
|
||||
uci set network.bridge.type='bridge'
|
||||
uci set network.bridge.device="$eth"
|
||||
uci set network.bridge.proto='static'
|
||||
uci set network.bridge.ipaddr=$ipaddr
|
||||
uci set network.bridge.netmask=$netmask
|
||||
uci set network.bridge.gateway=$gateway
|
||||
uci set network.bridge.dns=$gateway
|
||||
uci set network.bridge.force_link='0'
|
||||
uci commit network
|
||||
|
||||
#写入firewall防火墙
|
||||
uci add firewall zone
|
||||
uci set firewall.@zone[0].input=ACCEPT
|
||||
uci set firewall.@zone[0].output=ACCEPT
|
||||
uci set firewall.@zone[0].forward=ACCEPT
|
||||
uci set firewall.@zone[0].conntrack=1
|
||||
uci set firewall.@zone[0].mtu_fix=1
|
||||
uci set firewall.@zone[0].name=bridge
|
||||
uci set firewall.@zone[0].network=bridge
|
||||
uci commit firewall
|
||||
|
||||
#重启网络DNS服务与防火墙
|
||||
/etc/init.d/network reload 2>/dev/null &
|
||||
/etc/init.d/dnsmasq reload 2>/dev/null &
|
||||
/etc/init.d/firewall reload 2>/dev/null &
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
#恢复配置&删除备份
|
||||
if [ -f "/etc/bridge/firewall" ]; then
|
||||
cp /etc/bridge/network /etc/config/network
|
||||
cp /etc/bridge/firewall /etc/config/firewall
|
||||
rm -rf /etc/bridge
|
||||
|
||||
#重启网络DNS服务与防火墙
|
||||
/etc/init.d/network reload 2>/dev/null &
|
||||
/etc/init.d/dnsmasq reload 2>/dev/null &
|
||||
/etc/init.d/firewall reload 2>/dev/null &
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
ETH()
|
||||
{
|
||||
eth=0
|
||||
while [ $eth -le $(expr "$1" - 1) ]
|
||||
do
|
||||
eth=`expr $eth + 1`
|
||||
a=`expr $eth - 1`
|
||||
echo "eth$a"
|
||||
done
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
config_load bridge
|
||||
config_foreach run_bridge bridge
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-bridge.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-bridge.json << EEOF
|
||||
{
|
||||
"config": "bridge",
|
||||
"init": "bridge"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
|
||||
chmod +x /etc/init.d/bridge
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
|
||||
server {
|
||||
listen |PORT|;
|
||||
listen [::]:|PORT|;
|
||||
|ssl_certificate|
|
||||
|ssl_certificate_key|
|
||||
ssl_session_timeout 5m;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_prefer_server_ciphers on;
|
||||
server_name localhost;
|
||||
root |project_directory|;
|
||||
index index.html index.htm index.php;
|
||||
location ~ \.php(.*)$ {
|
||||
fastcgi_pass unix:|SOCK|; # 通过 Unix 套接字执行 PHP
|
||||
fastcgi_index index.php;
|
||||
fastcgi_split_path_info ^(.+\.php)(.*)$;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 修复 Nginx fastcgi 漏洞
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
client_max_body_size |upload_max_filesize|;
|
||||
client_body_timeout 3600s;
|
||||
fastcgi_connect_timeout 3600s;
|
||||
fastcgi_send_timeout 3600s;
|
||||
fastcgi_read_timeout 3600s;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
msgid "Alert"
|
||||
msgstr "警报"
|
||||
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
msgid "All entries"
|
||||
msgstr "所有条目"
|
||||
|
||||
msgid "Apply"
|
||||
msgstr "应用"
|
||||
|
||||
msgid "Apply message filter as regular expression"
|
||||
msgstr "将消息过滤器应用为正则表达式"
|
||||
|
||||
msgid "Apply timestamp filter as regular expression"
|
||||
msgstr "将时间戳过滤器应用为正则表达式"
|
||||
|
||||
msgid "Auto refresh"
|
||||
msgstr "自动刷新"
|
||||
|
||||
msgid "Convert timestamps to a human readable date"
|
||||
msgstr "将时间戳转换为人类可读的日期"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
msgid "Dismiss"
|
||||
msgstr "关闭"
|
||||
|
||||
msgid "Download log"
|
||||
msgstr "下载日志"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "编辑"
|
||||
|
||||
msgid "Entries"
|
||||
msgstr "条目"
|
||||
|
||||
msgid "Facility"
|
||||
msgstr "模块"
|
||||
|
||||
msgid "Facilities"
|
||||
msgstr "模块"
|
||||
|
||||
msgid "Filter is regexp"
|
||||
msgstr "过滤器是正则表达式"
|
||||
|
||||
msgid "Filter settings"
|
||||
msgstr "过滤设置"
|
||||
|
||||
msgid "Host"
|
||||
msgstr "主机"
|
||||
|
||||
msgid "Hosts"
|
||||
msgstr "主机"
|
||||
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "无效的正则表达式"
|
||||
|
||||
msgid "Kernel Log"
|
||||
msgstr "内核日志"
|
||||
|
||||
msgid "Last entries"
|
||||
msgstr "显示最新条目数"
|
||||
|
||||
msgid "Level"
|
||||
msgstr "级别"
|
||||
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
msgid "Log Viewer"
|
||||
msgstr "系统日志"
|
||||
|
||||
msgid "Logging levels"
|
||||
msgstr "日志级别"
|
||||
|
||||
msgid "Logread not found"
|
||||
msgstr "未找到 Logread"
|
||||
|
||||
msgid "Message"
|
||||
msgstr "消息"
|
||||
|
||||
msgid "Message filter"
|
||||
msgstr "消息过滤器"
|
||||
|
||||
msgid "More entries"
|
||||
msgstr "更多条目"
|
||||
|
||||
msgid "No entries available..."
|
||||
msgstr "没有可用条目..."
|
||||
|
||||
msgid "Refresh log"
|
||||
msgstr "刷新日志"
|
||||
|
||||
msgid "Sorting entries"
|
||||
msgstr "排序条目"
|
||||
|
||||
msgid "System Log"
|
||||
msgstr "系统日志"
|
||||
|
||||
msgid "Timestamp"
|
||||
msgstr "时间"
|
||||
|
||||
msgid "Timestamp filter"
|
||||
msgstr "时间过滤器"
|
||||
|
||||
msgid "Type a search pattern..."
|
||||
msgstr "输入搜索模式..."
|
||||
|
||||
msgid "Unable to load log data:"
|
||||
msgstr "无法加载日志数据:"
|
||||
|
||||
msgid "Unsupported log format"
|
||||
msgstr "不支持的日志格式"
|
||||
|
||||
msgid "ascending"
|
||||
msgstr "升序"
|
||||
|
||||
msgid "descending"
|
||||
msgstr "降序"
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
sed -i "s/luci-mod-status-logs/luci-mod-status-log/" /usr/share/luci/menu.d/luci-mod-status.json
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,9 @@
|
||||
[ "$ACTION" = "add" ] && {
|
||||
[ "$(uci -q get partexp.global.target_disk)" ] || {
|
||||
target_disk="$(lsblk -o NAME | grep sd | grep -v "[0-9]" | tail -n 1)"
|
||||
[ "$(block info | grep "$target_disk" | grep "kernel")" ] || {
|
||||
uci -q set partexp.global.target_disk="$target_disk"
|
||||
uci commit partexp
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#
|
||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI page for PPTP VPN Server
|
||||
LUCI_DEPENDS:=+pptpd +kmod-mppe +ipset
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
添加如下代码到/feeds/luci.index
|
||||
|
||||
|
||||
Source-Makefile: feeds/luci/applications/luci-app-pptpd/Makefile
|
||||
Package: luci-app-pptpd
|
||||
Submenu: 3. Applications
|
||||
Version: x-1
|
||||
Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +pptpd +kmod-mppe +ipset
|
||||
Conflicts:
|
||||
Menu-Depends:
|
||||
Provides:
|
||||
Build-Depends: lua/host luci-base/host
|
||||
Section: luci
|
||||
Category: LuCI
|
||||
Title: LuCI page for PPTP VPN Server
|
||||
Maintainer:
|
||||
Source:
|
||||
Type: ipkg
|
||||
Description: LuCI page for PPTP VPN Server
|
||||
|
||||
@@
|
||||
@@ -0,0 +1,38 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2014 HackPascal <hackpascal@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
module("luci.controller.pptpd", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/pptpd") then
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "services", "pptpd"},
|
||||
alias("admin", "services", "pptpd", "settings"),
|
||||
_("VPN Server"), 60)
|
||||
|
||||
entry({"admin", "services", "pptpd", "settings"},
|
||||
cbi("pptpd/settings"),
|
||||
_("General Settings"), 10).leaf = true
|
||||
|
||||
entry({"admin", "services", "pptpd", "users"},
|
||||
cbi("pptpd/users"),
|
||||
_("Users Manager"), 20).leaf = true
|
||||
|
||||
entry({"admin", "services", "pptpd", "online"},
|
||||
cbi("pptpd/online"),
|
||||
_("Online Users"), 30).leaf = true
|
||||
end
|
||||
@@ -0,0 +1,100 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2014 HackPascal <hackpascal@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
local data = {}
|
||||
local ds = require "luci.dispatcher"
|
||||
local ps = luci.util.execi("/bin/busybox top -bn1 | grep '/usr/sbin/pppd'")
|
||||
for line in ps do
|
||||
local pid, ppid, speed, gateway, vip, cip = line:match(
|
||||
"^ *(%d+) +(%d+) +.+options%.pptpd +(%d+) +(%S.-%S)%:(%S.-%S) +.+ +(.+)"
|
||||
)
|
||||
|
||||
local idx = tonumber(pid)
|
||||
if idx then
|
||||
data["%02i.%s" % { idx, "online" }] = {
|
||||
['PID'] = pid,
|
||||
['PPID'] = ppid,
|
||||
['SPEED'] = speed,
|
||||
['GATEWAY'] = gateway,
|
||||
['VIP'] = vip,
|
||||
['CIP'] = cip,
|
||||
['BLACKLIST'] = 0
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
-- local ps = luci.util.execi("sed -n '/## pptpd-blacklist-/p' /etc/firewall.user")
|
||||
local ps = luci.util.execi("sed = /etc/firewall.user | sed 'N;s/\\n/:/'")
|
||||
for line in ps do
|
||||
local idx, ip = line:match(
|
||||
"^ *(%d+)%:.+%#%# pptpd%-blacklist%-(.+)"
|
||||
)
|
||||
|
||||
local idx = tonumber(idx)
|
||||
if idx then
|
||||
data["%02i.%s" % { idx, "blacklist" }] = {
|
||||
['PID'] = "-1",
|
||||
['PPID'] = "-1",
|
||||
['SPEED'] = "-1",
|
||||
['GATEWAY'] = "-",
|
||||
['VIP'] = "-",
|
||||
['CIP'] = ip,
|
||||
['BLACKLIST'] = 1
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
f = SimpleForm("processes")
|
||||
f.reset = false
|
||||
f.submit = false
|
||||
|
||||
t = f:section(Table, data, translate("Online Users"))
|
||||
t:option(DummyValue, "GATEWAY", translate("Server IP"))
|
||||
t:option(DummyValue, "VIP", translate("Client IP"))
|
||||
t:option(DummyValue, "CIP", translate("IP address"))
|
||||
|
||||
blacklist = t:option(Button, "_blacklist", translate("Blacklist"))
|
||||
function blacklist.render(self, section, scope)
|
||||
if self.map:get(section, "BLACKLIST")==0 then
|
||||
self.title = translate("Add to Blacklist")
|
||||
self.inputstyle = "remove"
|
||||
else
|
||||
self.title = translate("Remove from Blacklist")
|
||||
self.inputstyle = "apply"
|
||||
end
|
||||
|
||||
Button.render(self, section, scope)
|
||||
end
|
||||
function blacklist.write(self, section)
|
||||
local CIP = self.map:get(section, "CIP")
|
||||
if self.map:get(section, "BLACKLIST")==0 then
|
||||
luci.util.execi("echo 'iptables -A input_rule -s %s -p tcp --dport 1723 -j DROP ## pptpd-blacklist-%s' >> /etc/firewall.user" % { CIP, CIP })
|
||||
luci.util.execi("iptables -A input_rule -s %s -p tcp --dport 1723 -j DROP" % { CIP })
|
||||
null, self.tag_error[section] = luci.sys.process.signal(self.map:get(section, "PID"), 9)
|
||||
else
|
||||
luci.util.execi("sed -i -e '/## pptpd-blacklist-%s/d' /etc/firewall.user" % { CIP })
|
||||
luci.util.execi("iptables -D input_rule -s %s -p tcp --dport 1723 -j DROP" % { CIP })
|
||||
end
|
||||
luci.http.redirect(ds.build_url("admin/services/pptpd/online"))
|
||||
end
|
||||
|
||||
kill = t:option(Button, "_kill", translate("Forced offline"))
|
||||
kill.inputstyle = "reset"
|
||||
function kill.write(self, section)
|
||||
null, self.tag_error[section] = luci.sys.process.signal(self.map:get(section, "PID"), 9)
|
||||
luci.http.redirect(ds.build_url("admin/services/pptpd/online"))
|
||||
end
|
||||
|
||||
return f
|
||||
@@ -0,0 +1,63 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2014 HackPascal <hackpascal@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
m = Map("pptpd")
|
||||
|
||||
s = m:section(TypedSection, "service", translate("General settings"))
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(Flag, "enabled", translate("Enable VPN Server"))
|
||||
o.rmempty = false
|
||||
function o.write(self, section, value)
|
||||
if value == "1" then
|
||||
luci.sys.init.enable("pptpd")
|
||||
luci.sys.call("/etc/init.d/pptpd start >/dev/null")
|
||||
else
|
||||
luci.sys.call("/etc/init.d/pptpd stop >/dev/null")
|
||||
luci.sys.init.disable("pptpd")
|
||||
end
|
||||
return Flag.write(self, section, value)
|
||||
end
|
||||
|
||||
o = s:option(Value, "localip", translate("Server IP"), translate("VPN Server IP address, it not required."))
|
||||
o.datatype = "ipaddr"
|
||||
o.placeholder = translate("10.0.0.1")
|
||||
o.rmempty = true
|
||||
o.default = ""
|
||||
|
||||
o = s:option(Value, "remoteip", translate("Client IP"), translate("VPN Client IP address, it not required."))
|
||||
o.placeholder = translate("10.0.0.2-254")
|
||||
o.rmempty = true
|
||||
o.default = ""
|
||||
|
||||
o = s:option(DynamicList, "dns", translate("DNS IP address"), translate("This will be sent to the client, it not required."))
|
||||
o.placeholder = translate("8.8.8.8")
|
||||
o.datatype = "ipaddr"
|
||||
--[[
|
||||
function o.write(self, section, value)
|
||||
luci.sys.call("echo xiaopiao $value >> /tmp/xiaopiao")
|
||||
end
|
||||
]]--
|
||||
|
||||
o = s:option(Flag, "mppe", translate("Enable MPPE Encryption"), translate("Allows 128-bit encrypted connection."))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "nat", translate("Enable NAT Forward"), translate("Allows forwarding traffic."))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "internet", translate("Enable remote service"), translate("Allows remote computers on the Internet to connect to VPN Server."))
|
||||
o.rmempty = false
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,49 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2014 HackPascal <hackpascal@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
m = Map("pptpd")
|
||||
|
||||
s = m:section(TypedSection, "login", translate("Users Manager"))
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
s.template = "cbi/tblsection"
|
||||
|
||||
o = s:option(Flag, "enabled", translate("Enabled"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "username", translate("User name"))
|
||||
o.placeholder = translate("User name")
|
||||
o.rmempty = true
|
||||
|
||||
o = s:option(Value, "password", translate("Password"))
|
||||
o.password = true
|
||||
o.rmempty = true
|
||||
|
||||
-- DummyValue
|
||||
o = s:option(Value, "ipaddress", translate("IP address"))
|
||||
o.placeholder = translate("Automatically")
|
||||
o.datatype = "ipaddr"
|
||||
-- o.value = translate("Automatically (No support)")
|
||||
o.rmempty = true
|
||||
function o.cfgvalue(self, section)
|
||||
value = self.map:get(section, "ipaddress")
|
||||
return value=="*" and "" or value
|
||||
end
|
||||
function o.remove(self, section)
|
||||
Value.write(self, section, "*")
|
||||
--luci.sys.call("/etc/init.d/pptpd restart >/dev/null")
|
||||
end
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,87 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2015-05-13\n"
|
||||
"Last-Translator: ming1054<ming1054@163.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
|
||||
msgid "Users Manager"
|
||||
msgstr "用户管理"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "User name"
|
||||
msgstr "用户名"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
msgid "IP address"
|
||||
msgstr "IP 地址"
|
||||
|
||||
msgid "Automatically"
|
||||
msgstr "自动分配"
|
||||
|
||||
msgid "General settings"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "Enable VPN Server"
|
||||
msgstr "启用 VPN 服务器"
|
||||
|
||||
msgid "Server IP"
|
||||
msgstr "服务器 IP 地址"
|
||||
|
||||
msgid "VPN Server IP address, it not required."
|
||||
msgstr "VPN 服务器远程地址,留空将自动设置。"
|
||||
|
||||
msgid "Client IP"
|
||||
msgstr "客户端 IP 地址"
|
||||
|
||||
msgid "VPN Client IP address, it not required."
|
||||
msgstr "分配给客户端的 IP 地址范围,留空将自动设置。"
|
||||
|
||||
msgid "DNS IP address"
|
||||
msgstr "DNS IP 地址"
|
||||
|
||||
msgid "This will be sent to the client, it not required."
|
||||
msgstr "设置 VPN 服务器默认 DNS 服务器,该设置非必须。"
|
||||
|
||||
msgid "Enable MPPE Encryption"
|
||||
msgstr "启用MPPE 加密"
|
||||
|
||||
msgid "Allows 128-bit encrypted connection."
|
||||
msgstr "允许使用 128 位加密连接。"
|
||||
|
||||
msgid "Enable NAT Forward"
|
||||
msgstr "启用 NAT 转发"
|
||||
|
||||
msgid "Allows forwarding traffic."
|
||||
msgstr "允许转发流量"
|
||||
|
||||
msgid "Enable remote service"
|
||||
msgstr "启用远程服务"
|
||||
|
||||
msgid "Allows remote computers on the Internet to connect to VPN Server."
|
||||
msgstr "允许远程计算机通过互联网连接到此 VPN 服务器。"
|
||||
|
||||
msgid "Online Users"
|
||||
msgstr "在线用户"
|
||||
|
||||
msgid "Blacklist"
|
||||
msgstr "黑名单"
|
||||
|
||||
msgid "Add to Blacklist"
|
||||
msgstr "加入黑名单"
|
||||
|
||||
msgid "Remove from Blacklist"
|
||||
msgstr "从黑名单中移除"
|
||||
|
||||
msgid "Forced offline"
|
||||
msgstr "强制下线"
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
config service 'pptpd'
|
||||
option localip '10.0.0.1'
|
||||
option remoteip '10.0.0.2-254'
|
||||
option nat '1'
|
||||
option internet '1'
|
||||
list dns '114.114.114.114'
|
||||
option mppe '1'
|
||||
option enabled '0'
|
||||
|
||||
config login
|
||||
option enabled '1'
|
||||
option ipaddress '*'
|
||||
option username 'username'
|
||||
option password 'password'
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006 OpenWrt.org
|
||||
|
||||
START=60
|
||||
BIN=/usr/sbin/pptpd
|
||||
DEFAULT=/etc/default/$BIN
|
||||
RUN_D=/var/run
|
||||
PID_F=$RUN_D/$BIN.pid
|
||||
CONFIG=/var/etc/pptpd.conf
|
||||
CHAP_SECRETS=/var/etc/chap-secrets
|
||||
|
||||
setup_dns() {
|
||||
[ -n "$1" ] || return 0
|
||||
echo ms-dns $1>>/etc/ppp/options.pptpd
|
||||
}
|
||||
setup_login() {
|
||||
local section="$1"
|
||||
|
||||
## Code by VPN Server ##
|
||||
config_get enabled "$section" enabled
|
||||
[ "$enabled" -eq 0 ] && return 0
|
||||
|
||||
config_get ipaddress "$section" ipaddress
|
||||
[ -n "$ipaddress" ] || local ipaddress = "*"
|
||||
## Code by VPN Server ##
|
||||
|
||||
config_get username "$section" username
|
||||
config_get password "$section" password
|
||||
[ -n "$username" ] || return 0
|
||||
[ -n "$password" ] || return 0
|
||||
|
||||
echo "$username * $password $ipaddress" >> $CHAP_SECRETS
|
||||
## echo "$username pptp-server $password *" >> $CHAP_SECRETS
|
||||
}
|
||||
|
||||
setup_config() {
|
||||
local section="$1"
|
||||
|
||||
config_get enabled "$section" enabled
|
||||
[ "$enabled" -eq 0 ] && return 1
|
||||
|
||||
mkdir -p /var/etc
|
||||
cp /etc/pptpd.conf $CONFIG
|
||||
|
||||
config_get localip "$section" localip
|
||||
config_get remoteip "$section" remoteip
|
||||
[ -n "$localip" ] && echo "localip $localip" >> $CONFIG
|
||||
[ -n "$remoteip" ] && echo "remoteip $remoteip" >> $CONFIG
|
||||
|
||||
## Code by VPN Server ##
|
||||
config_get nat "$section" nat
|
||||
config_get internet "$section" internet
|
||||
echo Update firewall ...
|
||||
sed -i -e "/## luci-app-pptpd/d" /etc/firewall.user
|
||||
if [ "$nat" -eq 1 ]; then
|
||||
echo "iptables -A forwarding_rule -s ${localip%.*}.0/24 -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
|
||||
echo Update NAT rule ...
|
||||
fi
|
||||
if [ "$internet" -eq 1 ]; then
|
||||
echo "iptables -A input_rule -i ppp+ -p tcp -m tcp --dport 1723 -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
|
||||
echo "iptables -A input_rule -i ppp+ -p gre -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
|
||||
echo Update input rule ...
|
||||
fi
|
||||
fw3 restart
|
||||
config_get mppe "$section" mppe
|
||||
sed -i -e 's/#*mppe/mppe/g' /etc/ppp/options.pptpd
|
||||
if [ "$mppe" -eq 0 ]; then
|
||||
sed -i -e 's/mppe/#mppe/g' /etc/ppp/options.pptpd
|
||||
fi
|
||||
sed -i -e '/ms-dns/d' /etc/ppp/options.pptpd
|
||||
config_list_foreach "pptpd" "dns" setup_dns
|
||||
## Code by VPN Server ##
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
start_pptpd() {
|
||||
[ -f $DEFAULT ] && . $DEFAULT
|
||||
mkdir -p $RUN_D
|
||||
for m in arc4 sha1_generic slhc crc-ccitt ppp_generic ppp_async ppp_mppe; do
|
||||
insmod $m >/dev/null 2>&1
|
||||
done
|
||||
ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets
|
||||
service_start $BIN $OPTIONS -c $CONFIG
|
||||
}
|
||||
|
||||
start() {
|
||||
config_load pptpd
|
||||
setup_config pptpd || return
|
||||
rm -f $CHAP_SECRETS
|
||||
config_foreach setup_login login
|
||||
start_pptpd
|
||||
}
|
||||
|
||||
stop() {
|
||||
service_stop $BIN
|
||||
|
||||
## Code by VPN Server ##
|
||||
sed -i -e "/## luci-app-pptpd/d" /etc/firewall.user
|
||||
fw3 restart
|
||||
## Code by VPN Server ##
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#debug
|
||||
#logfile /tmp/pptp-server.log
|
||||
auth
|
||||
name "pptp-server"
|
||||
lcp-echo-failure 3
|
||||
lcp-echo-interval 60
|
||||
default-asyncmap
|
||||
mtu 1482
|
||||
mru 1482
|
||||
nobsdcomp
|
||||
nodeflate
|
||||
proxyarp
|
||||
#nomppc
|
||||
#mppe required,no40,no56,stateless
|
||||
require-mschap-v2
|
||||
refuse-chap
|
||||
refuse-mschap
|
||||
refuse-eap
|
||||
refuse-pap
|
||||
#plugin radius.so
|
||||
#radius-config-file /etc/radius.conf
|
||||
ms-dns 114.114.114.114
|
||||
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-pptpd.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-pptpd.json << EEOF
|
||||
{
|
||||
"config": "pptpd",
|
||||
"init": "pptpd"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
|
||||
chmod +x /etc/init.d/pptpd
|
||||
rm -f /tmp/luci-indexcahe
|
||||
exit 0
|
||||
@@ -0,0 +1,151 @@
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: public_ip_monitor.js:64 public_ip_monitor.js:72
|
||||
msgid "From"
|
||||
msgstr "从"
|
||||
|
||||
#: public_ip_monitor.js:261
|
||||
msgid "General Settings"
|
||||
msgstr "常规设置"
|
||||
|
||||
#: public_ip_monitor.js:312
|
||||
msgid "History Location"
|
||||
msgstr "历史记录位置"
|
||||
|
||||
#: public_ip_monitor.js:321
|
||||
msgid "IPv4"
|
||||
msgstr "IPv4"
|
||||
|
||||
#: public_ip_monitor.js:276
|
||||
msgid "IPv4 Check Interval"
|
||||
msgstr "IPv4 检查间隔"
|
||||
|
||||
#: public_ip_monitor.js:129
|
||||
msgid "IPv4 Script"
|
||||
msgstr "IPv4 脚本"
|
||||
|
||||
#: public_ip_monitor.js:282
|
||||
msgid "IPv4 Script Location"
|
||||
msgstr "IPv4 脚本位置"
|
||||
|
||||
#: public_ip_monitor.js:270
|
||||
msgid "IPv4 Service"
|
||||
msgstr "IPv4 服务"
|
||||
|
||||
#: public_ip_monitor.js:325
|
||||
msgid "IPv6"
|
||||
msgstr "IPv6"
|
||||
|
||||
#: public_ip_monitor.js:300
|
||||
msgid "IPv6 Check Interval"
|
||||
msgstr "IPv6 检查间隔"
|
||||
|
||||
#: public_ip_monitor.js:137
|
||||
msgid "IPv6 Script"
|
||||
msgstr "IPv6 脚本"
|
||||
|
||||
#: public_ip_monitor.js:306
|
||||
msgid "IPv6 Script Location"
|
||||
msgstr "IPv6 脚本位置"
|
||||
|
||||
#: public_ip_monitor.js:294
|
||||
msgid "IPv6 Service"
|
||||
msgstr "IPv6 服务"
|
||||
|
||||
#: public_ip_monitor.js:264
|
||||
msgid "Monitor IPv4"
|
||||
msgstr "监控 IPv4"
|
||||
|
||||
#: public_ip_monitor.js:288
|
||||
msgid "Monitor IPv6"
|
||||
msgstr "监控 IPv6"
|
||||
|
||||
#: public_ip_monitor.js:264
|
||||
msgid "Monitor if there your public ipv4 address."
|
||||
msgstr "监控您的公网 IPv4 地址。"
|
||||
|
||||
#: public_ip_monitor.js:288
|
||||
msgid "Monitor if there your public ipv6 address."
|
||||
msgstr "监控您的公网 IPv6 地址。"
|
||||
|
||||
#: public_ip_monitor.js:97
|
||||
#: public_ip_monitor.js:28 public_ip_monitor.js:29 public_ip_monitor.js:46
|
||||
#: public_ip_monitor.js:47 public_ip_monitor.js:48 public_ip_monitor.js:91
|
||||
msgid "N/A"
|
||||
msgstr "不可用"
|
||||
|
||||
#: public_ip_monitor.js:78 public_ip_monitor.js:82
|
||||
msgid "No entries available"
|
||||
msgstr "无可用条目"
|
||||
|
||||
#: public_ip_monitor.js:91 public_ip_monitor.js:97
|
||||
msgid "Not monitored"
|
||||
msgstr "未监控"
|
||||
|
||||
#: public_ip_monitor.js:257
|
||||
msgid "Overview"
|
||||
msgstr "概览"
|
||||
|
||||
#: public_ip_monitor.js:252
|
||||
msgid "Public IP Monitor"
|
||||
msgstr "公网 IP 监控"
|
||||
|
||||
#: public_ip_monitor.js:107
|
||||
msgid "Public IPv4 Change History"
|
||||
msgstr "公网 IPv4 变更历史"
|
||||
|
||||
#: public_ip_monitor.js:88
|
||||
msgid "Public IPv4:"
|
||||
msgstr "公网 IPv4:"
|
||||
|
||||
#: public_ip_monitor.js:116
|
||||
msgid "Public IPv6 Change History"
|
||||
msgstr "公网 IPv6 变更历史"
|
||||
|
||||
#: public_ip_monitor.js:94
|
||||
msgid "Public IPv6:"
|
||||
msgstr "公网 IPv6:"
|
||||
|
||||
#: public_ip_monitor.js:130
|
||||
msgid "Script to run when the public IPv4 changes, use $1 to retrieve the new IPv4 inside the script."
|
||||
msgstr "当公网 IPv4 发生变化时运行的脚本,使用 $1 在脚本中获取新的 IPv4。"
|
||||
|
||||
#: public_ip_monitor.js:138
|
||||
msgid "Script to run when the public IPv6 changes, use $1 to retrieve the new IPv6 inside the script."
|
||||
msgstr "当公网 IPv6 发生变化时运行的脚本,使用 $1 在脚本中获取新的 IPv6。"
|
||||
|
||||
#: public_ip_monitor.js:276 public_ip_monitor.js:300
|
||||
msgid "The interval in seconds which we will retrieve data from the service."
|
||||
msgstr "从服务获取数据的时间间隔(秒)。"
|
||||
|
||||
#: public_ip_monitor.js:282
|
||||
msgid "The location of the IPv4 on change script to be triggered, use $1 to get the new IPv4 as input."
|
||||
msgstr "IPv4 变更时触发的脚本位置,使用 $1 获取新的 IPv4 作为输入。"
|
||||
|
||||
#: public_ip_monitor.js:306
|
||||
msgid "The location of the IPv6 on change script to be triggered, use $1 to get the new IPv6 as input."
|
||||
msgstr "IPv6 变更时触发的脚本位置,使用 $1 获取新的 IPv6 作为输入。"
|
||||
|
||||
#: public_ip_monitor.js:312
|
||||
msgid "The location the IPv4 and IPv6 history is stored."
|
||||
msgstr "IPv4 和 IPv6 历史记录的存储位置。"
|
||||
|
||||
#: public_ip_monitor.js:270
|
||||
msgid "The service that we can retrieve the public IPv4."
|
||||
msgstr "可以获取公网 IPv4 的服务。"
|
||||
|
||||
#: public_ip_monitor.js:294
|
||||
msgid "The service that we can retrieve the public IPv6."
|
||||
msgstr "可以获取公网 IPv6 的服务。"
|
||||
|
||||
#: public_ip_monitor.js:253
|
||||
msgid "This monitors changes on the internet-facing public IP and trigger tasks when a change occurs."
|
||||
msgstr "监控互联网公网 IP 的变化,并在发生变化时触发任务。"
|
||||
|
||||
#: public_ip_monitor.js:63 public_ip_monitor.js:71
|
||||
msgid "Timestamp"
|
||||
msgstr "时间戳"
|
||||
|
||||
#: public_ip_monitor.js:65 public_ip_monitor.js:73
|
||||
msgid "To"
|
||||
msgstr "到"
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
sed -i "s/reload_service(/reload_service1(/" /etc/init.d/transmission
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,798 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 2.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-09 19:09+0080\n"
|
||||
"PO-Revision-Date: 2025-03-01 13:22+0080\n"
|
||||
"Last-Translator: xiechangan123\n"
|
||||
"Language: zh-cn\n"
|
||||
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
||||
"MIME-Version: 1.1\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"\n"
|
||||
"X-Loco-Source-Locale: zh_CN\n"
|
||||
"X-Loco-Parser: loco_parse_po\n"
|
||||
|
||||
msgid "Xray"
|
||||
msgstr "Xray"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "通用设置"
|
||||
|
||||
msgid "Xray Executable Path"
|
||||
msgstr "Xray运行目录"
|
||||
|
||||
msgid "Enable Xray Service"
|
||||
msgstr "启用Xray服务"
|
||||
|
||||
msgid "Uncheck this to disable the entire Xray service."
|
||||
msgstr "取消选中禁用全部Xray服务。"
|
||||
|
||||
msgid "TCP Server (IPv4)"
|
||||
msgstr "TCP服务器(IPv4)"
|
||||
|
||||
msgid "Select multiple outbound servers to enable load balancing. Select none to disable TCP Outbound."
|
||||
msgstr "选择多个出站服务器以启用负载平衡,未设置将禁用TCP出站。"
|
||||
|
||||
msgid "UDP Server (IPv4)"
|
||||
msgstr "UDP服务器(IPv4)"
|
||||
|
||||
msgid "Select multiple outbound servers to enable load balancing. Select none to disable UDP Outbound."
|
||||
msgstr "选择多个出站服务器以启用负载平衡,未设置将禁用UDP出站。"
|
||||
|
||||
msgid "TCP Server (IPv6)"
|
||||
msgstr "TCP服务器(IPv6)"
|
||||
|
||||
msgid "UDP Server (IPv6)"
|
||||
msgstr "UDP服务器(IPv6)"
|
||||
|
||||
msgid "Balancer Strategy"
|
||||
msgstr "负载均衡器配置"
|
||||
|
||||
msgid "Strategy <code>leastPing</code> requires observatory (see "Extra Options" tab) to be enabled."
|
||||
msgstr "配置<code>leastPing</code>需要启用后台连接观测(参阅“扩展选项”选项卡)。"
|
||||
|
||||
msgid "Enable Transparent Proxy"
|
||||
msgstr "启用透明代理"
|
||||
|
||||
msgid "This enables DNS query forwarding and TProxy for both TCP and UDP connections."
|
||||
msgstr "启用TCP和UDP透明代理、DNS查询转发。"
|
||||
|
||||
msgid "Enable Sniffing"
|
||||
msgstr "启用域名嗅探"
|
||||
|
||||
msgid "If sniffing is enabled, requests will be routed according to domain settings in \"DNS Settings\" tab."
|
||||
msgstr "如果启用,DNS请求会按照DNS设置选项中的规则进行转发。"
|
||||
|
||||
msgid "Bittorrent Direct"
|
||||
msgstr "BT下载直连"
|
||||
|
||||
msgid "If enabled, no bittorrent request will be forwarded through Xray."
|
||||
msgstr "如果启用,BT下载请求不会被Xray转发。"
|
||||
|
||||
msgid "Enable Xray API Service"
|
||||
msgstr "启用Xray API服务"
|
||||
|
||||
msgid "Xray API Service uses port 8080 and GRPC protocol. Also callable via <code>xray api</code> or <code>ubus call xray</code>. See <a href=\"https://xtls.github.io/document/command.html#xray-api\">here</a> for help."
|
||||
msgstr "使用8080端口和GRPC协议的Xray API服务,也可通过<code>xray api</code>或<code>ubus call xray</code>调用。参阅<a href=\"https://xtls.github.io/document/command.html#xray-api\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Server List"
|
||||
msgstr "服务器列表"
|
||||
|
||||
msgid "Xray Servers"
|
||||
msgstr "服务器列表"
|
||||
|
||||
msgid "Servers are referenced by index (order in the following list). Deleting servers may result in changes of upstream servers actually used by proxy and bridge."
|
||||
msgstr "服务器按索引引用(以列表中的顺序),删除服务器可能会导致代理和桥接使用的上游服务器发生更改。"
|
||||
|
||||
msgid "Alias (optional)"
|
||||
msgstr "别名(可选)"
|
||||
|
||||
msgid "Server Hostname"
|
||||
msgstr "服务器"
|
||||
|
||||
msgid "Domain Strategy"
|
||||
msgstr "域名策略"
|
||||
|
||||
msgid "Server Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "UserId / Password"
|
||||
msgstr "UID/密码"
|
||||
|
||||
msgid "Fill user_id for vmess / VLESS, or password for shadowsocks / trojan (also supports <a href=\"https://github.com/XTLS/Xray-core/issues/158\">Xray UUID Mapping</a>)"
|
||||
msgstr "vmess/vless使用UID,shadowsocks/trojan使用密码(支持<a href=\"https://github.com/XTLS/Xray-core/issues/158\">Xray UUID映射</a>)。"
|
||||
|
||||
msgid "Protocol Settings"
|
||||
msgstr "协议设置"
|
||||
|
||||
msgid "Protocol"
|
||||
msgstr "协议"
|
||||
|
||||
msgid "Encrypt Method"
|
||||
msgstr "加密方式"
|
||||
|
||||
msgid "AlterID"
|
||||
msgstr "额外ID"
|
||||
|
||||
msgid "Transport Settings"
|
||||
msgstr "传输设置"
|
||||
|
||||
msgid "Transport"
|
||||
msgstr "传输方式"
|
||||
|
||||
msgid "Fake Header Type"
|
||||
msgstr "伪装报文类型"
|
||||
|
||||
msgid "Dialer Proxy"
|
||||
msgstr "拨号代理"
|
||||
|
||||
msgid "Similar to <a href=\"https://xtls.github.io/config/outbound.html#proxysettingsobject\">ProxySettings.Tag</a>"
|
||||
msgstr "类似于<a href=\"https://xtls.github.io/config/outbound.html#proxysettingsobject\">出站代理配置</a>"
|
||||
|
||||
msgid ""
|
||||
"Configurations here override settings in the previous tabs with the following rules: "
|
||||
"<ol><li>Object values will be replaced recursively so settings in previous tabs matter.</li>"
|
||||
"<li>Arrays will be replaced entirely instead of being merged.</li>"
|
||||
"<li>Tag <code>tag</code> is ignored. </li></ol>Override rules here may be changed later. Use this only for experimental or pre-release features."
|
||||
msgstr ""
|
||||
"自定义配置使用以下规则覆盖先前选项卡中的设置:"
|
||||
"<ol><li>对象值将以递归方式替换,因此先前选项卡中的设置很重要。</li>"
|
||||
"<li>数组将被完全替换,而不是被合并。</li>"
|
||||
"<li>标签 <code>tag</code> 被忽略。</li></ol>覆盖规则可能会更改。仅将其用于实验性或预发布功能。"
|
||||
|
||||
msgid "Host"
|
||||
msgstr "主机名"
|
||||
|
||||
msgid "Path"
|
||||
msgstr "路径"
|
||||
|
||||
msgid "Maximum Transmission Unit"
|
||||
msgstr "最大传输单元(MTU)"
|
||||
|
||||
msgid "Transmission Time Interval"
|
||||
msgstr "传输间隔时间(TTL)"
|
||||
|
||||
msgid "Uplink Capacity"
|
||||
msgstr "上行容量(MB)"
|
||||
|
||||
msgid "Downlink Capacity"
|
||||
msgstr "下行容量(MB)"
|
||||
|
||||
msgid "Read Buffer Size"
|
||||
msgstr "读取缓冲大小"
|
||||
|
||||
msgid "Write Buffer Size"
|
||||
msgstr "写入缓冲大小"
|
||||
|
||||
msgid "Congestion Control"
|
||||
msgstr "拥塞控制"
|
||||
|
||||
msgid "Seed"
|
||||
msgstr "加密种子"
|
||||
|
||||
msgid "Security"
|
||||
msgstr "加密"
|
||||
|
||||
msgid "Key"
|
||||
msgstr "密钥"
|
||||
|
||||
msgid "Service Name"
|
||||
msgstr "服务名"
|
||||
|
||||
msgid "Multi Mode"
|
||||
msgstr "多路复用"
|
||||
|
||||
msgid "Health Check"
|
||||
msgstr "健康检查"
|
||||
|
||||
msgid "Permit Without Stream"
|
||||
msgstr "允许空载检查"
|
||||
|
||||
msgid "Proxy Settings"
|
||||
msgstr "代理设置"
|
||||
|
||||
msgid "Transparent proxy port (TCP4)"
|
||||
msgstr "TCP透明代理端口(TCP4)"
|
||||
|
||||
msgid "Transparent proxy port (UDP4)"
|
||||
msgstr "UDP透明代理端口(UDP4)"
|
||||
|
||||
msgid "Transparent proxy port (TCP6)"
|
||||
msgstr "TCP透明代理端口(TCP6)"
|
||||
|
||||
msgid "Transparent proxy port (UDP6)"
|
||||
msgstr "UDP透明代理端口(UDP6)"
|
||||
|
||||
msgid "Socks5 proxy port"
|
||||
msgstr "Socks5代理端口"
|
||||
|
||||
msgid "HTTP proxy port"
|
||||
msgstr "HTTP代理端口"
|
||||
|
||||
msgid "Bypass tproxy for uids"
|
||||
msgstr "绕过uid透明代理"
|
||||
|
||||
msgid "Processes started by users with these uids won't be forwarded through Xray."
|
||||
msgstr "使用uid(用户ID)启动的进程不会被Xray转发。"
|
||||
|
||||
msgid "Bypass tproxy for gids"
|
||||
msgstr "绕过gid透明代理"
|
||||
|
||||
msgid "Processes started by users in groups with these gids won't be forwarded through Xray."
|
||||
msgstr "使用gid(组ID)启动的进程不会被Xray转发。"
|
||||
|
||||
msgid "Priority for firewall rules"
|
||||
msgstr "防火墙规则优先级"
|
||||
|
||||
msgid "See firewall status page for rules Xray used and <a href=\"https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks#Priority_within_hook\">Netfilter Internal Priority</a> for reference."
|
||||
msgstr "查看防火墙状态页以了解Xray使用的规则。参阅<a href=\"https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks#Priority_within_hook\">Netfilter Internal Priority</a>获取帮助。"
|
||||
|
||||
msgid "Xray DNS Server Port"
|
||||
msgstr "DNS端口"
|
||||
|
||||
msgid "Do not use port 53 (dnsmasq), port 5353 (mDNS) or other common ports"
|
||||
msgstr "不要使用53(dnsmasq)和5353(mDNS)或其他常见端口。"
|
||||
|
||||
msgid "Extra DNS Server Ports"
|
||||
msgstr "额外DNS端口"
|
||||
|
||||
msgid ""
|
||||
"Listen for DNS Requests on multiple ports (all of which serves as dnsmasq "
|
||||
"upstream servers).<br/>For example if Xray DNS Server Port is 5300 and use 3 "
|
||||
"extra ports, 5300 - 5303 will be used for DNS requests.<br/>Increasing this "
|
||||
"value may help reduce the possibility of temporary DNS lookup failures."
|
||||
msgstr ""
|
||||
"在多个端口上监听DNS请求(所有端口都用作dnsmasq上游服务器)。"
|
||||
"</br>例如Xray DNS服务器端口为5300并使用3个额外端口,则5300-5303将用于DNS请求。"
|
||||
"</br>添加额外端口可能有助于减少临时DNS查找失败的可能性。"
|
||||
|
||||
msgid "Socket Mark Number"
|
||||
msgstr "Socket标记号"
|
||||
|
||||
msgid "Avoid proxy loopback problems with local (gateway) traffic"
|
||||
msgstr "避免代理流量发送到网关。"
|
||||
|
||||
msgid "Interfaces for tproxy"
|
||||
msgstr "透明代理接口"
|
||||
|
||||
msgid "Enable transparent proxy on these interfaces."
|
||||
msgstr "在这些接口上启用透明代理"
|
||||
|
||||
msgid "WARNING: These features are experimental, may cause a lot of problems and are not guaranteed to be compatible across minor versions."
|
||||
msgstr "警告:这些功能是实验性的,可能会导致很多问题,无法保证跨次要版本兼容。"
|
||||
|
||||
msgid "Inbounds"
|
||||
msgstr "入站代理"
|
||||
|
||||
msgid "Transparent proxy port (TCP4)"
|
||||
msgstr "透明代理端口(TCP4)"
|
||||
|
||||
msgid "Transparent proxy port (UDP4)"
|
||||
msgstr "透明代理端口(UDP4)"
|
||||
|
||||
msgid "Transparent proxy port (TCP6)"
|
||||
msgstr "透明代理端口(TCP6)"
|
||||
|
||||
msgid "Transparent proxy port (UDP6)"
|
||||
msgstr "透明代理端口(UDP6)"
|
||||
|
||||
msgid "Address Pool (IPv4)"
|
||||
msgstr "地址池(IPv4)"
|
||||
|
||||
msgid "Address Pool Size (IPv4)"
|
||||
msgstr "地址池大小(IPv4)"
|
||||
|
||||
msgid "Address Pool (IPv6)"
|
||||
msgstr "地址池(IPv6)"
|
||||
|
||||
msgid "Address Pool Size (IPv6)"
|
||||
msgstr "地址池大小(IPv6)"
|
||||
|
||||
msgid "FakeDNS Routing"
|
||||
msgstr "FakeDNS路由"
|
||||
|
||||
msgid "See <a href=\"https://github.com/v2ray/v2ray-core/issues/2233\">FakeDNS</a> for details."
|
||||
msgstr "参阅<a href=\"https://github.com/v2ray/v2ray-core/issues/2233\">FakeDNS</a>获取帮助。"
|
||||
|
||||
msgid "Extra Inbounds"
|
||||
msgstr "扩展入站"
|
||||
|
||||
msgid "Add more socks5 / http inbounds and redirect to other outbounds."
|
||||
msgstr "添加更多socks5/http入站并重定向到其他出站。"
|
||||
|
||||
msgid "Listen Address"
|
||||
msgstr "监听地址"
|
||||
|
||||
msgid "Inbound Type"
|
||||
msgstr "入站类型"
|
||||
|
||||
msgid "LAN Hosts Access Control"
|
||||
msgstr "访问控制"
|
||||
|
||||
msgid "Devices to enable IPv4 tproxy"
|
||||
msgstr "启用IPv4透明代理的设备"
|
||||
|
||||
msgid "Enable IPv4 transparent proxy on these interfaces / network devices."
|
||||
msgstr "在这些接口/网络设备上启用IPv4透明代理。"
|
||||
|
||||
msgid "Devices to enable IPv6 tproxy"
|
||||
msgstr "启用IPv6透明代理的设备"
|
||||
|
||||
msgid "Enable IPv6 transparent proxy on these interfaces / network devices."
|
||||
msgstr "在这些接口/网络设备上启用IPv6透明代理。"
|
||||
|
||||
msgid "Devices to disable IPv4 tproxy"
|
||||
msgstr "禁用IPv4透明代理的设备"
|
||||
|
||||
msgid "This overrides per-device settings below. FakeDNS and manual transparent proxy won't be affected by this option."
|
||||
msgstr "这将覆盖下面的设备设置,FakeDNS和手动透明代理不会受到此选项的影响。"
|
||||
|
||||
msgid "Devices to disable IPv6 tproxy"
|
||||
msgstr "禁用IPv6透明代理的设备"
|
||||
|
||||
msgid "Per-device settings here override per-interface enabling settings above. FakeDNS and manual transparent proxy won't be affected by these options."
|
||||
msgstr "此处的设备设置将覆盖上述已启用接口设置,FakeDNS和手动透明代理不会受到这些选项的影响。"
|
||||
|
||||
msgid "MAC Address"
|
||||
msgstr "MAC地址"
|
||||
|
||||
msgid "Extra inbound (TCP4)"
|
||||
msgstr "扩展入站(TCP4)"
|
||||
|
||||
msgid "Extra inbound (UDP4)"
|
||||
msgstr "扩展入站(UDP4)"
|
||||
|
||||
msgid "Extra inbound (TCP6)"
|
||||
msgstr "扩展入站(TCP6)"
|
||||
|
||||
msgid "Extra inbound (UDP6)"
|
||||
msgstr "扩展入站(UDP6)"
|
||||
|
||||
msgid "Dynamic Direct"
|
||||
msgstr "动态直连"
|
||||
|
||||
msgid "Access Control Strategy (IPv4)"
|
||||
msgstr "访问控制策略(IPv4)"
|
||||
|
||||
msgid "Access Control Strategy (IPv6)"
|
||||
msgstr "访问控制策略(IPv6)"
|
||||
|
||||
msgid "Enable for IPv4 TCP"
|
||||
msgstr "启用IPv4 TCP"
|
||||
|
||||
msgid "This should improve performance with large number of connections."
|
||||
msgstr "应该可以提高大量连接的性能。"
|
||||
|
||||
msgid "Enable for IPv4 UDP"
|
||||
msgstr "启用IPv4 UDP"
|
||||
|
||||
msgid "This may cause problems but worth a try."
|
||||
msgstr "可能会出问题,但值得一试。"
|
||||
|
||||
msgid "Enable for IPv6 TCP"
|
||||
msgstr "启用IPv6 TCP"
|
||||
|
||||
msgid "This may not be very useful but it should be good enough for a try."
|
||||
msgstr "可能不是很有用,但应该足够好,值得一试。"
|
||||
|
||||
msgid "Enable for IPv6 UDP"
|
||||
msgstr "启用IPv6 UDP"
|
||||
|
||||
msgid "This may cause problems and is not very useful at the same time. Not recommended."
|
||||
msgstr "可能会出问题,同时不是很有用,不推荐。"
|
||||
|
||||
msgid "Dynamic Direct Timeout"
|
||||
msgstr "动态直连超时"
|
||||
|
||||
msgid "Larger value consumes more memory and performs generally better. Unit in seconds."
|
||||
msgstr "值越大,消耗的内存越多,性能通常越好,以秒为单位。"
|
||||
|
||||
msgid "Override IPv4 TTL"
|
||||
msgstr "覆盖IPv4 TTL"
|
||||
|
||||
msgid "Strongly not recommended. Only used for some network environments with specific restrictions."
|
||||
msgstr "强烈不推荐,仅用于某些特殊限制的网络环境。"
|
||||
|
||||
msgid "Override IPv6 Hop Limit"
|
||||
msgstr "覆盖IPv6 Hop Limit"
|
||||
|
||||
msgid "TTL / Hop Limit Match"
|
||||
msgstr "TTL/Hop Limit匹配"
|
||||
|
||||
msgid "Only override TTL / hop limit for packets with specific TTL / hop limit."
|
||||
msgstr "仅覆盖特定TTL/hop limit数据包的TTL/hop limit。"
|
||||
|
||||
msgid "Bypass Transparent Proxy"
|
||||
msgstr "绕过透明代理"
|
||||
|
||||
msgid "DNS Settings"
|
||||
msgstr "DNS设置"
|
||||
|
||||
msgid "DNS"
|
||||
msgstr "路由设置"
|
||||
|
||||
msgid "Fast DNS"
|
||||
msgstr "快速DNS"
|
||||
|
||||
msgid "DNS for resolving outbound domains and following bypassed domains"
|
||||
msgstr "用于解析出站域名和绕过域名。"
|
||||
|
||||
msgid "Bypassed domain rules"
|
||||
msgstr "绕过域名规则"
|
||||
|
||||
msgid "Specify rules like <code>geosite:cn</code> or <code>domain:bilibili.com</code>. See <a href=\"https://xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
msgstr "指定例如<code>geosite:cn</code>或<code>domain:bilibili.com</code>等规则。参阅<a href=\"https://xtls.github.io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid ""
|
||||
"Specify rules like <code>domain:bilibili.com</code> or see <a href=\"https:"
|
||||
"//xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
"<br/> In order to use Geosite rules you need a valid resource file "
|
||||
"/usr/share/xray/geosite.dat.<br/>Compile your firmware again with data files "
|
||||
"to use Geosite rules, or <a href=\"https://github.com/v2fly/domain-list-"
|
||||
"community\">download one</a> and upload it to your router."
|
||||
msgstr ""
|
||||
"指定例如<code>domain:bilibili.com</code>等规则,或参阅<a href=\"https://xtls.github."
|
||||
"io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
"为了使用Geosite规则,需要一个有效的资源文件<code>/usr/share/xray/geosite.dat</code>"
|
||||
"添加资源文件后重新编译固件,或从<a href=\"https://github.com/v2fly/domain-list-community\">"
|
||||
"此处</a>下载后上传到路由器。"
|
||||
|
||||
msgid "Secure DNS"
|
||||
msgstr "安全DNS"
|
||||
|
||||
msgid "DNS for resolving known polluted domains (specify forwarded domain rules here)"
|
||||
msgstr "用于解析已知污染的域名(指定域名转发规则)。"
|
||||
|
||||
msgid "Forwarded domain rules"
|
||||
msgstr "域名转发规则"
|
||||
|
||||
msgid "Specify rules like <code>geosite:geolocation-!cn</code> or <code>domain:youtube.com</code>. See <a href=\"https://xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
msgstr "指定例如<code>geosite:geolocation-!cn</code>或<code>domain:youtube.com</code>等规则。参阅<a href=\"https://xtls.github.io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid ""
|
||||
"Specify rules like <code>domain:youtube.com</code> or see <a href=\"https:"
|
||||
"//xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
"<br/> In order to use Geosite rules you need a valid resource file "
|
||||
"/usr/share/xray/geosite.dat.<br/>Compile your firmware again with data files "
|
||||
"to use Geosite rules, or <a href=\"https://github.com/v2fly/domain-list-"
|
||||
"community\">download one</a> and upload it to your router."
|
||||
msgstr ""
|
||||
"指定例如<code>domain:youtube.com</code>或参阅<a href=\"https://xtls.github."
|
||||
"io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
"为了使用Geosite规则,需要一个有效的资源文件<code>/usr/share/xray/geosite.dat</code>"
|
||||
"添加资源文件后重新编译固件,或从<a href=\"https://github.com/v2fly/domain-list-community\">"
|
||||
"此处</a>下载后上传到路由器。"
|
||||
|
||||
msgid "Default DNS"
|
||||
msgstr "默认DNS"
|
||||
|
||||
msgid "DNS for resolving other sites (not in the rules above) and DNS records other than A or AAAA (TXT and MX for example)"
|
||||
msgstr "用于解析其他站点的DNS(不在上述规则中)和A或AAAA以外的DNS记录(例如TXT和MX)。"
|
||||
|
||||
msgid "Blocked domain rules"
|
||||
msgstr "阻止域名规则"
|
||||
|
||||
msgid "Specify rules like <code>geosite:category-ads</code> or <code>domain:baidu.com</code>. See <a href=\"https://xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
msgstr "指定例如<code>geosite:category-ads</code>或<code>domain:baidu.com</code>等规则。参阅<a href=\"https://xtls.github.io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid ""
|
||||
"Specify rules like <code>domain:baidu.com</code> or see <a href=\"https:"
|
||||
"//xtls.github.io/config/dns.html#dnsobject\">documentation</a> for details."
|
||||
"<br/> In order to use Geosite rules you need a valid resource file "
|
||||
"/usr/share/xray/geosite.dat.<br/>Compile your firmware again with data files "
|
||||
"to use Geosite rules, or <a href=\"https://github.com/v2fly/domain-list-"
|
||||
"community\">download one</a> and upload it to your router."
|
||||
msgstr ""
|
||||
"指定例如<code>domain:baidu.com</code>或参阅<a href=\"https://xtls.github."
|
||||
"io/config/dns.html#dnsobject\">此处</a>获取帮助。"
|
||||
"为了使用Geosite规则,需要一个有效的资源文件<code>/usr/share/xray/geosite.dat</code>"
|
||||
"添加资源文件后重新编译固件,或从<a href=\"https://github.com/v2fly/domain-list-community\">"
|
||||
"此处</a>下载后上传到路由器。"
|
||||
|
||||
msgid "Blocked to loopback"
|
||||
msgstr "阻止回环"
|
||||
|
||||
msgid "Return <code>127.127.127.127</code> as response for blocked domain rules. If not selected, <code>NXDOMAIN</code> will be returned."
|
||||
msgstr "对阻止域名规则返回<code>127.127.127.127</code>,未设置将返回回环地址Loopback Address。"
|
||||
|
||||
msgid "Transparent Proxy Rules"
|
||||
msgstr "透明代理规则"
|
||||
|
||||
msgid "Outbound Routing"
|
||||
msgstr "出站路由"
|
||||
|
||||
msgid "GeoIP Direct Code List (IPv4)"
|
||||
msgstr "GeoIP直连域名列表(IPv4)"
|
||||
|
||||
msgid "Hosts in these GeoIP sets will not be forwarded through Xray. Remove all items to forward all non-private hosts."
|
||||
msgstr "此GeoIP列表中的域名不会被Xray转发,未设置即为转发所有非私有域名。"
|
||||
|
||||
msgid "GeoIP Direct Code List (IPv6)"
|
||||
msgstr "GeoIP直连域名列表(IPv6)"
|
||||
|
||||
msgid ""
|
||||
"Resource file /usr/share/xray/geoip.dat not exist. All network traffic will "
|
||||
"be forwarded. <br/> Compile your firmware again with data files to use this "
|
||||
"feature, or<br/><a href=\"https://github.com/v2fly/geoip\">download one</a> "
|
||||
"(maybe disable transparent proxy first) and upload it to your router."
|
||||
msgstr ""
|
||||
"资源文件<code>/usr/share/xray/geoip.dat</code>不存在。所有网络将被转发。"
|
||||
"添加资源文件后重新编译固件,或从<a href=\"https://github.com/v2fly/geoip\">此处</a>下载后上传到路由器。"
|
||||
|
||||
msgid "Routing Domain Strategy"
|
||||
msgstr "域名路由策略"
|
||||
|
||||
msgid "Domain resolution strategy when matching domain against rules. (For tproxy, this is effective only when sniffing is enabled.)"
|
||||
msgstr "域名与规则匹配时的域名解析策略(对于透明代理,仅在启用域名嗅探时有效)。"
|
||||
|
||||
msgid "Bypassed IP"
|
||||
msgstr "绕过IP"
|
||||
|
||||
msgid "Requests to these IPs won't be forwarded through Xray."
|
||||
msgstr "这些IP不会被Xray转发。"
|
||||
|
||||
msgid "Forwarded IP"
|
||||
msgstr "转发IP"
|
||||
|
||||
msgid "Requests to these IPs will always be handled by Xray (but still might be bypassed by Xray itself, like private addresses).<br/>Useful for some really strange network. If you really need to forward private addresses, try Manual Transparent Proxy below."
|
||||
msgstr "这些IP始终由Xray转发(私有地址可能会被Xray绕过)。<br/>对一些奇怪的网络有用,确需转发私人地址,尝试下面的手动透明代理。"
|
||||
|
||||
msgid "Default Ports Policy"
|
||||
msgstr "默认端口策略"
|
||||
|
||||
msgid "Forwarded TCP Ports"
|
||||
msgstr "TCP转发端口"
|
||||
|
||||
msgid "Requests to these TCP Ports will be forwarded through Xray. Recommended ports: 80, 443, 853"
|
||||
msgstr "对这些TCP端口的请求会被Xray转发。建议端口:80、443、853。"
|
||||
|
||||
msgid "Forwarded UDP Ports"
|
||||
msgstr "UDP转发端口"
|
||||
|
||||
msgid "Requests to these UDP Ports will be forwarded through Xray. Recommended ports: 53, 443"
|
||||
msgstr "对这些UDP端口的请求会被Xray转发。建议端口:53、443。"
|
||||
|
||||
msgid "Bypassed TCP Ports"
|
||||
msgstr "TCP绕过端口"
|
||||
|
||||
msgid "Requests to these TCP Ports won't be forwarded through Xray."
|
||||
msgstr "对这些TCP端口的请求不会被Xray转发。"
|
||||
|
||||
msgid "Bypassed UDP Ports"
|
||||
msgstr "UDP绕过端口"
|
||||
|
||||
msgid "Requests to these UDP Ports won't be forwarded through Xray."
|
||||
msgstr "对这些UDP端口的请求不会被Xray转发。"
|
||||
|
||||
msgid "Manual Transparent Proxy"
|
||||
msgstr "自定义透明代理"
|
||||
|
||||
msgid "Compared to iptables REDIRECT, Xray could do NAT46 / NAT64 (for example accessing IPv6 only sites). See <a href=\"https://github.com/v2ray/v2ray-core/issues/2233\">FakeDNS</a> for details."
|
||||
msgstr "相比iptables重定向,Xray可以进行NAT46/NAT64(对于某些仅IPv6的网站)。参阅<a href=\"https://github.com/v2ray/v2ray-core/issues/2233\">FakeDNS</a>获取帮助。"
|
||||
|
||||
msgid "Source Address"
|
||||
msgstr "源地址"
|
||||
|
||||
msgid "Source Port"
|
||||
msgstr "源端口"
|
||||
|
||||
msgid "Destination Address"
|
||||
msgstr "目标地址"
|
||||
|
||||
msgid "Destination Port"
|
||||
msgstr "目标端口"
|
||||
|
||||
msgid "Domain names to associate"
|
||||
msgstr "关联域名"
|
||||
|
||||
msgid "Exempt rebind protection"
|
||||
msgstr "豁免重绑定保护"
|
||||
|
||||
msgid "Avoid dnsmasq filtering RFC1918 IP addresses (and some TESTNET addresses as well) from result."
|
||||
msgstr "避免Dnsmasq过滤RFC1918私有IP地址及某些测试网IP地址。"
|
||||
|
||||
msgid "Force Forward (TCP)"
|
||||
msgstr "强制转发(TCP)"
|
||||
|
||||
msgid "Force Forward server (TCP)"
|
||||
msgstr "强制转发服务器(TCP)"
|
||||
|
||||
msgid "Force Forward (UDP)"
|
||||
msgstr "强制转发(UDP)"
|
||||
|
||||
msgid "Force Forward server (UDP)"
|
||||
msgstr "强制转发服务器(UDP)"
|
||||
|
||||
msgid "This destination must be forwarded through an outbound server."
|
||||
msgstr "此目标必须通过出站服务器转发。"
|
||||
|
||||
msgid "HTTPS Server"
|
||||
msgstr "HTTPS服务器"
|
||||
|
||||
msgid "Enable Xray HTTPS Server"
|
||||
msgstr "启用Xray HTTPS服务"
|
||||
|
||||
msgid "This will start a HTTPS server which serves both as an inbound for Xray and a reverse proxy web server."
|
||||
msgstr "这将启动一个HTTPS服务器,该服务器既用作Xray的入站服务器,又用作反向代理Web服务器。"
|
||||
|
||||
msgid "Xray HTTPS Server Port"
|
||||
msgstr "Xray HTTPS服务端口"
|
||||
|
||||
msgid "This port needs to be set <code>accept input</code> manually in firewall settings."
|
||||
msgstr "此端口需要在系统防火墙<code>accept input</code>中手动设置。"
|
||||
|
||||
msgid "Certificate File"
|
||||
msgstr "证书"
|
||||
|
||||
msgid "Private Key File"
|
||||
msgstr "私钥"
|
||||
|
||||
msgid "Only protocols which support fallback are available. Note that REALITY does not support fallback right now."
|
||||
msgstr "只支持可以回落的协议。注意REALITY目前不支持回落。"
|
||||
|
||||
msgid "Default Fallback HTTP Server"
|
||||
msgstr "默认回落HTTP服务器"
|
||||
|
||||
msgid "Only HTTP/1.1 supported here. For HTTP/2 upstream, use Fallback Servers below"
|
||||
msgstr "只支持HTTP/1.1。如使用HTTP/2,使用下面的回落服务。"
|
||||
|
||||
msgid "Fallback Servers"
|
||||
msgstr "回落服务器"
|
||||
|
||||
msgid "Specify upstream servers here."
|
||||
msgstr "指定上游服务器。"
|
||||
|
||||
msgid "SNI"
|
||||
msgstr "服务器域名(SNI)"
|
||||
|
||||
msgid "ALPN"
|
||||
msgstr "应用层传输协议(ALPN)"
|
||||
|
||||
msgid "Xver"
|
||||
msgstr "发送代理协议版本"
|
||||
|
||||
msgid "Custom Options"
|
||||
msgstr "自定义选项"
|
||||
|
||||
msgid "Custom Configuration Hook"
|
||||
msgstr "自定义配置钩子"
|
||||
|
||||
msgid "Read <a href="https://ucode.mein.io/">ucode Documentation</a> for the language used. Code filled here may need to change after upgrading luci-app-xray."
|
||||
msgstr "参阅<a href="https://ucode.mein.io/">ucode Documentation</a>获取帮助。升级luci-app-xray后,此处填写的代码可能需要更改"
|
||||
|
||||
msgid "Stream Security"
|
||||
msgstr "传输层安全"
|
||||
|
||||
msgid "Server Name"
|
||||
msgstr "服务器名"
|
||||
|
||||
msgid "Allow Insecure"
|
||||
msgstr "允许不安全"
|
||||
|
||||
msgid "Fingerprint"
|
||||
msgstr "指纹"
|
||||
|
||||
msgid "Flow"
|
||||
msgstr "流控模式"
|
||||
|
||||
msgid "[Same as Main Server]"
|
||||
msgstr "[与主服务相同]"
|
||||
|
||||
msgid "WARNING: at least one of asset files (geoip.dat, geosite.dat) is not found under /usr/share/xray. Xray may not work properly. See <a href=\"https://github.com/yichya/luci-app-xray\">here</a> for help."
|
||||
msgstr "警告:/usr/share/xray目录下至少一个资源文件(geoip.dat, geosite.dat)不存在。Xray可能无法正常工作。参阅<a href=\"https://github.com/yichya/luci-app-xray\">此处</a>报告问题或提出请求。"
|
||||
|
||||
msgid "Asset files check: "
|
||||
msgstr "资源检查:"
|
||||
|
||||
msgid "Report issues or request for features <a href=\"https://github.com/yichya/luci-app-xray\">here</a>."
|
||||
msgstr "<a href=\"https://github.com/yichya/luci-app-xray\">此处</a>报告问题或提出请求。"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "日志等级"
|
||||
|
||||
msgid "Read Xray log in \"System Log\" or use <code>logread</code> command."
|
||||
msgstr "在系统日志中或使用<code>logread</code>命令查看Xray日志。"
|
||||
|
||||
msgid "Enable Access Log"
|
||||
msgstr "启用访问日志"
|
||||
|
||||
msgid "Access log will also be written to System Log."
|
||||
msgstr "访问日志将被记录在系统日志中。"
|
||||
|
||||
msgid "Enable DNS Log"
|
||||
msgstr "启用DNS日志"
|
||||
|
||||
msgid "DNS log will also be written to System Log."
|
||||
msgstr "DNS查询日志将被记录在系统日志中。"
|
||||
|
||||
msgid "Enable Statistics"
|
||||
msgstr "启用统计信息"
|
||||
|
||||
msgid "Enable statistics of inbounds / outbounds data. Use Xray API to query values."
|
||||
msgstr "启用入站/出站数据的统计信息,使用Xray API查询数据。"
|
||||
|
||||
msgid "Enable Observatory"
|
||||
msgstr "启用后台连接观测"
|
||||
|
||||
msgid "Enable latency measurement for TCP and UDP outbounds."
|
||||
msgstr "为TCP和UDP出站启用后台连接观测。"
|
||||
|
||||
msgid "Enable Firewall Counters"
|
||||
msgstr "启用防火墙计数器"
|
||||
|
||||
msgid "Add <a href=\"/cgi-bin/luci/admin/status/nftables\">counters to firewall4</a> for transparent proxy rules. (Not supported in all OpenWrt versions. )"
|
||||
msgstr "为透明代理规则添加<a href=\"/cgi-bin/luci/admin/status/nftables\">counters to firewall4</a>(不支持OpenWrt所有版本)。"
|
||||
|
||||
msgid "Enable Xray Metrics Server"
|
||||
msgstr "启用Xray指标服务"
|
||||
|
||||
msgid "Enable built-in metrics server for pprof and expvar. See <a href='https://github.com/XTLS/Xray-core/pull/1000'>here</a> for details."
|
||||
msgstr "为pprof和expvar启用内置指标服务。参阅<a href='https://github.com/XTLS/Xray-core/pull/1000'>此处</a>获取帮助。"
|
||||
|
||||
msgid "Xray Metrics Server Port"
|
||||
msgstr "Xray指标服务端口"
|
||||
|
||||
msgid "Metrics may be sensitive so think twice before setting it as Default Fallback HTTP Server."
|
||||
msgstr "指标可能很敏感,审慎将其设置为默认回退HTTP服务器。"
|
||||
|
||||
msgid "Handshake Timeout"
|
||||
msgstr "握手超时"
|
||||
|
||||
msgid "Policy: Handshake timeout when connecting to upstream. See <a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">here</a> for help."
|
||||
msgstr "策略:与服务器握手超时时间。参阅<a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Connection Idle Timeout"
|
||||
msgstr "空闲等待时间"
|
||||
|
||||
msgid "Policy: Close connection if no data is transferred within given timeout. See <a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">here</a> for help."
|
||||
msgstr "策略:在给定时间内未传输任何数据,则关闭连接。参阅<a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Uplink Only Timeout"
|
||||
msgstr "等待上行时间"
|
||||
|
||||
msgid "Policy: How long to wait before closing connection after server closed connection. See <a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">here</a> for help."
|
||||
msgstr "策略:当服务器关闭连接后的等待时间。参阅<a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Downlink Only Timeout"
|
||||
msgstr "等待下行时间"
|
||||
|
||||
msgid "Policy: How long to wait before closing connection after client closed connection. See <a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">here</a> for help."
|
||||
msgstr "策略:当客户端关闭连接后的等待时间。参阅<a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Buffer Size"
|
||||
msgstr "缓冲区大小"
|
||||
|
||||
msgid "Policy: Internal cache size per connection. See <a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">here</a> for help."
|
||||
msgstr "策略:每个连接的缓存大小。参阅<a href=\"https://xtls.github.io/config/policy.html#levelpolicyobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Preview or Deprecated"
|
||||
msgstr "预览或弃用"
|
||||
|
||||
msgid "Show preview or deprecated features (requires reboot to take effect)."
|
||||
msgstr "显示预览或弃用的功能(重启后生效)。"
|
||||
|
||||
msgid "Bridge"
|
||||
msgstr "桥接"
|
||||
|
||||
msgid "Reverse proxy tool. Currently only client role (bridge) is supported. See <a href=\"https://xtls.github.io/config/reverse.html#bridgeobject\">here</a> for help."
|
||||
msgstr "反向代理工具,目前仅支持客户端(桥接)。参阅<a href=\"https://xtls.github.io/config/reverse.html#bridgeobject\">此处</a>获取帮助。"
|
||||
|
||||
msgid "Upstream"
|
||||
msgstr "上游服务器"
|
||||
|
||||
msgid "Redirect address"
|
||||
msgstr "重定向地址"
|
||||
|
||||
msgid "Extra Options"
|
||||
msgstr "扩展选项"
|
||||
|
||||
msgid "Initial Windows Size"
|
||||
msgstr "初始化窗口大小"
|
||||
|
||||
msgid "Route Only"
|
||||
msgstr "仅路由"
|
||||
|
||||
msgid "Use sniffed domain for routing only but still access through IP. Reduces unnecessary DNS requests. See <a href=\"https://github.com/XTLS/Xray-core/commit/a3023e43ef55d4498b1afbc9a7fe7b385138bb1a\">here</a> for help."
|
||||
msgstr "仅使用域名嗅探进行路由,但仍通过IP进行访问,减少不必要的 DNS 请求。参阅<a href=\"https://github.com/XTLS/Xray-core/commit/a3023e43ef55d4498b1afbc9a7fe7b385138bb1a\">此处</a>获取帮助。"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 309 KiB |
@@ -0,0 +1,165 @@
|
||||
--- a/miniupnpd.c
|
||||
+++ b/miniupnpd.c
|
||||
@@ -1051,7 +1051,7 @@ parselanaddr(struct lan_addr_s * lan_addr, const char * str, int debug_flag)
|
||||
INIT_PRINT_ERR("Error parsing address : %s\n", lan_addr->ext_ip_str);
|
||||
return -1;
|
||||
}
|
||||
- if(addr_is_reserved(&lan_addr->ext_ip_addr)) {
|
||||
+ if(addr_is_reserved(&lan_addr->ext_ip_addr) && !GETFLAG(FORCEFORWARDINGMASK)) {
|
||||
if (GETFLAG(ALLOWPRIVATEIPV4MASK)) {
|
||||
syslog(LOG_WARNING, "IGNORED : option ext_ip address contains reserved / private address : %s", lan_addr->ext_ip_str);
|
||||
} else {
|
||||
@@ -1190,11 +1190,11 @@ static void update_disable_port_forwarding(void)
|
||||
}
|
||||
disable_port_forwarding = 1;
|
||||
} else {
|
||||
- int reserved = addr_is_reserved(&addr);
|
||||
+ int reserved = addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK);
|
||||
if (!disable_port_forwarding && reserved) {
|
||||
if (GETFLAG(ALLOWPRIVATEIPV4MASK)) {
|
||||
syslog(LOG_WARNING, "IGNORED : Reserved / private IP address %s on ext interface %s", if_addr, ext_if_name);
|
||||
- } else {
|
||||
+ } else if (!GETFLAG(FORCEFORWARDINGMASK)) {
|
||||
syslog(LOG_WARNING, "Reserved / private IP address %s on ext interface %s: Port forwarding is impossible", if_addr, ext_if_name);
|
||||
syslog(LOG_INFO, "You are probably behind NAT, enable option ext_perform_stun=yes to detect public IP address");
|
||||
syslog(LOG_INFO, "Or use ext_ip= / -o option to declare public IP address");
|
||||
@@ -1357,6 +1357,10 @@ init(int argc, char * * argv, struct runtime_vars * v)
|
||||
if(strcmp(ary_options[i].value, "yes") == 0)
|
||||
SETFLAG(ALLOWPRIVATEIPV4MASK);
|
||||
break;
|
||||
+ case UPNP_FORCE_FORWARDING:
|
||||
+ if(strcmp(ary_options[i].value, "yes") == 0)
|
||||
+ SETFLAG(FORCEFORWARDINGMASK);
|
||||
+ break;
|
||||
case UPNPEXT_PERFORM_STUN:
|
||||
if(strcmp(ary_options[i].value, "yes") == 0)
|
||||
SETFLAG(PERFORMSTUNMASK);
|
||||
@@ -1973,7 +1977,7 @@ init(int argc, char * * argv, struct runtime_vars * v)
|
||||
INIT_PRINT_ERR("Error: option ext_ip contains invalid address %s\n", use_ext_ip_addr);
|
||||
return 1;
|
||||
}
|
||||
- if (addr_is_reserved(&addr)) {
|
||||
+ if (addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK)) {
|
||||
if (GETFLAG(ALLOWPRIVATEIPV4MASK)) {
|
||||
syslog(LOG_WARNING, "IGNORED : option ext_ip contains reserved / private address %s, not public routable", use_ext_ip_addr);
|
||||
} else {
|
||||
|
||||
--- a/natpmp.c
|
||||
+++ b/natpmp.c
|
||||
@@ -109,7 +109,7 @@ static void FillPublicAddressResponse(unsigned char * resp, in_addr_t senderaddr
|
||||
syslog(LOG_ERR, "Failed to get IP for interface %s", ext_if_name);
|
||||
resp[3] = 3; /* Network Failure (e.g. NAT box itself
|
||||
* has not obtained a DHCP lease) */
|
||||
- } else if (!GETFLAG(ALLOWPRIVATEIPV4MASK) && addr_is_reserved(&addr)) {
|
||||
+ } else if (!GETFLAG(ALLOWPRIVATEIPV4MASK) && addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK)) {
|
||||
resp[3] = 3; /* Network Failure, box has not obtained
|
||||
public IP address */
|
||||
} else {
|
||||
|
||||
--- a/options.c
|
||||
+++ b/options.c
|
||||
@@ -36,6 +36,7 @@ static const struct {
|
||||
#endif
|
||||
{ UPNPEXT_IP, "ext_ip" },
|
||||
{ UPNPEXT_ALLOW_PRIVATE_IPV4, "ext_allow_private_ipv4" },
|
||||
+ { UPNP_FORCE_FORWARDING, "force_forwarding" },
|
||||
{ UPNPEXT_PERFORM_STUN, "ext_perform_stun" },
|
||||
{ UPNPEXT_STUN_HOST, "ext_stun_host" },
|
||||
{ UPNPEXT_STUN_PORT, "ext_stun_port" },
|
||||
|
||||
--- a/options.h
|
||||
+++ b/options.h
|
||||
@@ -26,6 +26,7 @@ enum upnpconfigoptions {
|
||||
#endif
|
||||
UPNPEXT_IP, /* ext_ip */
|
||||
UPNPEXT_ALLOW_PRIVATE_IPV4, /* ext_allow_private_ipv4 */
|
||||
+ UPNP_FORCE_FORWARDING, /* force forwarding enable for upnp */
|
||||
UPNPEXT_PERFORM_STUN, /* ext_perform_stun */
|
||||
UPNPEXT_STUN_HOST, /* ext_stun_host */
|
||||
UPNPEXT_STUN_PORT, /* ext_stun_port */
|
||||
|
||||
--- a/testgetifaddr.c
|
||||
+++ b/testgetifaddr.c
|
||||
@@ -14,6 +14,8 @@
|
||||
#include "getifaddr.h"
|
||||
#include "getconnstatus.h"
|
||||
|
||||
+int runtime_flags = 0;
|
||||
+
|
||||
#if defined(__sun)
|
||||
/* solaris 10 does not define LOG_PERROR */
|
||||
#define LOG_PERROR 0
|
||||
|
||||
--- a/testportinuse.c
|
||||
+++ b/testportinuse.c
|
||||
@@ -15,6 +15,8 @@
|
||||
#include "portinuse.h"
|
||||
#include "upnpglobalvars.h"
|
||||
|
||||
+int runtime_flags = 0;
|
||||
+
|
||||
struct lan_addr_list lan_addrs;
|
||||
int runtime_flags = 0;
|
||||
time_t startup_time = 0;
|
||||
|
||||
--- a/upnpdescgen.c
|
||||
+++ b/upnpdescgen.c
|
||||
@@ -1311,7 +1311,7 @@ genEventVars(int * len, const struct serviceDesc * s)
|
||||
else {
|
||||
struct in_addr addr;
|
||||
char ext_ip_addr[INET_ADDRSTRLEN];
|
||||
- if(getifaddr(ext_if_name, ext_ip_addr, INET_ADDRSTRLEN, &addr, NULL) < 0 || (!GETFLAG(ALLOWPRIVATEIPV4MASK) && addr_is_reserved(&addr))) {
|
||||
+ if(getifaddr(ext_if_name, ext_ip_addr, INET_ADDRSTRLEN, &addr, NULL) < 0 || (!GETFLAG(ALLOWPRIVATEIPV4MASK) && addr_is_reserved(&addr) && !GETFLAG(FORCEFORWARDINGMASK))) {
|
||||
str = strcat_str(str, len, &tmplen, "0.0.0.0");
|
||||
} else {
|
||||
str = strcat_str(str, len, &tmplen, ext_ip_addr);
|
||||
|
||||
--- a/upnpglobalvars.h
|
||||
+++ b/upnpglobalvars.h
|
||||
@@ -100,6 +100,7 @@ extern int runtime_flags;
|
||||
|
||||
/*! \brief perform STUN */
|
||||
#define PERFORMSTUNMASK 0x1000
|
||||
+#define FORCEFORWARDINGMASK 0x2000
|
||||
|
||||
/*! \brief Allow the external IPv4 to be private */
|
||||
#define ALLOWPRIVATEIPV4MASK 0x2000
|
||||
|
||||
--- a/upnpredirect.c
|
||||
+++ b/upnpredirect.c
|
||||
@@ -406,7 +406,7 @@ upnp_redirect_internal(const char * rhost, unsigned short eport,
|
||||
{
|
||||
/*syslog(LOG_INFO, "redirecting port %hu to %s:%hu protocol %s for: %s",
|
||||
eport, iaddr, iport, protocol, desc); */
|
||||
- if(disable_port_forwarding)
|
||||
+ if(disable_port_forwarding && !GETFLAG(FORCEFORWARDINGMASK))
|
||||
return -1;
|
||||
if(add_redirect_rule2(ext_if_name, rhost, eport, iaddr, iport, proto,
|
||||
desc, timestamp) < 0) {
|
||||
|
||||
--- a/upnpsoap.c
|
||||
+++ b/upnpsoap.c
|
||||
@@ -374,7 +374,11 @@ GetExternalIPAddress(struct upnphttp * h, const char * action, const char * ns)
|
||||
syslog(LOG_WARNING, "IGNORED : private/reserved address %s is not suitable for external IP", ext_ip_addr);
|
||||
} else {
|
||||
syslog(LOG_NOTICE, "private/reserved address %s is not suitable for external IP", ext_ip_addr);
|
||||
+ if (!GETFLAG(FORCEFORWARDINGMASK)) {
|
||||
ext_ip_addr[0] = '\0';
|
||||
+ } else {
|
||||
+ syslog(LOG_NOTICE, "force_forwarding enable, private/reserved address %s used as external IP", ext_ip_addr);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
--- a/miniupnpd.conf
|
||||
+++ b/miniupnpd.conf
|
||||
@@ -23,6 +23,8 @@
|
||||
# This option is disabled by default.
|
||||
#ext_allow_private_ipv4=yes
|
||||
|
||||
+#force forwarding enable for upnp: default is no
|
||||
+#force_forwarding=yes
|
||||
# The WAN interface must have a public IP address. Otherwise it is behind NAT
|
||||
# and port forwarding is impossible. In some cases WAN interface can be
|
||||
# behind unrestricted full-cone NAT 1:1 when all incoming traffic is NAT-ed and
|
||||
@@ -0,0 +1,42 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=tvhelper
|
||||
PKG_VERSION:=1.0
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=tv.sh
|
||||
PKG_SOURCE_URL:=https://raw.githubusercontent.com/wukongdaily/tvhelper/master/shells/
|
||||
PKG_HASH:=skip
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/tvhelper
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=TV Helper
|
||||
DEPENDS:=+bash
|
||||
endef
|
||||
|
||||
define Package/tvhelper/description
|
||||
tv.sh script from @wukongdaily.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
$(CP) $(DL_DIR)/$(PKG_SOURCE) $(PKG_BUILD_DIR)/
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/tvhelper/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/tv.sh $(1)/usr/bin/tv.sh
|
||||
$(INSTALL_DIR) $(1)/root
|
||||
ln -sf /usr/bin/tv.sh $(1)/root/tv.sh
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,tvhelper))
|
||||
Reference in new issue
Block a user