diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 150ce71da..3f5f60cfc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,7 +8,7 @@ jobs: build: strategy: matrix: - OMR_TARGET: [bpi-r1, bpi-r2, bpi-r64, rpi2, rpi4, wrt32x, espressobin, r2s, rpi3, wrt3200acm, x86, x86_64, ubnt-erx, r4s, r7800, rutx, r5s, qnap-301w] + OMR_TARGET: [bpi-r1, bpi-r2, bpi-r64, rpi2, rpi4, wrt32x, espressobin, r2s, rpi3, wrt3200acm, x86, x86_64, ubnt-erx, r4s, r7800, rutx12, rutx50, r5s, qnap-301w] OMR_KERNEL: [5.4, 6.1] runs-on: ubuntu-latest continue-on-error: true diff --git a/golang/golang-build.sh b/golang/golang-build.sh index 5e40436bb..fe8718ee7 100755 --- a/golang/golang-build.sh +++ b/golang/golang-build.sh @@ -1,4 +1,10 @@ #!/bin/sh +# +# Copyright (C) 2020, 2022 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# nl=" " @@ -56,7 +62,7 @@ configure() { if [ "$GO_INSTALL_ALL" != 1 ]; then code="$(printf '%s\n' "$files" | grep '\.\(c\|cc\|cpp\|go\|h\|hh\|hpp\|proto\|s\)$')" testdata="$(printf '%s\n' "$files" | grep '/testdata/')" - gomod="$(printf '%s\n' "$files" | grep '/go\.\(mod\|sum\)$')" + gomod="$(printf '%s\n' "$files" | grep '/go\.\(mod\|sum\|work\)$')" for pattern in $GO_INSTALL_EXTRA; do extra="$(printf '%s\n' "$extra"; printf '%s\n' "$files" | grep -e "$pattern")" diff --git a/golang/golang-compiler.mk b/golang/golang-compiler.mk index b8c278568..50cc44905 100755 --- a/golang/golang-compiler.mk +++ b/golang/golang-compiler.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2018, 2020 Jeffery To +# Copyright (C) 2018, 2020-2021, 2023 Jeffery To # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -60,9 +60,10 @@ define GoCompiler/Default/Install/Bin $(call GoCompiler/Default/Install/install-share-data,$(1),$(2),$(3),api) + $(INSTALL_DATA) -p "$(1)/go.env" "$(2)/lib/go-$(3)/" $(INSTALL_DATA) -p "$(1)/VERSION" "$(2)/lib/go-$(3)/" - for file in AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE PATENTS README.md SECURITY.md; do \ + for file in CONTRIBUTING.md LICENSE PATENTS README.md SECURITY.md; do \ if [ -f "$(1)/$$$$file" ]; then \ $(INSTALL_DATA) -p "$(1)/$$$$file" "$(2)/share/go-$(3)/" ; \ fi ; \ diff --git a/golang/golang-golang-x-crypto/Makefile b/golang/golang-golang-x-crypto/Makefile deleted file mode 100755 index b2d09364f..000000000 --- a/golang/golang-golang-x-crypto/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (C) 2018 Jeffery To -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=golang-golang-x-crypto -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/golang/crypto.git -PKG_SOURCE_VERSION:=4def268fd1a49955bfb3dda92fe3db4f924f2285 -PKG_SOURCE_DATE:=20190701 -#PKG_MIRROR_HASH:=80b16b203736ac56883d0610edbc5981eb78f15b7b35d11b5ca639f7c3814214 - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Jeffery To - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 - -GO_PKG:=golang.org/x/crypto -GO_PKG_SOURCE_ONLY:=1 - -include $(INCLUDE_DIR)/package.mk -include ../golang-package.mk - -define Package/golang-golang-x-crypto-dev -$(call GoPackage/GoSubMenu) - TITLE:=Go supplementary cryptography libraries - URL:=https://godoc.org/golang.org/x/crypto - DEPENDS:=$(GO_ARCH_DEPENDS) \ - +golang-golang-x-net-dev \ - +golang-golang-x-sys-dev - PKGARCH:=all -endef - -define Package/golang-golang-x-crypto-dev/description -Supplementary Go cryptography libraries. -endef - -$(eval $(call GoSrcPackage,golang-golang-x-crypto-dev)) -$(eval $(call BuildPackage,golang-golang-x-crypto-dev)) diff --git a/golang/golang-golang-x-net/Makefile b/golang/golang-golang-x-net/Makefile deleted file mode 100755 index 979d9be7f..000000000 --- a/golang/golang-golang-x-net/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (C) 2018 Jeffery To -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=golang-golang-x-net -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/golang/net.git -PKG_SOURCE_VERSION:=afe8f62b1d6bbd81f31868121a50b06d8188e1f9 -PKG_SOURCE_DATE:=20180620 -PKG_MIRROR_HASH:=9a8bb3bf21ea60121d7e87f1bd1af9effbdcd908f758be99457653172d13eb1e - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Jeffery To - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 - -GO_PKG:=golang.org/x/net -# exclude http2/h2i to break circular dependency with golang-golang-x-crypto-dev -# since there are no other binaries, can skip compilation -GO_PKG_SOURCE_ONLY:=1 - -include $(INCLUDE_DIR)/package.mk -include ../golang-package.mk - -define Package/golang-golang-x-net-dev -$(call GoPackage/GoSubMenu) - TITLE:=Go supplementary network libraries - URL:=https://godoc.org/golang.org/x/net - DEPENDS:=$(GO_ARCH_DEPENDS) +golang-golang-x-text-dev - PKGARCH:=all -endef - -define Package/golang-golang-x-net-dev/description -Supplementary Go networking libraries. -endef - -# http2/testdata/draft-ietf-httpbis-http2.xml is a non-free document -# http2/z_spec_test.go uses http2/testdata/draft-ietf-httpbis-http2.xml -define Package/golang-golang-x-net-dev/install - $(call GoPackage/Package/Install/Src,$(1)) - - rm -f $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/testdata/draft-ietf-httpbis-http2.xml - rmdir $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/testdata/ - - rm -f $(1)$(GO_PKG_PATH)/src/$(GO_PKG)/http2/z_spec_test.go -endef - -$(eval $(call GoSrcPackage,golang-golang-x-net-dev)) -$(eval $(call BuildPackage,golang-golang-x-net-dev)) diff --git a/golang/golang-golang-x-sys/Makefile b/golang/golang-golang-x-sys/Makefile deleted file mode 100755 index 5350f3cbe..000000000 --- a/golang/golang-golang-x-sys/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (C) 2018 Jeffery To -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=golang-golang-x-sys -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/golang/sys.git -PKG_SOURCE_VERSION:=63fc586f45fe72d95d5240a5d5eb95e6503907d3 -PKG_SOURCE_DATE:=20180621 -PKG_MIRROR_HASH:=3afe7936fb9fb291ef9b9cfa88f51576cdc19abbd34240232ce284958ac7dbaf - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Jeffery To - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 - -GO_PKG:=golang.org/x/sys -GO_PKG_SOURCE_ONLY:=1 - -include $(INCLUDE_DIR)/package.mk -include ../golang-package.mk - -define Package/golang-golang-x-sys-dev -$(call GoPackage/GoSubMenu) - TITLE:=Go packages for interaction with the OS - URL:=https://godoc.org/golang.org/x/sys - DEPENDS:=$(GO_ARCH_DEPENDS) - PKGARCH:=all -endef - -define Package/golang-golang-x-sys-dev/description -Supplementary Go packages for low-level interactions with the operating -system. -endef - -$(eval $(call GoSrcPackage,golang-golang-x-sys-dev)) -$(eval $(call BuildPackage,golang-golang-x-sys-dev)) diff --git a/golang/golang-golang-x-text/Makefile b/golang/golang-golang-x-text/Makefile deleted file mode 100755 index e3b1120b9..000000000 --- a/golang/golang-golang-x-text/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (C) 2018 Jeffery To -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=golang-golang-x-text -PKG_RELEASE:=1 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/golang/text.git -PKG_SOURCE_VERSION:=5cec4b58c438bd98288aeb248bab2c1840713d21 -PKG_SOURCE_DATE:=20180520 -PKG_MIRROR_HASH:=6c541a59f32f57afa54a2216045ddf16a077f8fe2e823fbbe77723eca04ddddb - -PKG_LICENSE:=BSD-3-Clause -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Jeffery To - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 - -GO_PKG:=golang.org/x/text -# exclude gotext (and message/pipeline) to avoid dependency on golang.org/x/tools -# since there are no other binaries, can skip compilation -GO_PKG_SOURCE_ONLY:=1 - -include $(INCLUDE_DIR)/package.mk -include ../golang-package.mk - -define Package/golang-golang-x-text-dev -$(call GoPackage/GoSubMenu) - TITLE:=Go text processing support - URL:=https://godoc.org/golang.org/x/text - DEPENDS:=$(GO_ARCH_DEPENDS) - PKGARCH:=all -endef - -define Package/golang-golang-x-text-dev/description -Supplementary Go libraries for text processing, many involving Unicode. -endef - -$(eval $(call GoSrcPackage,golang-golang-x-text-dev)) -$(eval $(call BuildPackage,golang-golang-x-text-dev)) diff --git a/golang/golang-host-build.mk b/golang/golang-host-build.mk index ee4f1ea31..7c7551fd1 100755 --- a/golang/golang-host-build.mk +++ b/golang/golang-host-build.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2020 Jeffery To +# Copyright (C) 2020, 2022 Jeffery To # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -107,10 +107,10 @@ GO_HOST_CUSTOM_LDFLAGS= \ GO_HOST_INSTALL_ARGS= \ -v \ -ldflags "all=$(GO_HOST_DEFAULT_LDFLAGS)" \ - $(if $(filter $(GO_HOST_ENABLE_PIE),1),-buildmode pie) \ - $(if $(GO_HOST_GCFLAGS),-gcflags "$(GO_HOST_GCFLAGS)") \ - $(if $(GO_HOST_CUSTOM_LDFLAGS),-ldflags "$(GO_HOST_CUSTOM_LDFLAGS) $(GO_HOST_DEFAULT_LDFLAGS)") \ - $(if $(GO_HOST_TAGS),-tags "$(GO_HOST_TAGS)") + $(if $(GO_HOST_ENABLE_PIE),-buildmode pie) \ + $(if $(strip $(GO_HOST_GCFLAGS)),-gcflags "$(GO_HOST_GCFLAGS)") \ + $(if $(strip $(GO_HOST_CUSTOM_LDFLAGS)),-ldflags "$(GO_HOST_CUSTOM_LDFLAGS) $(GO_HOST_DEFAULT_LDFLAGS)") \ + $(if $(strip $(GO_HOST_TAGS)),-tags "$(GO_HOST_TAGS)") define GoHost/Host/Configure $(GO_GENERAL_BUILD_CONFIG_VARS) \ diff --git a/golang/golang-package.mk b/golang/golang-package.mk index fcc3f3aec..1b73d23b4 100755 --- a/golang/golang-package.mk +++ b/golang/golang-package.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2020 Jeffery To +# Copyright (C) 2018-2022 Jeffery To # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -32,7 +32,7 @@ include $(GO_INCLUDE_DIR)/golang-values.mk # # * Files in any 'testdata' directory # -# * go.mod and go.sum, in any directory +# * go.mod, go.sum and go.work, in any directory # # e.g. GO_PKG_INSTALL_EXTRA:=example.toml marshal_test.toml # @@ -198,9 +198,11 @@ GO_PKG_TARGET_VARS= \ GOOS="$(GO_OS)" \ GOARCH="$(GO_ARCH)" \ GO386="$(GO_386)" \ + GOAMD64="$(GO_AMD64)" \ GOARM="$(GO_ARM)" \ GOMIPS="$(GO_MIPS)" \ GOMIPS64="$(GO_MIPS64)" \ + GOPPC64="$(GO_PPC64)" \ CGO_ENABLED=1 \ CC="$(TARGET_CC)" \ CXX="$(TARGET_CXX)" \ @@ -213,7 +215,8 @@ GO_PKG_BUILD_VARS= \ GOPATH="$(GO_PKG_BUILD_DIR)" \ GOCACHE="$(GO_BUILD_CACHE_DIR)" \ GOMODCACHE="$(GO_MOD_CACHE_DIR)" \ - GOENV=off GOPROXY="direct" + GOENV=off GOPROXY="direct" \ + GOTOOLCHAIN=local GO_PKG_VARS= \ $(GO_PKG_TARGET_VARS) \ @@ -236,17 +239,18 @@ GO_PKG_CUSTOM_LDFLAGS= \ GO_PKG_INSTALL_ARGS= \ -v \ + -buildvcs=false \ -trimpath \ -ldflags "all=$(GO_PKG_DEFAULT_LDFLAGS)" \ - $(if $(GO_PKG_DEFAULT_GCFLAGS),-gcflags "all=$(GO_PKG_DEFAULT_GCFLAGS)") \ - $(if $(GO_PKG_DEFAULT_ASMFLAGS),-asmflags "all=$(GO_PKG_DEFAULT_ASMFLAGS)") \ - $(if $(filter $(GO_PKG_ENABLE_PIE),1),-buildmode pie) \ + $(if $(strip $(GO_PKG_DEFAULT_GCFLAGS)),-gcflags "all=$(GO_PKG_DEFAULT_GCFLAGS)") \ + $(if $(strip $(GO_PKG_DEFAULT_ASMFLAGS)),-asmflags "all=$(GO_PKG_DEFAULT_ASMFLAGS)") \ + $(if $(GO_PKG_ENABLE_PIE),-buildmode pie) \ $(if $(filter $(GO_ARCH),arm),-installsuffix "v$(GO_ARM)") \ $(if $(filter $(GO_ARCH),mips mipsle),-installsuffix "$(GO_MIPS)") \ $(if $(filter $(GO_ARCH),mips64 mips64le),-installsuffix "$(GO_MIPS64)") \ - $(if $(GO_PKG_GCFLAGS),-gcflags "$(GO_PKG_GCFLAGS) $(GO_PKG_DEFAULT_GCFLAGS)") \ - $(if $(GO_PKG_CUSTOM_LDFLAGS),-ldflags "$(GO_PKG_CUSTOM_LDFLAGS) $(GO_PKG_DEFAULT_LDFLAGS)") \ - $(if $(GO_PKG_TAGS),-tags "$(GO_PKG_TAGS)") + $(if $(strip $(GO_PKG_GCFLAGS)),-gcflags "$(GO_PKG_GCFLAGS) $(GO_PKG_DEFAULT_GCFLAGS)") \ + $(if $(strip $(GO_PKG_CUSTOM_LDFLAGS)),-ldflags "$(GO_PKG_CUSTOM_LDFLAGS) $(GO_PKG_DEFAULT_LDFLAGS)") \ + $(if $(strip $(GO_PKG_TAGS)),-tags "$(GO_PKG_TAGS)") define GoPackage/Build/Configure $(GO_GENERAL_BUILD_CONFIG_VARS) \ @@ -314,14 +318,3 @@ define GoSrcPackage Package/$(1)/install=$$(call GoPackage/Package/Install/Src,$$(1)) endif endef - - -# Deprecated variables - these will be removed after the next OpenWrt release -GO_PKG_PATH=$(GO_PKG_BUILD_DEPENDS_PATH) -GO_PKG_WORK_DIR=$(PKG_BUILD_DIR)/$(GO_PKG_WORK_DIR_NAME) -GO_PKG_CACHE_DIR=$(GO_BUILD_CACHE_DIR) -GO_PKG_DEFAULT_VARS=$(GO_PKG_VARS) -GoPackage/Environment=$(GO_PKG_VARS) -GoPackage/is_dir_not_empty=$$$$($(FIND) "$(1)" -maxdepth 0 -type d \! -empty 2>/dev/null) -GoPackage/has_binaries=$(call GoPackage/is_dir_not_empty,$(GO_PKG_BUILD_BIN_DIR)) -# End of deprecated variables diff --git a/golang/golang-values.mk b/golang/golang-values.mk index f0581f419..7ed58ac65 100755 --- a/golang/golang-values.mk +++ b/golang/golang-values.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2018, 2020 Jeffery To +# Copyright (C) 2018-2023 Jeffery To # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -29,8 +29,10 @@ unexport \ GOOS \ GOPATH \ GOROOT \ + GOTOOLCHAIN \ GOTMPDIR \ - GOWORK GOPROXY + GOPROXY \ + GOWORK # Unmodified: # GOINSECURE # GOPRIVATE @@ -201,7 +203,7 @@ endif # Target Go -GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||powerpc64||x86_64) +GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||powerpc64||riscv64||x86_64) # ASLR/PIE @@ -219,7 +221,7 @@ GO_PIE_SUPPORTED_OS_ARCH:= \ \ aix_ppc64 \ \ - linux_ppc64le linux_riscv64 linux_s390x + linux_loong64 linux_ppc64le linux_riscv64 linux_s390x # From https://go.dev/src/cmd/go/internal/work/init.go go_pie_install_suffix=$(if $(filter $(1),aix_ppc64 windows_386 windows_amd64 windows_arm windows_arm64),,shared) diff --git a/golang/golang/Config.in b/golang/golang/Config.in index 714bf01fd..76fd85c80 100755 --- a/golang/golang/Config.in +++ b/golang/golang/Config.in @@ -17,7 +17,7 @@ config GOLANG_BUILD_CACHE_DIR default "" help Store the Go build cache in this directory. - If not set, uses './.go-build'. + If not set, uses '$(TMP_DIR)/go-build'. config GOLANG_MOD_CACHE_WORLD_READABLE bool "Ensure Go module cache is world-readable" diff --git a/golang/golang/Makefile b/golang/golang/Makefile index 1f5ecffcc..e91f34654 100755 --- a/golang/golang/Makefile +++ b/golang/golang/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2018, 2020 Jeffery To +# Copyright (C) 2018-2023 Jeffery To # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -7,10 +7,8 @@ include $(TOPDIR)/rules.mk -#GO_VERSION_MAJOR_MINOR:=1.20 -#GO_VERSION_PATCH:=3 -GO_VERSION_MAJOR_MINOR:=1.20 -GO_VERSION_PATCH:=999 +GO_VERSION_MAJOR_MINOR:=1.21 +GO_VERSION_PATCH:=1 PKG_NAME:=golang PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH)) @@ -20,14 +18,9 @@ GO_SOURCE_URLS:=https://dl.google.com/go/ \ https://mirrors.ustc.edu.cn/golang/ \ https://mirrors.nju.edu.cn/golang/ -#PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz -#PKG_SOURCE_URL:=$(GO_SOURCE_URLS) -#PKG_HASH:=e447b498cde50215c4f7619e5124b0fc4e25fb5d16ea47271c47f278e7aa763a -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/golang/go.git -PKG_SOURCE_VERSION:=a5350558e6e2db16bfe09f2ba8104549c6598c46 -PKG_SOURCE_DATE:=2023-05-05 -PKG_SOURCE_SUBDIR:=go-$(PKG_VERSION) +PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz +PKG_SOURCE_URL:=$(GO_SOURCE_URLS) +PKG_HASH:=bfa36bf75e9a1e9cbbdb9abcf9d1707e479bd3a07880a8ae3564caee5711cb99 PKG_MAINTAINER:=Jeffery To PKG_LICENSE:=BSD-3-Clause @@ -37,7 +30,6 @@ PKG_CPE_ID:=cpe:/a:golang:go PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION) PKG_BUILD_PARALLEL:=1 -#PKG_USE_MIPS16:=0 PKG_BUILD_FLAGS:=no-mips16 PKG_GO_PREFIX:=/usr @@ -70,6 +62,7 @@ HOST_GO_VALID_OS_ARCH:= \ \ aix_ppc64 \ js_wasm \ + wasip1_wasm \ \ freebsd_riscv64 \ \ @@ -108,7 +101,7 @@ include ../golang-compiler.mk include ../golang-package.mk PKG_UNPACK:=$(HOST_TAR) -C "$(PKG_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)" -#HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)" +HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)" BOOTSTRAP_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_SOURCE)" BOOTSTRAP_1_17_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_17_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_17_SOURCE)" @@ -242,13 +235,10 @@ HOST_GO_VARS= \ CXX="$(HOSTCXX_NOCACHE)" define Host/Configure - sed -i 's/1\.21/1.20/g' $(HOST_BUILD_DIR)/src/go.mod - sed -i 's/21/20/g' $(HOST_BUILD_DIR)/src/internal/goversion/goversion.go $(call GoCompiler/Bootstrap/CheckHost,$(BOOTSTRAP_GO_VALID_OS_ARCH)) $(call GoCompiler/Host/CheckHost,$(HOST_GO_VALID_OS_ARCH)) mkdir -p "$(GO_BUILD_CACHE_DIR)" - echo "go$(PKG_VERSION)" > $(HOST_BUILD_DIR)/VERSION endef define Host/Compile @@ -307,7 +297,7 @@ $(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$( PKG_GO_ZBOOTSTRAP_MODS:= \ s/defaultGO386 = `[^`]*`/defaultGO386 = `$(or $(GO_386),sse2)`/; \ s/defaultGOAMD64 = `[^`]*`/defaultGOAMD64 = `$(or $(GO_AMD64),v1)`/; \ - s/defaultGOARM = `[^`]*`/defaultGOARM = `$(or $(GO_ARM),5)`/; \ + s/defaultGOARM = `[^`]*`/defaultGOARM = `$(or $(GO_ARM),7)`/; \ s/defaultGOMIPS = `[^`]*`/defaultGOMIPS = `$(or $(GO_MIPS),hardfloat)`/; \ s/defaultGOMIPS64 = `[^`]*`/defaultGOMIPS64 = `$(or $(GO_MIPS64),hardfloat)`/; \ s/defaultGOPPC64 = `[^`]*`/defaultGOPPC64 = `$(or $(GO_PPC64),power8)`/; @@ -345,14 +335,12 @@ PKG_GO_INSTALL_ARGS= \ $(if $(filter $(GO_PKG_ENABLE_PIE),1),-buildmode pie) define Build/Configure - sed -i 's/1\.21/1.20/g' $(HOST_BUILD_DIR)/src/go.mod - sed -i 's/21/20/g' $(HOST_BUILD_DIR)/src/internal/goversion/goversion.go mkdir -p "$(GO_BUILD_CACHE_DIR)" - echo "go$(PKG_VERSION)" > $(PKG_BUILD_DIR)/VERSION endef define Build/Compile @echo "Building target Go first stage" + $(call GoCompiler/Package/Make, \ GOROOT_BOOTSTRAP="$(HOST_GO_ROOT)" \ GO_GCC_HELPER_CC="$(HOSTCC)" \ diff --git a/golang/golang/files/go-gcc-helper b/golang/golang/files/go-gcc-helper index b396e302c..b21457b55 100755 --- a/golang/golang/files/go-gcc-helper +++ b/golang/golang/files/go-gcc-helper @@ -1,4 +1,10 @@ #!/bin/sh +# +# Copyright (C) 2018, 2020 Jeffery To +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# me=go-gcc-helper name="${0##*/}" diff --git a/golang/golang/patches/001-default-enable-mptcp.patch b/golang/golang/patches/001-default-enable-mptcp.patch deleted file mode 100755 index 68de599e2..000000000 --- a/golang/golang/patches/001-default-enable-mptcp.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/net/dial.go 2023-05-06 10:33:54.275030044 +0200 -+++ b/src/net/dial.go 2023-05-06 10:34:29.218440686 +0200 -@@ -18,7 +18,7 @@ - - // For the moment, MultiPath TCP is not used by default - // See go.dev/issue/56539 -- defaultMPTCPEnabled = false -+ defaultMPTCPEnabled = true - ) - - // mptcpStatus is a tristate for Multipath TCP, see go.dev/issue/56539 diff --git a/golang/golang/test.sh b/golang/golang/test.sh new file mode 100644 index 000000000..114b427ef --- /dev/null +++ b/golang/golang/test.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +[ "$1" = golang ] || exit 0 + +go version | grep -F " go$PKG_VERSION " diff --git a/iproute2/Makefile b/iproute2/Makefile index 302d57bf8..194edcb35 100755 --- a/iproute2/Makefile +++ b/iproute2/Makefile @@ -8,17 +8,19 @@ include $(TOPDIR)/rules.mk PKG_NAME:=iproute2 -PKG_VERSION:=6.2.0 +PKG_VERSION:=6.4.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 -PKG_HASH:=4d72730200ec5b2aabaa1a2f20553c6748292f065d9a154c7d5e22559df9fd62 +PKG_HASH:=4c51b8decbc7e4da159ffb066f590cfb93dbf9af7ff86b1647ce42b7c179a272 PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=iptables PKG_LICENSE:=GPL-2.0 PKG_CPE_ID:=cpe:/a:iproute2_project:iproute2 +PKG_BUILD_FLAGS:=gc-sections lto + include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/nls.mk @@ -171,8 +173,7 @@ define Build/Configure > $(PKG_BUILD_DIR)/include/SNAPSHOT.h endef -TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto -TARGET_LDFLAGS += -Wl,--gc-sections -Wl,--as-needed +TARGET_LDFLAGS += -Wl,--as-needed TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny MAKE_FLAGS += \ diff --git a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js index 5f6485dde..e76e1ac8d 100755 --- a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js +++ b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js @@ -59,7 +59,7 @@ return L.view.extend({ o = s.option(form.ListValue, 'family', _('Restrict to address family')); o.value('ipv4ipv6', _('IPv4 and IPv6')); o.value('ipv4', _('IPv4 only')); - o.value('ipv4', _('IPv6 only')); + o.value('ipv6', _('IPv6 only')); o.default = 'ipv4ipv6'; o.modalonly = true diff --git a/luci-app-omr-bypass/root/etc/firewall.omr-bypass b/luci-app-omr-bypass/root/etc/firewall.omr-bypass index 5c482a198..6cbac141c 100755 --- a/luci-app-omr-bypass/root/etc/firewall.omr-bypass +++ b/luci-app-omr-bypass/root/etc/firewall.omr-bypass @@ -1,2 +1,2 @@ #!/bin/sh -[ -z "$(pgrep -f omr-bypass)" ] && logger -t "firewall.omr-bypass" "reloal omr-bypass rules" && /etc/init.d/omr-bypass reload_rules +[ -z "$(pgrep -f omr-bypass)" ] && logger -t "firewall.omr-bypass" "reload omr-bypass rules" && /etc/init.d/omr-bypass reload_rules diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index c59107f8d..29bb9b35c 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -685,6 +685,59 @@ _intf_rule_v2ray_rules() { fi } +_intf_rule_xray_rules() { + #rule_name=$1 + #[ "$rule_name" = "ss_rules" ] && rule_name="def" + rule_name="def" + if [ "$($IPTABLES --wait=40 -t nat -L -n | grep xr_${rule_name}_dst)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep xr_${rule_name}_dst | grep omr_dst_bypass_$intf)" = "" ]; then + $IPTABLESRESTORE -w --wait=60 --noflush <<-EOF + *nat + -I xr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count + -I xr_${rule_name}_dst 2 -m mark --mark 0x539$count -j RETURN + COMMIT + EOF + fi + if [ "$($IPTABLES --wait=40 -t nat -L -n | grep xr_${rule_name}_local_out)" != "" ] && [ "$($IPTABLESSAVE 2>/dev/null | grep xr_${rule_name}_local_out | grep omr_dst_bypass_$intf)" = "" ]; then + $IPTABLESRESTORE -w --wait=60 --noflush <<-EOF + *nat + -I xr_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count + -I xr_${rule_name}_local_out 2 -m mark --mark 0x539$count -j RETURN + COMMIT + EOF + fi + if [ "$($IPTABLES --wait=40 -t nat -L -n | grep xr_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLESSAVE 2/dev/null | grep xr6 | grep omr6_dst_bypass_$intf)" = "" ]; then + $IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF + *nat + -I xr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count + -I xr6_${rule_name}_dst 2 -m mark --mark 0x6539$count -j RETURN + -I xr6_${rule_name}_local_out 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count + -I xr6_${rule_name}_local_out 2 -m mark --mark 0x6539$count -j RETURN + -I xr6_${rule_name}_pre_src 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count + -I xr6_${rule_name}_pre_src 2 -m mark --mark 0x6539$count -j RETURN + COMMIT + EOF + fi + fi +} + _intf_rule() { local intf intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') @@ -740,8 +793,13 @@ _intf_rule() { if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then config_load shadowsocks-libev config_foreach _intf_rule_ss_rules ss_rules + elif [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks-rust" ]; then + config_load shadowsocks-rust + config_foreach _intf_rule_ss_rules ss_rules elif [ "$(uci -q get openmptcprouter.settings.proxy)" = "v2ray" ]; then _intf_rule_v2ray_rules + elif [ "$(uci -q get openmptcprouter.settings.proxy)" = "xray" ]; then + _intf_rule_xray_rules fi uci -q set omr-bypass.$intf=interface @@ -864,6 +922,45 @@ _v2ray_rules_config() { fi } +_xray_rules_config() { + #rule_name=$1 + #[ "$rule_name" = "ss_rules" ] && rule_name="def" + rule_name="def" + if [ "$($IPTABLES --wait=40 -t nat -L -n | grep xr_${rule_name}_pre_src)" != "" ] && [ "$($IPTABLES --wait=40 -t nat -L -n | grep omr_dst_bypass_all)" = "" ]; then + $IPTABLESRESTORE -w --wait=60 --noflush <<-EOF + *nat + -I xr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539 + -I xr_${rule_name}_dst 2 -m mark --mark 0x539 -j RETURN + -I xr_${rule_name}_local_out 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539 + -I xr_${rule_name}_local_out 2 -m mark --mark 0x539 -j RETURN + -I xr_${rule_name}_pre_src 1 -m set --match-set omr_dst_bypass_all dst -j MARK --set-mark 0x539 + -I xr_${rule_name}_pre_src 2 -m mark --mark 0x539 -j RETURN + COMMIT + EOF + fi + if [ "$disableipv6" = "0" ]; then + if [ "$($IP6TABLES --wait=40 -t mangle -L -n | grep 'match-set omr6_dst_bypass_all dst MARK set')" = "" ]; then + $IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF + *mangle + -A omr-bypass6 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + COMMIT + EOF + fi + if [ "$($IP6TABLES --wait=40 -t nat -L -n | grep xr6_${rule_name}_pre_src)" != "" ] && [ "$($IP6TABLES --wait=40 -t nat -L -n | grep omr6_dst_bypass_all)" = "" ]; then + $IP6TABLESRESTORE -w --wait=60 --noflush <<-EOF + *nat + -I xr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -I xr6_${rule_name}_dst 1 -m mark --mark 0x6539 -j RETURN + -I xr6_${rule_name}_local_out 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -I xr6_${rule_name}_local_out 2 -m mark --mark 0x6539 -j RETURN + -I xr6_${rule_name}_pre_src 1 -m set --match-set omr6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -I xr6_${rule_name}_pre_src 2 -m mark --mark 0x6539 -j RETURN + COMMIT + EOF + fi + fi +} + boot() { BOOT=1 start "$@" @@ -970,7 +1067,10 @@ start_service() { config_load shadowsocks-libev config_foreach _ss_rules_config + config_load shadowsocks-rust + config_foreach _ss_rules_config _v2ray_rules_config + _xray_rules_config $IPTABLESSAVE --counters 2>/dev/null | grep -v omr-bypass-dpi | $IPTABLESRESTORE -w --counters 2>/dev/null $IPTABLESRESTORE -w --wait=60 --noflush <<-EOF diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 1266800d8..45a55985a 100755 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -613,6 +613,7 @@ function wizard_add() ucic:set("openmptcprouter",server,"master","1") ucic:set("openmptcprouter",server,"current","1") ucic:set("openmptcprouter",server,"backup","0") + ucic:set("xray","omrout","s_shadowsocks_email",openmptcprouter_vps_username:gsub("%s+", "")) else ucic:set("openmptcprouter",server,"get_config","0") ucic:set("openmptcprouter",server,"master","0") @@ -669,14 +670,34 @@ function wizard_add() if default_proxy == "shadowsocks" and serversnb > 0 and serversnb > disablednb then --ucic:set("shadowsocks-libev","sss0","disabled","0") ucic:set("v2ray","main","enabled","0") + ucic:set("xray","main","enabled","0") ucic:foreach("shadowsocks-libev", "server", function(s) local sectionname = s[".name"] if sectionname:match("^sss.*") and ucic:get("shadowsocks-libev",sectionname,"server") ~= "" then ucic:set("shadowsocks-libev",sectionname,"disabled","0") end end) + ucic:foreach("shadowsocks-rust", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-rust",sectionname,"disabled","1") + end) + elseif default_proxy == "shadowsocks-rust" and serversnb > 0 and serversnb > disablednb then + --ucic:set("shadowsocks-libev","sss0","disabled","0") + ucic:set("v2ray","main","enabled","0") + ucic:set("xray","main","enabled","0") + ucic:foreach("shadowsocks-rust", "server", function(s) + local sectionname = s[".name"] + if sectionname:match("^sss.*") and ucic:get("shadowsocks-rust",sectionname,"server") ~= "" then + ucic:set("shadowsocks-rust",sectionname,"disabled","0") + end + end) + ucic:foreach("shadowsocks-libev", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-libev",sectionname,"disabled","1") + end) elseif (default_proxy == "v2ray" or default_proxy == "v2ray-vmess" or default_proxy == "v2ray-trojan" or default_proxy == "v2ray-socks") and serversnb > 0 and serversnb > disablednb then --ucic:set("shadowsocks-libev","sss0","disabled","1") + ucic:set("xray","main","enabled","0") ucic:set("v2ray","main","enabled","1") if default_proxy == "v2ray" then ucic:set("v2ray","omrout","protocol","vless") @@ -691,18 +712,51 @@ function wizard_add() local sectionname = s[".name"] ucic:set("shadowsocks-libev",sectionname,"disabled","1") end) - else + ucic:foreach("shadowsocks-rust", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-rust",sectionname,"disabled","1") + end) + elseif (default_proxy == "xray" or default_proxy == "xray-vmess" or default_proxy == "xray-trojan" or default_proxy == "xray-shadowsocks" or default_proxy == "xray-socks") and serversnb > 0 and serversnb > disablednb then --ucic:set("shadowsocks-libev","sss0","disabled","1") ucic:set("v2ray","main","enabled","0") + ucic:set("xray","main","enabled","1") + if default_proxy == "xray" then + ucic:set("xray","omrout","protocol","vless") + elseif default_proxy == "xray-vmess" then + ucic:set("xray","omrout","protocol","vmess") + elseif default_proxy == "xray-trojan" then + ucic:set("xray","omrout","protocol","trojan") + elseif default_proxy == "xray-socks" then + ucic:set("xray","omrout","protocol","socks") + elseif default_proxy == "xray-shadowsocks" then + ucic:set("xray","omrout","protocol","shadowsocks") + end ucic:foreach("shadowsocks-libev", "server", function(s) local sectionname = s[".name"] ucic:set("shadowsocks-libev",sectionname,"disabled","1") end) + ucic:foreach("shadowsocks-rust", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-rust",sectionname,"disabled","1") + end) + else + --ucic:set("shadowsocks-libev","sss0","disabled","1") + ucic:set("v2ray","main","enabled","0") + ucic:set("xray","main","enabled","0") + ucic:foreach("shadowsocks-libev", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-libev",sectionname,"disabled","1") + end) + ucic:foreach("shadowsocks-rust", "server", function(s) + local sectionname = s[".name"] + ucic:set("shadowsocks-rust",sectionname,"disabled","1") + end) end ucic:set("openmptcprouter","settings","proxy",default_proxy) ucic:save("openmptcprouter") ucic:save("shadowsocks-libev") ucic:save("v2ray") + ucic:save("xray") ucic:foreach("shadowsocks-libev","server", function(s) local sectionname = s[".name"] @@ -744,6 +798,11 @@ function wizard_add() ucic:set("v2ray","omrout","s_vless_address",server_ip) ucic:set("v2ray","omrout","s_trojan_address",server_ip) ucic:set("v2ray","omrout","s_socks_address",server_ip) + ucic:set("xray","omrout","s_vmess_address",server_ip) + ucic:set("xray","omrout","s_vless_address",server_ip) + ucic:set("xray","omrout","s_trojan_address",server_ip) + ucic:set("xray","omrout","s_socks_address",server_ip) + ucic:set("xray","omrout","s_shadowsocks_address",server_ip) luci.sys.call("uci -q del openvpn.omr.remote") luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) ucic:set("qos","serverin","srchost",server_ip) @@ -784,6 +843,11 @@ function wizard_add() ucic:set("v2ray","omrout","s_vless_address",server_ip) ucic:set("v2ray","omrout","s_trojan_address",server_ip) ucic:set("v2ray","omrout","s_socks_address",server_ip) + ucic:set("xray","omrout","s_vmess_address",server_ip) + ucic:set("xray","omrout","s_vless_address",server_ip) + ucic:set("xray","omrout","s_trojan_address",server_ip) + ucic:set("xray","omrout","s_socks_address",server_ip) + ucic:set("xray","omrout","s_shadowsocks_address",server_ip) luci.sys.call("uci -q del openvpn.omr.remote") luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) ucic:set("qos","serverin","srchost",server_ip) @@ -816,6 +880,7 @@ function wizard_add() ucic:save("mlvpn") ucic:save("ubond") ucic:save("v2ray") + ucic:save("xray") --ucic:commit("mlvpn") ucic:save("dsvpn") --ucic:commit("dsvpn") @@ -831,12 +896,19 @@ function wizard_add() ucic:set("openmptcprouter","settings","encryption","none") ucic:set("shadowsocks-libev","sss0","method","none") ucic:set("shadowsocks-libev","sss1","method","none") + ucic:set("shadowsocks-rust","sss0","method","none") + ucic:set("shadowsocks-rust","sss1","method","none") ucic:set("openvpn","omr","cipher","none") ucic:set("mlvpn","general","cleartext_data","1") ucic:set("v2ray","omrout","s_vmess_user_security","none") ucic:set("v2ray","omrout","s_vless_user_security","none") ucic:set("v2ray","omrout","s_trojan_user_security","none") ucic:set("v2ray","omrout","s_socks_user_security","none") + ucic:set("xray","omrout","s_vmess_user_security","none") + ucic:set("xray","omrout","s_vless_user_security","none") + ucic:set("xray","omrout","s_trojan_user_security","none") + ucic:set("xray","omrout","s_socks_user_security","none") + ucic:set("xray","omrout","s_shadowsocks_method","none") elseif encryption == "aes-256-gcm" then ucic:set("openmptcprouter","settings","encryption","aes-256-gcm") ucic:set("shadowsocks-libev","sss0","method","aes-256-gcm") @@ -849,6 +921,13 @@ function wizard_add() ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_trojan_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_socks_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_vmess_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_vless_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_trojan_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_socks_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_shadowsocks_method","2022-blake3-aes-256-gcm") + ucic:set("shadowsocks-rust","sss0","s_shadowsocks_method","2022-blake3-aes-256-gcm") + ucic:set("shadowsocks-rust","sss1","s_shadowsocks_method","2022-blake3-aes-256-gcm") elseif encryption == "aes-256-cfb" then ucic:set("openmptcprouter","settings","encryption","aes-256-cfb") ucic:set("shadowsocks-libev","sss0","method","aes-256-cfb") @@ -861,6 +940,13 @@ function wizard_add() ucic:set("v2ray","omrout","s_vless_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_trojan_user_security","aes-128-gcm") ucic:set("v2ray","omrout","s_socks_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_vmess_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_vless_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_trojan_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_socks_user_security","aes-128-gcm") + ucic:set("xray","omrout","s_shadowsocks_method","2022-blake3-aes-256-gcm") + ucic:set("shadowsocks-rust","sss0","s_shadowsocks_method","2022-blake3-aes-256-gcm") + ucic:set("shadowsocks-rust","sss1","s_shadowsocks_method","2022-blake3-aes-256-gcm") elseif encryption == "chacha20-ietf-poly1305" then ucic:set("openmptcprouter","settings","encryption","chacha20") ucic:set("shadowsocks-libev","sss0","method","chacha20-ietf-poly1305") @@ -873,6 +959,13 @@ function wizard_add() ucic:set("v2ray","omrout","s_vless_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_trojan_user_security","chacha20-poly1305") ucic:set("v2ray","omrout","s_socks_user_security","chacha20-poly1305") + ucic:set("xray","omrout","s_vmess_user_security","chacha20-poly1305") + ucic:set("xray","omrout","s_vless_user_security","chacha20-poly1305") + ucic:set("xray","omrout","s_trojan_user_security","chacha20-poly1305") + ucic:set("xray","omrout","s_socks_user_security","chacha20-poly1305") + ucic:set("xray","omrout","s_shadowsocks_method","2022-blake3-chacha20-poly1305") + ucic:set("shadowsocks-rust","sss0","s_shadowsocks_method","2022-blake3-chacha20-poly1305") + ucic:set("shadowsocks-rust","sss1","s_shadowsocks_method","2022-blake3-chacha20-poly1305") else ucic:set("openmptcprouter","settings","encryption","other") end @@ -881,6 +974,7 @@ function wizard_add() ucic:save("glorytun-udp") ucic:save("shadowsocks-libev") ucic:save("v2ray") + ucic:save("xray") -- Set ShadowSocks settings local shadowsocks_key = luci.http.formvalue("shadowsocks_key") @@ -897,7 +991,7 @@ function wizard_add() ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") if shadowsocks_disable == "1" then - luci.sys.call("/etc/init.d/shadowsocks rules_down >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/shadowsocks-libev rules_down >/dev/null 2>/dev/null") end else if serversnb == 0 then @@ -908,8 +1002,33 @@ function wizard_add() ucic:set("shadowsocks-libev","sss1","key","") ucic:save("shadowsocks-libev") ucic:commit("shadowsocks-libev") - luci.sys.call("/etc/init.d/shadowsocks rules_down >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/shadowsocks-libev rules_down >/dev/null 2>/dev/null") end + -- Set ShadowSocks 2022 settings + local shadowsocks2022_key = luci.http.formvalue("shadowsocks2022_key") + if shadowsocks2022_key ~= "" then + ucic:set("shadowsocks-rust","sss0","password",shadowsocks2022_key) + ucic:set("shadowsocks-rust","sss1","password",shadowsocks2022_key) + ucic:set("xray","omrout","s_shadowsocks_password",shadowsocks2022_key) + ucic:save("shadowsocks-rust") + ucic:commit("shadowsocks-rust") + if shadowsocks_disable == "1" then + luci.sys.call("/etc/init.d/shadowsocks-rust rules_down >/dev/null 2>/dev/null") + end + else + if serversnb == 0 then + ucic:set("shadowsocks-rust","sss0","disabled","1") + ucic:set("shadowsocks-rust","sss1","disabled","1") + end + ucic:set("shadowsocks-rust","sss0","key","") + ucic:set("shadowsocks-rust","sss1","key","") + ucic:set("xray","omrout","s_shadowsocks_password","") + ucic:save("shadowsocks-rust") + ucic:commit("shadowsocks-rust") + luci.sys.call("/etc/init.d/shadowsocks-rust rules_down >/dev/null 2>/dev/null") + end + + local v2ray_user = luci.http.formvalue("v2ray_user") ucic:set("v2ray","omrout","s_vmess_user_id",v2ray_user) ucic:set("v2ray","omrout","s_vless_user_id",v2ray_user) @@ -917,6 +1036,14 @@ function wizard_add() ucic:set("v2ray","omrout","s_socks_user_id",v2ray_user) ucic:save("v2ray") ucic:commit("v2ray") + ucic:set("xray","omrout","s_vmess_user_id",v2ray_user) + ucic:set("xray","omrout","s_vless_user_id",v2ray_user) + ucic:set("xray","omrout","s_trojan_user_id",v2ray_user) + ucic:set("xray","omrout","s_socks_user_id",v2ray_user) + ucic:save("xray") + ucic:commit("xray") + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") -- Set Glorytun settings @@ -1046,6 +1173,8 @@ function wizard_add() ucic:save("v2ray") ucic:commit("v2ray") + ucic:save("xray") + ucic:commit("xray") ucic:save("network") ucic:commit("network") @@ -1086,6 +1215,7 @@ function wizard_add() luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/xray restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/sqm restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/sqm-autorate restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/sysntpd restart >/dev/null 2>/dev/null") @@ -1214,11 +1344,14 @@ function settings_add() local shadowsocksudp = luci.http.formvalue("shadowsocksudp") or "0" ucic:set("openmptcprouter","settings","shadowsocksudp",shadowsocksudp) - -- Enable/disable v2ray udp + -- Enable/disable v2ray/xray udp local v2rayudp = luci.http.formvalue("v2rayudp") or "0" ucic:set("v2ray","main_transparent_proxy","redirect_udp",v2rayudp) ucic:save("v2ray") ucic:commit("v2ray") + ucic:set("xray","main_transparent_proxy","redirect_udp",v2rayudp) + ucic:save("xray") + ucic:commit("xray") -- Enable/disable nDPI local ndpi = luci.http.formvalue("ndpi") or "1" diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm index a7fe51806..1de7df32e 100755 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -292,15 +292,23 @@
- +
checked<% end %>> +
+
+ <%:When proxy shadowsocks is used, use it for UDP if VPN down%> +
- +
checked<% end %>> +
+
+ <%:When proxy V2Ray/XRay VLESS, VMESS or Trojan is used, use it for UDP%> +
diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm index 085bbce00..074224fbc 100755 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -163,6 +163,18 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '
'; } } + if (mArray.openmptcprouter.shadowsocksrust_enabled == true && mArray.openmptcprouter.service_addr != "") + { + if (mArray.openmptcprouter.shadowsocksrust_service == false) + { + statusMessage += '<%:ShadowSocks Rust is not running%>'; + if (mArray.openmptcprouter.shadowsocksrust_service_key == false && mArray.openmptcprouter.shadowsocksrust_service_method !== "none") + { + statusMessage += ' (' + '<%:empty key%>' + ')'; + } + statusMessage += '
'; + } + } if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.service_addr != "") { if (mArray.openmptcprouter.v2ray_service == false) @@ -171,6 +183,14 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusMessage += '
'; } } + if (mArray.openmptcprouter.xray_enabled == true && mArray.openmptcprouter.service_addr != "") + { + if (mArray.openmptcprouter.xray_service == false) + { + statusMessage += '<%:XRay is not running%>'; + statusMessage += '
'; + } + } if (mArray.openmptcprouter.fsro == true) { statusMessage += '<%:Filesystem is readonly%>' + '
'; @@ -194,7 +214,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm statusIcon = "<%=resource%>/openmptcprouter/images/statusError.png"; } else if (mArray.openmptcprouter.service_addr != "") { - if (mArray.openmptcprouter.v2ray_enabled == false && mArray.openmptcprouter.shadowsocks_enabled == false) + if (mArray.openmptcprouter.xray_enabled == false && mArray.openmptcprouter.v2ray_enabled == false && mArray.openmptcprouter.shadowsocks_enabled == false && mArray.openmptcprouter.shadowsocksrust_enabled == false) { statusMessage += '<%:Proxy is DISABLED%>' + '
'; } @@ -285,9 +305,15 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm } else if (mArray.openmptcprouter.shadowsocks_enabled == true && mArray.openmptcprouter.proxy_addr == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:Can\'t get public IP address from ShadowSocks%>' + '
'; + } else if (mArray.openmptcprouter.shadowsocksrust_enabled == true && mArray.openmptcprouter.proxy_addr == "" && mArray.openmptcprouter.external_check == true) + { + statusMessage += '<%:Can\'t get public IP address from ShadowSocks Rust%>' + '
'; } else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.proxy_addr == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '
'; + } else if (mArray.openmptcprouter.xray_enabled == true && mArray.openmptcprouter.proxy_addr == "" && mArray.openmptcprouter.external_check == true) + { + statusMessage += '<%:Can\'t get public IP address from XRay%>' + '
'; } else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.external_check == true) { statusMessage += '<%:No public IP address detected in less than 1 second%>' + '
'; diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 48a7bbba9..5b379e04f 100755 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -227,7 +227,7 @@
<%:Proxy settings%> -
<%:By default proxy is used for any traffic that is TCP (and UDP for V2Ray).%>
+
<%:By default proxy is used for any traffic that is TCP (and UDP for V2Ray/XRay).%>
@@ -237,11 +237,17 @@ <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> <% if nixio.fs.access("/etc/init.d/v2ray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/xray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/xray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/xray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/xray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/xray") then %><% end %> + <% if nixio.fs.access("/etc/init.d/shadowsocks-rust") then %><% end %>
- <%:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray VLESS, VMESS or Trojan is enabled.%> + <%:Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and UDP when V2Ray/XRay VLESS, VMESS or Trojan is enabled.%> <%:Only ShadowSocks is supported with server multiple IPs for now.%>
@@ -258,9 +264,21 @@
<% end %> - <% if nixio.fs.access("/etc/init.d/v2ray") then %> + <% if nixio.fs.access("/etc/init.d/xray") or nixio.fs.access("/etc/init.d/shadowsocks-rust") then %>
- + +
+ " /> +
+
+ <%:Key is retrieved from server API by default.%> <%:ShadowSocks is used for TCP.%> +
+
+
+ <% end %> + <% if nixio.fs.access("/etc/init.d/v2ray") or nixio.fs.access("/etc/init.d/xray") then %> +
+
" />
@@ -284,7 +302,7 @@ %> - + @@ -297,7 +315,7 @@ <% else %> <%:There is no Advanced Encryption Standard (AES) instruction set integrated in the processor, you should use chacha20.%> <% end %> - <%:Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN.%> + <%:Encryption method is used for Shadowsocks, V2Ray/XRay, Glorytun and OpenVPN.%>
diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index 56edc9e66..b7af3d727 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -334,6 +334,10 @@ function server_settings(server,server_ip,openmptcprouter_vps_key) ucic:set("v2ray","omrout","s_vless_address",server_ip) ucic:set("v2ray","omrout","s_socks_address",server_ip) ucic:set("v2ray","omrout","s_trojan_address",server_ip) + ucic:set("xray","omrout","s_vmess_address",server_ip) + ucic:set("xray","omrout","s_vless_address",server_ip) + ucic:set("xray","omrout","s_socks_address",server_ip) + ucic:set("xray","omrout","s_trojan_address",server_ip) ucic:save("qos") ucic:commit("qos") ucic:save("mlvpn") @@ -341,7 +345,9 @@ function server_settings(server,server_ip,openmptcprouter_vps_key) ucic:save("dsvpn") ucic:commit("dsvpn") ucic:save("v2ray") + ucic:save("xray") ucic:commit("v2ray") + ucic:commit("xray") ucic:save("glorytun") ucic:commit("glorytun") ucic:save("shadowsocks-libev") @@ -428,6 +434,7 @@ function restart_all() sys.exec("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null") sys.exec("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") sys.exec("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") + sys.exec("/etc/init.d/xray restart >/dev/null 2>/dev/null") end function redirectports(server,redirect_ports) @@ -822,9 +829,9 @@ function interfaces_status() -- shadowsocksaddr mArray.openmptcprouter["proxy_addr"] = uci:get("openmptcprouter","omr","detected_ss_ipv4") or "" if mArray.openmptcprouter["proxy_addr"] == "" and mArray.openmptcprouter["service_addr"] ~= "" then - tracker_ip = uci:get("shadowsocks-libev","tracker_sss0","local_address") or "" + tracker_ip = uci:get("shadowsocks-libev","tracker_sss0","local_address") or "127.0.0.1" if tracker_ip ~= "" then - local tracker_port = uci:get("shadowsocks-libev","tracker_sss0","local_port") + local tracker_port = uci:get("shadowsocks-libev","tracker_sss0","local_port") or "1111" if mArray.openmptcprouter["external_check"] ~= false then mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website)) if mArray.openmptcprouter["proxy_addr"] == "" then @@ -930,7 +937,16 @@ function interfaces_status() mArray.openmptcprouter["v2ray_traffic_tx"] = "0" mArray.openmptcprouter["v2ray_traffic"] = "0" end - mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"] + if status and vpsinfo.xray ~= nil then + mArray.openmptcprouter["xray_traffic_rx"] = vpsinfo.xray.rx or "0" + mArray.openmptcprouter["xray_traffic_tx"] = vpsinfo.xray.tx or "0" + mArray.openmptcprouter["xray_traffic"] = mArray.openmptcprouter["xray_traffic_tx"] + mArray.openmptcprouter["xray_traffic_rx"] + else + mArray.openmptcprouter["xray_traffic_rx"] = "0" + mArray.openmptcprouter["xray_traffic_tx"] = "0" + mArray.openmptcprouter["xray_traffic"] = "0" + end + mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"] + mArray.openmptcprouter["xray_traffic"] mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"] else mArray.openmptcprouter["vps_admin"] = false @@ -1048,6 +1064,11 @@ function interfaces_status() if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then mArray.openmptcprouter["shadowsocks_service"] = true end + -- check Shadowsocks Rust is running + mArray.openmptcprouter["shadowsocksrust_service"] = false + if string.find(sys.exec("/usr/bin/pgrep sslocal"), "%d+") then + mArray.openmptcprouter["shadowsocksrust_service"] = true + end mArray.openmptcprouter["shadowsocks_enabled"] = true local ss_server = "1" @@ -1061,6 +1082,18 @@ function interfaces_status() mArray.openmptcprouter["shadowsocks_enabled"] = false end + mArray.openmptcprouter["shadowsocksrust_enabled"] = true + local ss_server = "1" + ucic:foreach("shadowsocks-rust", "server", function(s) + local ss_server_disabled = uci:get("shadowsocks-rust",s[".name"],"disabled") or "0" + if ss_server_disabled == "0" then + ss_server = "0" + end + end) + if ss_server == "1" then + mArray.openmptcprouter["shadowsocksrust_enabled"] = false + end + -- check V2Ray is running mArray.openmptcprouter["v2ray_service"] = false if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then @@ -1071,6 +1104,16 @@ function interfaces_status() if v2ray == "1" then mArray.openmptcprouter["v2ray_enabled"] = true end + -- check XRay is running + mArray.openmptcprouter["xray_service"] = false + if string.find(sys.exec("/usr/bin/pgrep xray"), "%d+") then + mArray.openmptcprouter["xray_service"] = true + end + mArray.openmptcprouter["xray_enabled"] = false + local xray = uci:get("xray","main","enabled") or "0" + if xray == "1" then + mArray.openmptcprouter["xray_enabled"] = true + end local ss_key = uci:get("shadowsocks-libev","sss0","key") or "" mArray.openmptcprouter["shadowsocks_service_method"] = uci:get("shadowsocks-libev","sss0","method") if ss_key == "" then @@ -1078,6 +1121,13 @@ function interfaces_status() else mArray.openmptcprouter["shadowsocks_service_key"] = true end + local ssr_key = uci:get("shadowsocks-rust","sss0","key") or "" + mArray.openmptcprouter["shadowsocksrust_service_method"] = uci:get("shadowsocks-rust","sss0","method") + if ssr_key == "" then + mArray.openmptcprouter["shadowsocksrust_service_key"] = false + else + mArray.openmptcprouter["shadowsocksrust_service_key"] = true + end -- Add DHCP infos by parsing dnsmasq config file mArray.openmptcprouter.dhcpd = {} diff --git a/luci-app-shadowsocks-rust/Makefile b/luci-app-shadowsocks-rust/Makefile new file mode 100644 index 000000000..2a9bc5180 --- /dev/null +++ b/luci-app-shadowsocks-rust/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2019-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for shadowsocks-rust +LUCI_DEPENDS:=+luci-compat + +PKG_LICENSE:=Apache-2.0 +PKG_VERSION:=omr-202309 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js new file mode 100644 index 000000000..2c9ac0684 --- /dev/null +++ b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js @@ -0,0 +1,294 @@ +'use strict'; +'require baseclass'; +'require uci'; +'require form'; +'require network'; + +var names_options_server = [ + 'server', + 'server_port', + 'method', + 'password', + 'plugin', + 'plugin_opts', +]; + +var names_options_client = [ + 'server', + 'local_address', + 'local_port', +]; + +var names_options_common = [ + 'verbose', + 'ipv6_first', + 'fast_open', + 'no_delay', + 'reuse_port', + 'mode', + 'mtu', + 'timeout', + 'user', + 'mptcp', +]; + +var modes = [ + 'tcp_only', + 'tcp_and_udp', + 'udp_only', +]; + +var methods = [ + 'none', + // aead + 'aes-128-gcm', + 'aes-256-gcm', + 'chacha20-ietf-poly1305', + '2022-blake3-aes-128-gcm', + '2022-blake3-aes-256-gcm', + '2022-blake3-chacha8-poly1305', + '2022-blake3-chacha20-poly1305', +]; + +function ucival_to_bool(val) { + return val === 'true' || val === '1' || val === 'yes' || val === 'on'; +} + +return L.Class.extend({ + values_actions: function(o) { + o.value('bypass'); + o.value('forward'); + if (o.option !== 'dst_default') { + o.value('checkdst'); + } + }, + values_redir: function(o, xmode) { + uci.sections('shadowsocks-rust', 'ss_redir', function(sdata) { + var disabled = ucival_to_bool(sdata['disabled']), + sname = sdata['.name'], + mode = sdata['mode'] || 'tcp_only'; + if (!disabled && mode.indexOf(xmode) !== -1) { + o.value(sname, sname + ' - ' + mode); + } + }); + o.value('', ''); + o.value('all', 'all'); + o.default = ''; + }, + values_serverlist: function(o) { + uci.sections('shadowsocks-rust', 'server', function(sdata) { + var sname = sdata['.name'], + server = sdata['server'], + server_port = sdata['server_port']; + if (server && server_port) { + var disabled = ucival_to_bool(sdata['.disabled']) ? ' - disabled' : '', + desc = '%s - %s:%s%s'.format(sname, server, server_port, disabled); + o.value(sname, desc); + } + }); + }, + values_ipaddr: function(o, netDevs) { + netDevs.forEach(function(v) { + v.getIPAddrs().forEach(function(a) { + var host = a.split('/')[0]; + o.value(host, '%s (%s)'.format(host, v.getShortName())); + }); + }); + }, + options_client: function(s, tab, netDevs) { + var o = s.taboption(tab, form.ListValue, 'server', _('Remote server')); + this.values_serverlist(o); + o = s.taboption(tab, form.Value, 'local_address', _('Local address')); + o.datatype = 'ipaddr'; + o.placeholder = '0.0.0.0'; + this.values_ipaddr(o, netDevs); + o = s.taboption(tab, form.Value, 'local_port', _('Local port')); + o.datatype = 'port'; + }, + options_server: function(s, opts) { + var o, optfunc, + tab = opts && opts.tab || null; + + if (!tab) { + optfunc = function(/* ... */) { + var o = s.option.apply(s, arguments); + o.editable = true; + return o; + }; + } else { + optfunc = function(/* ... */) { + var o = s.taboption.apply(s, L.varargs(arguments, 0, tab)); + o.editable = true; + return o; + }; + } + + o = optfunc(form.Value, 'label', _('Label')); + + o = optfunc(form.Value, 'server', _('Server')); + o.datatype = 'host'; + o.size = 16; + + o = optfunc(form.Value, 'server_port', _('Server port')); + o.datatype = 'port'; + o.size = 5; + + o = optfunc(form.ListValue, 'method', _('Method')); + methods.forEach(function(m) { + o.value(m); + }); + + o = optfunc(form.Value, 'password', _('Password (Base64)')); + o.datatype = 'base64'; + o.password = true; + o.size = 12; + + optfunc(form.Value, 'plugin', _('Plugin')).modalonly = true; + + optfunc(form.Value, 'plugin_opts', _('Plugin Options')).modalonly = true; + }, + options_common: function(s, tab) { + var o = s.taboption(tab, form.ListValue, 'mode', _('Mode of operation')); + modes.forEach(function(m) { + o.value(m); + }); + o.default = 'tcp_and_udp'; + o = s.taboption(tab, form.Value, 'mtu', _('MTU')); + o.datatype = 'uinteger'; + o = s.taboption(tab, form.Value, 'timeout', _('Timeout (sec)')); + o.datatype = 'uinteger'; + s.taboption(tab, form.Value, 'user', _('Run as')); + + s.taboption(tab, form.Flag, 'verbose', _('Verbose')); + s.taboption(tab, form.Flag, 'ipv6_first', _('IPv6 First'), _('Prefer IPv6 addresses when resolving names')); + s.taboption(tab, form.Flag, 'fast_open', _('Enable TCP Fast Open')); + s.taboption(tab, form.Flag, 'no_delay', _('Enable TCP_NODELAY')); + s.taboption(tab, form.Flag, 'reuse_port', _('Enable SO_REUSEPORT')); + s.taboption(tab, form.Flag, 'mptcp', _('Enable MPTCP')); + }, + ucival_to_bool: function(val) { + return ucival_to_bool(val); + }, + cfgvalue_overview: function(sdata) { + var stype = sdata['.type'], + lines = []; + + if (stype === 'ss_server') { + this.cfgvalue_overview_(sdata, lines, names_options_server); + this.cfgvalue_overview_(sdata, lines, names_options_common); + this.cfgvalue_overview_(sdata, lines, ['bind_address']); + } else if (stype === 'ss_local' || stype === 'ss_redir' || stype === 'ss_tunnel') { + this.cfgvalue_overview_(sdata, lines, names_options_client); + if (stype === 'ss_tunnel') { + this.cfgvalue_overview_(sdata, lines, ['tunnel_address']); + } + this.cfgvalue_overview_(sdata, lines, names_options_common); + } else { + return []; + } + + return lines; + }, + cfgvalue_overview_: function(sdata, lines, names) { + names.forEach(function(n) { + var v = sdata[n]; + if (v) { + if (n === 'password') { + v = _(''); + } + var fv = E('var', [v]); + if (sdata['.type'] !== 'ss_server' && n === 'server') { + fv = E('a', { + class: 'label', + href: L.url('admin/services/shadowsocks-rust/servers') + '#edit=' + v, + target: '_blank', + rel: 'noopener' + }, fv); + } + lines.push(n + ': ', fv, E('br')); + } + }); + }, + option_install_package: function(s, tab) { + var bin = s.sectiontype.replace('_', '-'), + opkg_package = 'shadowsocks-rust-' + bin, o; + if (tab) { + o = s.taboption(tab, form.Button, '_install'); + } else { + o = s.option(form.Button, '_install'); + } + o.title = _('Package is not installed'); + o.inputtitle = _('Install package ' + opkg_package); + o.inputstyle = 'apply'; + o.onclick = function() { + window.open(L.url('admin/system/opkg') + + '?query=' + opkg_package, '_blank', 'noopener'); + }; + }, + parse_uri: function(uri) { + var scheme = 'ss://'; + if (uri && uri.indexOf(scheme) === 0) { + var atPos = uri.indexOf('@'), hashPos = uri.lastIndexOf('#'), tag; + if (hashPos === -1) { + hashPos = undefined; + } else { + tag = uri.slice(hashPos + 1); + } + + if (atPos !== -1) { // SIP002 format https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html + var colonPos = uri.indexOf(':', atPos + 1), slashPos = uri.indexOf('/', colonPos + 1); + if (colonPos === -1) return null; + if (slashPos === -1) slashPos = undefined; + + var userinfo = atob(uri.slice(scheme.length, atPos) + .replace(/-/g, '+').replace(/_/g, '/')), + i = userinfo.indexOf(':'); + if (i === -1) return null; + + var config = { + server: uri.slice(atPos + 1, colonPos), + server_port: uri.slice(colonPos + 1, slashPos ? slashPos : hashPos), + password: userinfo.slice(i + 1), + method: userinfo.slice(0, i) + }; + + if (slashPos) { + var search = uri.slice(slashPos + 1, hashPos); + if (search[0] === '?') search = search.slice(1); + search.split('&').forEach(function(s) { + var j = s.indexOf('='); + if (j !== -1) { + var k = s.slice(0, j), v = s.slice(j + 1); + if (k === 'plugin') { + v = decodeURIComponent(v); + var k = v.indexOf(';'); + if (k !== -1) { + config['plugin'] = v.slice(0, k); + config['plugin_opts'] = v.slice(k + 1); + } + } + } + }); + } + return [config, tag]; + } else { // Legacy format https://shadowsocks.org/en/config/quick-guide.html + var plain = atob(uri.slice(scheme.length, hashPos)), + firstColonPos = plain.indexOf(':'), + lastColonPos = plain.lastIndexOf(':'), + atPos = plain.lastIndexOf('@', lastColonPos); + if (firstColonPos === -1 || + lastColonPos === -1 || + atPos === -1) return null; + + var config = { + server: plain.slice(atPos + 1, lastColonPos), + server_port: plain.slice(lastColonPos + 1), + password: plain.slice(firstColonPos + 1, atPos), + method: plain.slice(0, firstColonPos) + }; + return [config, tag]; + } + } + return null; + } +}); diff --git a/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js new file mode 100644 index 000000000..66b18163d --- /dev/null +++ b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js @@ -0,0 +1,163 @@ +'use strict'; +'require form'; +'require uci'; +'require fs'; +'require network'; +'require rpc'; +'require shadowsocks-rust as ss'; + +var conf = 'shadowsocks-rust'; +var cfgtypes = ['ss_local', 'ss_redir', 'ss_server', 'ss_tunnel']; + +var callServiceList = rpc.declare({ + object: 'service', + method: 'list', + params: [ 'name' ], + expect: { '': {} } +}); + +return L.view.extend({ + render: function(stats) { + var m, s, o; + + m = new form.Map(conf, + _('Local Instances'), + _('Instances of shadowsocks-rust components, e.g. ss-local, \ + ss-redir, ss-tunnel, ss-server, etc. To enable an instance it \ + is required to enable both the instance itself and the remote \ + server it refers to.')); + + s = m.section(form.GridSection); + s.addremove = true; + s.cfgsections = function() { + return this.map.data.sections(this.map.config) + .filter(function(s) { return cfgtypes.indexOf(s['.type']) !== -1; }) + .map(function(s) { return s['.name']; }); + }; + s.sectiontitle = function(section_id) { + var s = uci.get(conf, section_id); + return (s ? s['.type'] + '.' : '') + section_id; + }; + s.renderSectionAdd = function(extra_class) { + var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments), + optionEl = [E('option', { value: '_dummy' }, [_('-- instance type --')])]; + cfgtypes.forEach(function(t) { + optionEl.push(E('option', { value: t }, [t.replace('_', '-')])); + }); + var selectEl = E('select', { + class: 'cbi-input-select', + change: function(ev) { + ev.target.parentElement.nextElementSibling.nextElementSibling + .toggleAttribute('disabled', ev.target.value === '_dummy'); + } + }, optionEl); + el.lastElementChild.setAttribute('disabled', ''); + el.prepend(E('div', {}, selectEl)); + return el; + }; + s.handleAdd = function(ev, name) { + var selectEl = ev.target.parentElement.firstElementChild.firstElementChild, + type = selectEl.value; + this.sectiontype = type; + var promise = form.GridSection.prototype.handleAdd.apply(this, arguments); + this.sectiontype = undefined; + return promise; + }; + s.addModalOptions = function(s, section_id, ev) { + var sdata = uci.get(conf, section_id), + stype = sdata ? sdata['.type'] : null; + if (stype) { + s.sectiontype = stype; + return Promise.all([ + L.resolveDefault(fs.stat('/usr/bin/' + stype.replace('_', '-')), null), + network.getDevices() + ]).then(L.bind(function(res) { + s.tab('general', _('General Settings')); + s.tab('advanced', _('Advanced Settings')); + s.taboption('general', form.Value, 'label', _('Label')); + s.taboption('general', form.Flag, 'disabled', _('Disable')); + if (!res[0]) { + ss.option_install_package(s, 'general'); + } + ss.options_common(s, 'advanced'); + + if (stype === 'ss_server') { + ss.options_server(s, { tab: 'general' }); + o = s.taboption('general', form.Value, 'bind_address', + _('Bind address'), + _('The address ss-server will initiate connection from')); + o.datatype = 'ipaddr'; + o.placeholder = '0.0.0.0'; + ss.values_ipaddr(o, res[1]); + } else { + ss.options_client(s, 'general', res[1]); + if (stype === 'ss_tunnel') { + o = s.taboption('general', form.Value, 'tunnel_address', + _('Tunnel address'), + _('The address ss-tunnel will forward traffic to')); + o.datatype = 'hostport'; + } + } + }, this)); + } + }; + + o = s.option(form.DummyValue, 'overview', _('Overview')); + o.modalonly = false; + o.editable = true; + o.rawhtml = true; + o.renderWidget = function(section_id, option_index, cfgvalue) { + var sdata = uci.get(conf, section_id); + if (sdata) { + return form.DummyValue.prototype.renderWidget.call(this, section_id, option_index, ss.cfgvalue_overview(sdata)); + } + return null; + }; + + o = s.option(form.DummyValue, 'running', _('Running')); + o.modalonly = false; + o.editable = true; + o.default = ''; + + o = s.option(form.Button, 'disabled', _('Enable/Disable')); + o.modalonly = false; + o.editable = true; + o.inputtitle = function(section_id) { + var s = uci.get(conf, section_id); + if (ss.ucival_to_bool(s['disabled'])) { + this.inputstyle = 'reset'; + return _('Disabled'); + } + this.inputstyle = 'save'; + return _('Enabled'); + } + o.onclick = function(ev) { + var inputEl = ev.target.parentElement.nextElementSibling; + inputEl.value = ss.ucival_to_bool(inputEl.value) ? '0' : '1'; + return this.map.save(); + } + + return m.render().finally(function() { + L.Poll.add(function() { + return L.resolveDefault(callServiceList(conf), {}) + .then(function(res) { + var instances = null; + try { + instances = res[conf]['instances']; + } catch (e) {} + if (!instances) return; + uci.sections(conf) + .filter(function(s) { return cfgtypes.indexOf(s['.type']) !== -1; }) + .forEach(function(s) { + var el = document.getElementById('cbi-shadowsocks-rust-' + s['.name'] + '-running'); + if (el) { + var name = s['.type'] + '.' + s['.name'], + running = instances.hasOwnProperty(name)? instances[name].running : false; + el.innerText = running ? 'yes' : 'no'; + } + }); + }); + }); + }); + }, +}); diff --git a/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js new file mode 100644 index 000000000..26aa47fd2 --- /dev/null +++ b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js @@ -0,0 +1,141 @@ +'use strict'; +'require view'; +'require uci'; +'require fs'; +'require form'; +'require tools.widgets as widgets'; +'require shadowsocks-rust as ss'; + +var conf = 'shadowsocks-rust'; +var cfgtypes = ['ss_rules']; + +function src_dst_option(s /*, ... */) { + var o = s.taboption.apply(s, L.varargs(arguments, 1)); + o.datatype = 'or(ipaddr,cidr)'; +} + +return L.view.extend({ + load: function() { + return Promise.all([ + L.resolveDefault(fs.stat('/usr/lib/iptables/libxt_recent.so'), {}), + L.resolveDefault(fs.stat('/usr/bin/ss-rules'), null), + uci.load(conf).then(function() { + if (!uci.get_first(conf, 'ss_rules')) { + uci.set(conf, uci.add(conf, 'ss_rules', 'ss_rules'), 'disabled', '1'); + } + }) + ]); + }, + render: function(stats) { + var m, s, o; + + m = new form.Map(conf, _('Redir Rules'), + _('On this page you can configure how traffics are to be \ + forwarded to ss-redir instances. \ + If enabled, packets will first have their src ip addresses checked \ + against Src ip/net bypass, Src ip/net forward, \ + Src ip/net checkdst and if none matches Src default \ + will give the default action to be taken. \ + If the prior check results in action checkdst, packets will continue \ + to have their dst addresses checked.')); + + s = m.section(form.GridSection); + s.addremove = true; + s.addbtntitle = _('Add a new rule...'); + s.cfgsections = function() { + return this.map.data.sections(this.map.config) + .filter(function(s) { return cfgtypes.indexOf(s['.type']) !== -1; }) + .map(function(s) { return s['.name']; }); + }; + s.tab('general', _('General Settings')); + s.tab('src', _('Source Settings')); + s.tab('dst', _('Destination Settings')); + s.sectiontype = 'ss_rules'; + + s.addModalOptions = function(s, section_id, ev) { + s.taboption('general', form.Flag, 'disabled', _('Disable')); + s.taboption('general', form.Value, 'label', _('Label')); + + //o = s.taboption('general', form.ListValue, 'server', _('server')); + //ss.values_serverlist(o, ''); + o = s.taboption('general', form.ListValue, 'redir_tcp', + _('ss-redir for TCP')); + ss.values_redir(o, 'tcp'); + o = s.taboption('general', form.ListValue, 'redir_udp', + _('ss-redir for UDP')); + ss.values_redir(o, 'udp'); + + o = s.taboption('general', form.ListValue, 'local_default', + _('Local-out default'), + _('Default action for locally generated TCP packets')); + ss.values_actions(o); + o = s.taboption('general', widgets.DeviceSelect, 'ifnames', + _('Ingress interfaces'), + _('Only apply rules on packets from these network interfaces')); + o.multiple = true; + o.noaliases = true; + o.noinactive = true; + s.taboption('general', form.Value, 'ipt_args', + _('Extra arguments'), + _('Passes additional arguments to iptables. Use with care!')); + + src_dst_option(s, 'src', form.DynamicList, 'src_ips_bypass', + _('Src ip/net bypass'), + _('Bypass ss-redir for packets with src address in this list')); + src_dst_option(s, 'src', form.DynamicList, 'src_ips_forward', + _('Src ip/net forward'), + _('Forward through ss-redir for packets with src address in this list')); + src_dst_option(s, 'src', form.DynamicList, 'src_ips_checkdst', + _('Src ip/net checkdst'), + _('Continue to have dst address checked for packets with src address in this list')); + o = s.taboption('src', form.ListValue, 'src_default', + _('Src default'), + _('Default action for packets whose src address do not match any of the src ip/net list')); + ss.values_actions(o); + + src_dst_option(s, 'dst', form.DynamicList, 'dst_ips_bypass', + _('Dst ip/net bypass'), + _('Bypass ss-redir for packets with dst address in this list')); + src_dst_option(s, 'dst', form.DynamicList, 'dst_ips_forward', + _('Dst ip/net forward'), + _('Forward through ss-redir for packets with dst address in this list')); + + var dir = '/etc/shadowsocks-rust'; + o = s.taboption('dst', form.FileUpload, 'dst_ips_bypass_file', + _('Dst ip/net bypass file'), + _('File containing ip/net for the purposes as with Dst ip/net bypass')); + o.root_directory = dir; + o = s.taboption('dst', form.FileUpload, 'dst_ips_forward_file', + _('Dst ip/net forward file'), + _('File containing ip/net for the purposes as with Dst ip/net forward')); + o.root_directory = dir; + o = s.taboption('dst', form.ListValue, 'dst_default', + _('Dst default'), + _('Default action for packets whose dst address do not match any of the dst ip list')); + ss.values_actions(o); + + o = s.taboption('dst', form.Flag, 'dst_forward_recentrst'); + o.title = _('Forward recentrst'); + o.description = _('Forward those packets whose dst have recently sent to us multiple tcp-rst'); + }; + + o = s.option(form.Button, 'disabled', _('Enable/Disable')); + o.modalonly = false; + o.editable = true; + o.inputtitle = function(section_id) { + var s = uci.get(conf, section_id); + if (ss.ucival_to_bool(s['disabled'])) { + this.inputstyle = 'reset'; + return _('Disabled'); + } + this.inputstyle = 'save'; + return _('Enabled'); + }; + o.onclick = function(ev) { + var inputEl = ev.target.parentElement.nextElementSibling; + inputEl.value = ss.ucival_to_bool(inputEl.value) ? '0' : '1'; + return this.map.save(); + }; + return m.render(); + }, +}); diff --git a/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js new file mode 100644 index 000000000..f053ca667 --- /dev/null +++ b/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js @@ -0,0 +1,82 @@ +'use strict'; +'require form'; +'require uci'; +'require ui'; +'require shadowsocks-rust as ss'; + +var conf = 'shadowsocks-rust'; + +return L.view.extend({ + render: function() { + var m, s, o; + + m = new form.Map(conf, _('Remote Servers'), + _('Definition of remote shadowsocks servers. \ + Disable any of them will also disable instances referring to it.')); + + s = m.section(form.GridSection, 'server'); + s.addremove = true; + s.handleLinkImport = function() { + var textarea = new ui.Textarea(); + ui.showModal(_('Import Links'), [ + textarea.render(), + E('div', { class: 'right' }, [ + E('button', { + class: 'btn', + click: ui.hideModal + }, [ _('Cancel') ]), + ' ', + E('button', { + class: 'btn cbi-button-action', + click: ui.createHandlerFn(this, function() { + textarea.getValue().split('\n').forEach(function(s) { + var config = ss.parse_uri(s); + if (config) { + var tag = config[1]; + if (tag && !tag.match(/^[a-zA-Z0-9_]+$/)) tag = null; + var sid = uci.add(conf, 'server', tag); + config = config[0]; + Object.keys(config).forEach(function(k) { + uci.set(conf, sid, k, config[k]); + }); + } + }); + return uci.save() + .then(L.bind(this.map.load, this.map)) + .then(L.bind(this.map.reset, this.map)) + .then(L.ui.hideModal) + .catch(function() {}); + }) + }, [ _('Import') ]) + ]) + ]); + }; + s.renderSectionAdd = function(extra_class) { + var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments); + el.appendChild(E('button', { + 'class': 'cbi-button cbi-button-add', + 'title': _('Import Links'), + 'click': ui.createHandlerFn(this, 'handleLinkImport') + }, [ _('Import Links') ])); + return el; + }; + + o = s.option(form.Flag, 'disabled', _('Disable')); + o.editable = true; + + ss.options_server(s); + + return m.render(); + }, + addFooter: function() { + var p = '#edit='; + if (location.hash.indexOf(p) === 0) { + var section_id = location.hash.substring(p.length); + var editBtn = document.querySelector('#cbi-shadowsocks-rust-' + section_id + ' button.cbi-button-edit'); + if (editBtn) + editBtn.click(); + } + //return this.super('addFooter', arguments); + return null; + } +}); diff --git a/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua b/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua new file mode 100644 index 000000000..fce506149 --- /dev/null +++ b/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua @@ -0,0 +1,22 @@ +-- Copyright 2017 Yousong Zhou +-- Licensed to the public under the Apache License 2.0. +-- +module("luci.controller.shadowsocks-rust", package.seeall) + +function index() + entry({"admin", "services", "shadowsocks-rust"}, + alias("admin", "services", "shadowsocks-rust", "instances"), + _("Shadowsocks-rust"), 59) + + entry({"admin", "services", "shadowsocks-rust", "instances"}, + view("shadowsocks-rust/instances"), + _("Local Instances"), 10).leaf = true + + entry({"admin", "services", "shadowsocks-rust", "servers"}, + view("shadowsocks-rust/servers"), + _("Remote Servers"), 20).leaf = true + + entry({"admin", "services", "shadowsocks-rust", "rules"}, + view("shadowsocks-rust/rules"), + _("Redir Rules"), 30).leaf = true +end diff --git a/luci-app-shadowsocks-rust/po/bg/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/bg/shadowsocks-rust.po new file mode 100644 index 000000000..a2af6b1c1 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/bg/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: bg\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ca/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ca/shadowsocks-rust.po new file mode 100644 index 000000000..94c06d5e2 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ca/shadowsocks-rust.po @@ -0,0 +1,336 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-25 18:01+0000\n" +"Last-Translator: Adolfo Jayme Barrientos \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Activat" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Visió de conjunt" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Contrasenya" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Name" +#~ msgstr "Nom" diff --git a/luci-app-shadowsocks-rust/po/cs/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/cs/shadowsocks-rust.po new file mode 100644 index 000000000..d1e7a4df7 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/cs/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: cs\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/de/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/de/shadowsocks-rust.po new file mode 100644 index 000000000..8091ca1a9 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/de/shadowsocks-rust.po @@ -0,0 +1,341 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-11-05 01:57+0000\n" +"Last-Translator: Paul Spooren \n" +"Language-Team: German \n" +"Language: de\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Deaktivieren" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Deaktiviert" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Aktivieren/Deaktivieren" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Aktiviert" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Zusätzliche Argumente" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Übersicht" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Gibt zusätzliche Kommandozeilenargumente an iptables weiter. Mit Vorsicht " +"benutzen!" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Passwort" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Server" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Hinzufügen" + +#~ msgid "Name" +#~ msgstr "Name" diff --git a/luci-app-shadowsocks-rust/po/el/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/el/shadowsocks-rust.po new file mode 100644 index 000000000..7b4a7e212 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/el/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: el\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/en/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/en/shadowsocks-rust.po new file mode 100644 index 000000000..c18e1b221 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/en/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: en\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/es/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/es/shadowsocks-rust.po new file mode 100644 index 000000000..634997d5c --- /dev/null +++ b/luci-app-shadowsocks-rust/po/es/shadowsocks-rust.po @@ -0,0 +1,373 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2019-11-13 23:06+0000\n" +"Last-Translator: Franco Castillo \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "-- tipo de instancia --" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "Dirección de enlace" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "Omitir ss-redir para paquetes con dirección dst en esta lista" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "Omitir ss-redir para paquetes con dirección src en esta lista" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" +"Continuar con la verificación de la dirección dst para paquetes con " +"dirección src en esta lista" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "Acción predeterminada para paquetes TCP generados localmente" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" +"Acción predeterminada para paquetes cuya dirección dst no coincide con " +"ninguna de la lista dst ip" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" +"Acción predeterminada para paquetes cuya dirección src no coincide con " +"ninguna de la lista src ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" +"Definición de servidores shadowsocks remotos. Deshabilitar cualquiera de " +"ellos también deshabilitará las instancias que lo refieran." + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "Configuración de destino" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Desactivar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Desactivado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "Dst predeterminado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "Omitir Dst ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "Omitir archivo Dst ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "Reenviar Dst ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "Reenviar archivo Dst ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "Activar SO_REUSEPORT" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "Activar TCP Fast Open" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "Activar TCP_NODELAY" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Activar/Desactivar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Activado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Argumentos extra" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" +"Archivo que contiene ip/net para los fines como con Omitir Dst ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" +"Archivo que contiene ip / net para los fines como con Reenviar Dst ip/" +"net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "Reenviar recentrst" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" +"Reenviar aquellos paquetes cuyos archivos dst nos hayan enviado " +"recientemente múltiples tcp-rst" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" +"Reenviar a través de ss-redir para paquetes con dirección dst en esta lista" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" +"Reenviar a través de ss-redir para paquetes con dirección src en esta lista" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Configuración general" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "IPv6 primero" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "Interfaces de ingreso" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "Instalar paquete" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "Instalar el paquete iptables-mod-conntrack-extra" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" +"Instancias de componentes de shadowsocks-rust, ej. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. Para habilitar una instancia, se requiere habilitar " +"tanto la instancia como el servidor remoto al que hace referencia." + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "Clave (base64)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "Instancias locales" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "Dirección local" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "Puerto local" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "Salida local predeterminada" + +# Maximum Transmission Unit +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "Método" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "Modo de operación" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" +"En esta página puede configurar cómo se reenviará el tráfico a las " +"instancias de ss-redir. Si están habilitados, los paquetes tendrán primero " +"sus direcciones src ip verificadas con Omitir Src ip / net, " +"Reenviar Src ip / net, Src ip / net checkdst y si ninguno " +"coincide con Src predeterminado dará la acción predeterminada que " +"se debe realizar. Si la verificación anterior resulta en la acción " +"checkdst, los paquetes continuarán teniendo sus direcciones dst " +"marcadas." + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "Solo aplicar reglas en paquetes desde estas interfaces de red" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Vista general" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "Paquete no instalado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Pasa argumentos adicionales a iptables. ¡Utilícelo con cuidado!" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Contraseña" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "Plugin" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "Opciones de plugin" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "Preferir direcciones IPv6 al resolver nombres" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "Reglas de redireccionamiento" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "Servidores remotos" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "Servidor remoto" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "Correr como" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "Corriendo" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Servidor" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "Puerto del servidor" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "Shadowsocks-rust" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "Configuración de fuente" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "Src predeterminado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "Omitir Src ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "Src ip/net checkdst" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "Reenviar Src ip/net" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "La dirección ss-server iniciará la conexión desde" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "La dirección ss-tunnel reenviará el tráfico a" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "Tiempo de espera (seg)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "Direccion del tunel" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "Verbosidad" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "ss-redir para TCP" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "ss-redir para UDP" + +#~ msgid "Add" +#~ msgstr "Añadir" + +#~ msgid "Install package %q" +#~ msgstr "Instalar paquete %q" + +#~ msgid "Name" +#~ msgstr "Nombre" diff --git a/luci-app-shadowsocks-rust/po/fr/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/fr/shadowsocks-rust.po new file mode 100644 index 000000000..6e1941062 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/fr/shadowsocks-rust.po @@ -0,0 +1,346 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-24 13:55+0000\n" +"Last-Translator: Nathan \n" +"Language-Team: French \n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.9.1-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +#, fuzzy +msgid "Bind address" +msgstr "Adresse de liaison" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "Action par défaut pour les paquets TCP générés localement" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "Paramètres de destination" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Désactiver" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Désactivé" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "Activer SO_REUSEPORT" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "Activer TCP_NODELAY" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Activer/Désactiver" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Activé" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Arguments supplémentaires" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Paramètres généraux" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "IPv6 en priorité" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "Interfaces d'entrée" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "Clé (base64)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "Instances locales" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "Adresse locale" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "Port local" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "Méthode" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "Mode de fonctionnement" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" +"Appliquer les règles uniquement sur les paquets de ces interfaces réseau" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Vue d'ensemble" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "Le paquet n'est pas installé" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Passe des arguments supplémentaires aux tables d'adresses IP. A utiliser " +"avec précaution !" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Mot de passe" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "Plugin" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "Options de plugin" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "Préférer les adresses IPv6 lors de la résolution des noms" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "Règles de redirection" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "Serveurs distants" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "Serveur distant" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "Exécuter comme" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "En cours d'exécution" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Serveur" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "Port serveur" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "Délai d'attente (s)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "Adresse du tunnel" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "Verbeux" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Ajouter" + +#~ msgid "Install package %q" +#~ msgstr "Installer le paquet %q" + +#~ msgid "Name" +#~ msgstr "Nom" diff --git a/luci-app-shadowsocks-rust/po/he/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/he/shadowsocks-rust.po new file mode 100644 index 000000000..17ad865d1 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/he/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: he\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/hi/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/hi/shadowsocks-rust.po new file mode 100644 index 000000000..ffcad7bbd --- /dev/null +++ b/luci-app-shadowsocks-rust/po/hi/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: hi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/hu/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/hu/shadowsocks-rust.po new file mode 100644 index 000000000..eaa18b7f1 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/hu/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: hu\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/it/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/it/shadowsocks-rust.po new file mode 100644 index 000000000..dacd912f6 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/it/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: it\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ja/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ja/shadowsocks-rust.po new file mode 100644 index 000000000..54b2cc42c --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ja/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: ja\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ko/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ko/shadowsocks-rust.po new file mode 100644 index 000000000..4eeec8b74 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ko/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: ko\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ms/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ms/shadowsocks-rust.po new file mode 100644 index 000000000..3a6469ab7 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ms/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: ms\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/nb_NO/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/nb_NO/shadowsocks-rust.po new file mode 100644 index 000000000..9520f8dae --- /dev/null +++ b/luci-app-shadowsocks-rust/po/nb_NO/shadowsocks-rust.po @@ -0,0 +1,333 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-30 03:22+0000\n" +"Last-Translator: Allan Nordhøy \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb_NO\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Påskrudd" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/pl/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/pl/shadowsocks-rust.po new file mode 100644 index 000000000..d44593cd9 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/pl/shadowsocks-rust.po @@ -0,0 +1,335 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-11-17 11:07+0000\n" +"Last-Translator: Marcin Net \n" +"Language-Team: Polish \n" +"Language: pl\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Wyłącz" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Wyłączone" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Włącz/Wyłącz" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Włączone" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Dodatkowe argumenty" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Ustawienia główne" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Przegląd" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Przekazuje dodatkowe argumenty do iptables. Zachowaj szczególną ostrożność!" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Hasło" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Serwer" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "Port serwera" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/pt/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/pt/shadowsocks-rust.po new file mode 100644 index 000000000..e6f9a8dae --- /dev/null +++ b/luci-app-shadowsocks-rust/po/pt/shadowsocks-rust.po @@ -0,0 +1,339 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-11-02 16:07+0000\n" +"Last-Translator: ssantos \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Desativar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Desativado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Ativar/Desativar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Ativado" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Argumentos adicionais" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Configurações Gerais" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Visão Geral" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Passa argumentos adicionais para o iptables. Usar com cuidado!" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Palavra-passe" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Servidor" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "Porta do servidor" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Adicionar" + +#~ msgid "Name" +#~ msgstr "Nome" diff --git a/luci-app-shadowsocks-rust/po/pt_BR/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/pt_BR/shadowsocks-rust.po new file mode 100644 index 000000000..be94ef323 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/pt_BR/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: pt_BR\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ro/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ro/shadowsocks-rust.po new file mode 100644 index 000000000..dfa8a011e --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ro/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: ro\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/ru/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/ru/shadowsocks-rust.po new file mode 100644 index 000000000..a9a28cfe0 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/ru/shadowsocks-rust.po @@ -0,0 +1,337 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-19 18:26+0000\n" +"Last-Translator: Anton Kikin \n" +"Language-Team: Russian \n" +"Language: ru\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.9.1-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Дополнительные настройки" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Добавить" diff --git a/luci-app-shadowsocks-rust/po/sk/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/sk/shadowsocks-rust.po new file mode 100644 index 000000000..cd806a2f8 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/sk/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: sk\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/sv/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/sv/shadowsocks-rust.po new file mode 100644 index 000000000..862d1cfae --- /dev/null +++ b/luci-app-shadowsocks-rust/po/sv/shadowsocks-rust.po @@ -0,0 +1,339 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-10-17 20:24+0000\n" +"Last-Translator: Mattias Münster \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.9.1-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "Bindningsadress" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "Inaktivera" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "Inaktiverad" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Aktivera/Inaktivera" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Aktiverad" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Extra argument" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Generella inställningar" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Översikt" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Lösenord" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "Server" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "Server-port" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Lägg till" + +#~ msgid "Name" +#~ msgstr "Namn" diff --git a/luci-app-shadowsocks-rust/po/templates/shadowsocks-rust.pot b/luci-app-shadowsocks-rust/po/templates/shadowsocks-rust.pot new file mode 100644 index 000000000..6c65b1d2d --- /dev/null +++ b/luci-app-shadowsocks-rust/po/templates/shadowsocks-rust.pot @@ -0,0 +1,359 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:218 +msgid "" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:44 +msgid "Add a new rule..." +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "Bind address" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:84 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:27 +msgid "Cancel" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:70 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:114 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:93 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:52 +msgid "Destination Settings" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:78 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:56 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:64 +msgid "Disable" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:129 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:129 +msgid "Disabled" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:113 +msgid "Dst default" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:97 +msgid "Dst ip/net bypass" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:105 +msgid "Dst ip/net bypass file" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:100 +msgid "Dst ip/net forward" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:109 +msgid "Dst ip/net forward file" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:188 +msgid "Enable MPTCP" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:187 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:185 +msgid "Enable TCP Fast Open" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:186 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:122 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:122 +msgid "Enable/Disable" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:132 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:132 +msgid "Enabled" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "Extra arguments" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:106 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:110 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:101 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:50 +msgid "General Settings" +msgstr "" + +#: luci-app-shadowsocks-rust/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-rust.json:3 +msgid "Grant service list access to LuCI app shadowsocks-rust" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:184 +msgid "IPv6 First" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:50 +msgid "Import" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:21 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:58 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:60 +msgid "Import Links" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Ingress interfaces" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:242 +msgid "Install package" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Key (base64)" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:57 +msgid "Label" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +#: luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json:14 +msgid "Local Instances" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local address" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:121 +msgid "Local port" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Local-out default" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "MTU" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:152 +msgid "Method" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:172 +msgid "Mode of operation" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:33 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:74 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:105 +msgid "Overview" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:241 +msgid "Package is not installed" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:80 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:157 +msgid "Password" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:167 +msgid "Plugin" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:169 +msgid "Plugin Options" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:184 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:32 +#: luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +#: luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json:32 +msgid "Redir Rules" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +#: luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json:23 +msgid "Remote Servers" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:115 +msgid "Remote server" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Run as" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:117 +msgid "Running" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:144 +msgid "Server" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:148 +msgid "Server port" +msgstr "" + +#: luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +#: luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json:3 +msgid "Shadowsocks-rust" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "Source Settings" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:92 +msgid "Src default" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:83 +msgid "Src ip/net bypass" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Src ip/net checkdst" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Src ip/net forward" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:88 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:97 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Timeout (sec)" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "Tunnel address" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:183 +msgid "Verbose" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "ss-redir for TCP" +msgstr "" + +#: luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:65 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/tr/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/tr/shadowsocks-rust.po new file mode 100644 index 000000000..c453bec19 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/tr/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: tr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/uk/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/uk/shadowsocks-rust.po new file mode 100644 index 000000000..ac46a2cc5 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/uk/shadowsocks-rust.po @@ -0,0 +1,341 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-11-05 01:57+0000\n" +"Last-Translator: Yurii Petrashko \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "Додаткові параметри" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "Увімкнути/Вимкнути" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "Увімкнено" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "Додаткові аргументи" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "Загальні параметри" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "Огляд" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Передача додаткових аргументів для IPTables. Використовуйте з обережністю!" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "Пароль" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" + +#~ msgid "Add" +#~ msgstr "Додати" + +#~ msgid "Name" +#~ msgstr "Ім'я" diff --git a/luci-app-shadowsocks-rust/po/vi/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/vi/shadowsocks-rust.po new file mode 100644 index 000000000..3fe59c284 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/vi/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: vi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/po/zh-cn/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/zh-cn/shadowsocks-rust.po new file mode 100644 index 000000000..0a0361f18 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/zh-cn/shadowsocks-rust.po @@ -0,0 +1,352 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2019-11-08 21:05+0000\n" +"Last-Translator: Meano Lee \n" +"Language-Team: Chinese (Simplified) \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: Weblate 3.10-dev\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "-- 实例类型 --" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "<已隐藏>" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "高级设置" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "绑定地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "对于目的地址在列表中的报文,绕过ss-redir" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "对于源地址在列表中的报文,绕过ss-redir" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "对于源地址在列表中的报文,继续检查其目的地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "对于设备本身产生的TCP报文的默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "对于目的地址不在列表中的报文的默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "对于源地址不在列表中的报文的默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" +"在此页面设定访问远端shadowsocks服务器的参数。请注意,禁用远端服务器会同时停止" +"与之关联的shadowsocks-rust组件" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "目的地址设定" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "禁用" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "已禁用" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "目的未匹配时默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "绕过" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "绕过(文件)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "转发" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "转发(文件)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "启用SO_REUSEPORT" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "启用TCP Fast Open" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "启用TCP_NODELAY" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "启用/禁用" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "已启用" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "额外参数" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "文件列出需要绕过ss-redir转发的地址和网段" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "文件列出需要使用ss-redir转发的地址和网段" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "转发被连接重置的地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "若近期多次收到某地址的连接重置报文,则将其加入到转发列表中" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "对于目的地址在列表中的报文,通过ss-redir转发" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "对于源地址在列表中的报文,通过ss-redir转发" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "基本设置" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "IPv6优先" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "入口网卡" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "安装软件包" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "安装iptables-mod-conntrack-extra" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" +"此页面展示本地运行的shadowsocks-rust各组件实例,如ss-local、ss-redir、ss-" +"tunnel、ss-server等。请注意,实际启用一个实例要求实例本身及所关联的远端服务器" +"都是启用状态。" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "密钥(base64)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "本地实例" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "监听地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "监听端口" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "本地报文默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "MTU" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "加密方法" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "工作模式" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" +"在此页面,您可以配置指定报文是否通过ss-redir转发。启用后,规则会先将报文的源" +"地址与相应的地址集进行匹配,依次决定是否“绕过(bypass)”、“转发" +"(forward)”,或“继续匹配目的地址(checkdst)”;若未在集合" +"中找到匹配,则执行指定的默认动作。继续匹配目的地址时同理。" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "仅对来自指定网卡的报文应用规则" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "概览" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "依赖包未安装" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "给iptables的额外参数。请小心使用" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "密码" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "启用插件" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "插件选项" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "名字解析时优先取用IPv6地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "转发规则" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "远端服务器" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "服务器" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "运行时用户" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "运行中" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "监听地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "监听端口" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "源地址设定" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "源未匹配默认行为" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "绕过" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "继续匹配目的地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "转发" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "ss-server建立连接时使用的源地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "ss-tunnel所建立隧道的对端地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "超时时间(秒)" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "隧道对端地址" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "记录详细日志" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "用于TCP转发的ss-redir" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "用于UDP转发的ss-redir" + +#~ msgid "Add" +#~ msgstr "添加" + +#~ msgid "Install package %q" +#~ msgstr "安装%q" + +#~ msgid "Name" +#~ msgstr "名称" diff --git a/luci-app-shadowsocks-rust/po/zh-tw/shadowsocks-rust.po b/luci-app-shadowsocks-rust/po/zh-tw/shadowsocks-rust.po new file mode 100644 index 000000000..3d44a0aa0 --- /dev/null +++ b/luci-app-shadowsocks-rust/po/zh-tw/shadowsocks-rust.po @@ -0,0 +1,327 @@ +msgid "" +msgstr "" +"Language: zh_Hant\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:43 +msgid "-- instance type --" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:211 +msgid "" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:76 +msgid "Advanced Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:86 +msgid "Bind address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:87 +msgid "Bypass ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:73 +msgid "Bypass ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:79 +msgid "" +"Continue to have dst address checked for packets with src address in this " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:59 +msgid "Default action for locally generated TCP packets" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:103 +msgid "" +"Default action for packets whose dst address do not match any of the dst ip " +"list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:82 +msgid "" +"Default action for packets whose src address do not match any of the src ip/" +"net list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:14 +msgid "" +"Definition of remote shadowsocks servers. Disable any of them will also " +"disable instances referring to it." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:43 +msgid "Destination Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:77 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:45 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:20 +msgid "Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:128 +msgid "Disabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:102 +msgid "Dst default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:86 +msgid "Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:94 +msgid "Dst ip/net bypass file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:89 +msgid "Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:98 +msgid "Dst ip/net forward file" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:181 +msgid "Enable SO_REUSEPORT" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:179 +msgid "Enable TCP Fast Open" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:180 +msgid "Enable TCP_NODELAY" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:121 +msgid "Enable/Disable" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:131 +msgid "Enabled" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:68 +msgid "Extra arguments" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:95 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:99 +msgid "" +"File containing ip/net for the purposes as with Dst ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:118 +msgid "Forward recentrst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:119 +msgid "" +"Forward those packets whose dst have recently sent to us multiple tcp-rst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:90 +msgid "Forward through ss-redir for packets with dst address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:76 +msgid "Forward through ss-redir for packets with src address in this list" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:75 +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:41 +msgid "General Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "IPv6 First" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:62 +msgid "Ingress interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:235 +msgid "Install package" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:111 +msgid "Install package iptables-mod-conntrack-extra" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:25 +msgid "" +"Instances of shadowsocks-rust components, e.g. ss-local, ss-redir, ss-" +"tunnel, ss-server, etc. To enable an instance it is required to enable both " +"the instance itself and the remote server it refers to." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:155 +msgid "Key (base64)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:24 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:13 +msgid "Local Instances" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:113 +msgid "Local address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:117 +msgid "Local port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:58 +msgid "Local-out default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:171 +msgid "MTU" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:146 +msgid "Method" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:166 +msgid "Mode of operation" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:31 +msgid "" +"On this page you can configure how traffics are to be forwarded to ss-redir " +"instances. If enabled, packets will first have their src ip addresses " +"checked against Src ip/net bypass, Src ip/net forward, " +"Src ip/net checkdst and if none matches Src default will " +"give the default action to be taken. If the prior check results in action " +"checkdst, packets will continue to have their dst addresses checked." +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:63 +msgid "Only apply rules on packets from these network interfaces" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:104 +msgid "Overview" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:234 +msgid "Package is not installed" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:69 +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:151 +msgid "Password" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:161 +msgid "Plugin" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:163 +msgid "Plugin Options" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:178 +msgid "Prefer IPv6 addresses when resolving names" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:30 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:21 +msgid "Redir Rules" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/servers.js:13 +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:17 +msgid "Remote Servers" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:111 +msgid "Remote server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:175 +msgid "Run as" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:116 +msgid "Running" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:138 +msgid "Server" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:142 +msgid "Server port" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/luasrc/controller/shadowsocks-rust.lua:9 +msgid "Shadowsocks-rust" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:42 +msgid "Source Settings" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:81 +msgid "Src default" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:72 +msgid "Src ip/net bypass" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:78 +msgid "Src ip/net checkdst" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:75 +msgid "Src ip/net forward" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:87 +msgid "The address ss-server will initiate connection from" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:96 +msgid "The address ss-tunnel will forward traffic to" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:173 +msgid "Timeout (sec)" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/instances.js:95 +msgid "Tunnel address" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/shadowsocks-rust.js:177 +msgid "Verbose" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:51 +msgid "ss-redir for TCP" +msgstr "" + +#: applications/luci-app-shadowsocks-rust/htdocs/luci-static/resources/view/shadowsocks-rust/rules.js:54 +msgid "ss-redir for UDP" +msgstr "" diff --git a/luci-app-shadowsocks-rust/root/etc/uci-defaults/40_luci-shadowsocks-rust b/luci-app-shadowsocks-rust/root/etc/uci-defaults/40_luci-shadowsocks-rust new file mode 100644 index 000000000..2ca303ff8 --- /dev/null +++ b/luci-app-shadowsocks-rust/root/etc/uci-defaults/40_luci-shadowsocks-rust @@ -0,0 +1,13 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@shadowsocks-rust[-1] + add ucitrack shadowsocks-rust + set ucitrack.@shadowsocks-rust[-1].init=shadowsocks-rust + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +mkdir -p /etc/shadowsocks-rust +/etc/init.d/rpcd reload +exit 0 diff --git a/luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json b/luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json new file mode 100644 index 000000000..5a3a575b6 --- /dev/null +++ b/luci-app-shadowsocks-rust/root/usr/share/luci/menu.d/luci-app-shadowsocks-rust.json @@ -0,0 +1,39 @@ +{ + "admin/services/shadowsocks-rust": { + "title": "Shadowsocks-rust", + "order": 59, + "action": { + "type": "firstchild" + }, + "depends": { + "acl": [ "luci-app-shadowsocks-rust" ] + } + }, + + "admin/services/shadowsocks-rust/instances": { + "title": "Local Instances", + "order": 10, + "action": { + "type": "view", + "path": "shadowsocks-rust/instances" + } + }, + + "admin/services/shadowsocks-rust/servers": { + "title": "Remote Servers", + "order": 20, + "action": { + "type": "view", + "path": "shadowsocks-rust/servers" + } + }, + + "admin/services/shadowsocks-rust/rules": { + "title": "Redir Rules", + "order": 30, + "action": { + "type": "view", + "path": "shadowsocks-rust/rules" + } + } +} diff --git a/luci-app-shadowsocks-rust/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-rust.json b/luci-app-shadowsocks-rust/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-rust.json new file mode 100644 index 000000000..9f75c1661 --- /dev/null +++ b/luci-app-shadowsocks-rust/root/usr/share/rpcd/acl.d/luci-app-shadowsocks-rust.json @@ -0,0 +1,17 @@ +{ + "luci-app-shadowsocks-rust": { + "description": "Grant service list access to LuCI app shadowsocks-rust", + "read": { + "ubus": { + "service": [ "list" ] + }, + "uci": [ "shadowsocks-rust" ] + }, + "write": { + "file": { + "/etc/shadowsocks-rust/*": [ "write" ] + }, + "uci": [ "shadowsocks-rust" ] + } + } +} diff --git a/mlvpn/files/etc/config/mlvpn b/mlvpn/files/etc/config/mlvpn index bbd90b5a4..8334fa990 100755 --- a/mlvpn/files/etc/config/mlvpn +++ b/mlvpn/files/etc/config/mlvpn @@ -2,7 +2,7 @@ config mlvpn 'general' option enable '0' option password '' option timeout '30' - option reorder_buffer_size '128' + option reorder_buffer_size '512' option loss_tolerence '50' option mode 'client' option host '128.128.128.128' diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index d0dd63911..cba0bc87a 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -4,7 +4,7 @@ if [ "$(uci -q get network.globals.mptcp_path_manager)" = "" ]; then set network.globals.multipath='enable' set network.globals.mptcp_path_manager='fullmesh' set network.globals.mptcp_scheduler='blest' - set network.globals.congestion='bbr' + set network.globals.congestion='bbr2' set network.globals.mptcp_checksum=0 set network.globals.mptcp_debug=0 set network.globals.mptcp_syn_retries=4 @@ -19,7 +19,7 @@ if [ "$(uci -q get network.globals.mptcp_path_manager)" = "" ]; then EOF fi # BBRv2 is replaced by BBRv3 -if [ "$(uci -q get network.globals.congestion)" = "bbr2" ]; then +if [ "$(uci -q get network.globals.congestion)" = "bbr2" ] && [ -z "$(uname -a | grep 5.4)" ]; then uci -q batch <<-EOF >/dev/null set network.globals.congestion='bbr' commit network diff --git a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking index 3c1a64006..4f7a018ce 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking @@ -629,7 +629,7 @@ del_server_route() { remove_route() { local serverip="$1" [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route to $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" + [ -n "$serverip" ] && _log "Delete default route to $serverip dev $OMR_TRACKER_DEVICE" local metric if [ -z "$OMR_TRACKER_INTERFACE" ]; then metric=0 diff --git a/mptcp/files/usr/share/omr/post-tracking.d/010-services b/mptcp/files/usr/share/omr/post-tracking.d/010-services index 68ca65183..4d92a4923 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/010-services +++ b/mptcp/files/usr/share/omr/post-tracking.d/010-services @@ -81,11 +81,15 @@ if [ "$(pgrep uhttpd)" = "" ] && [ -f /etc/init.d/uhttpd ]; then sleep 5 fi -#if [ "$(pgrep ModemManager)" = "" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ] && [ "$(uci -q get openmptcprouter.settings.modemmanager)" != "0" ]; then -# _log "Can't find ModemManager, restart it..." -# /etc/init.d/modemmanager restart 2>&1 >/dev/null -# sleep 5 -#fi +if [ -z "$(pgrep ModemManager)" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ]; then + _log "Can't find ModemManager, restart it..." + /etc/init.d/modemmanager restart 2>&1 >/dev/null + sleep 5 +elif [ -n "$(pgrep ModemManager)" ] && [ -f /etc/init.d/modemmanager ] && [ -z "$(uci -q show network | grep modemmanager)" ]; then + _log "ModemManager not used, stop it..." + /etc/init.d/modemmanager stop 2>&1 >/dev/null + sleep 5 +fi if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -f /etc/init.d/v2ray ] && [ "$(pgrep -f omr-tracker-v2ray)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-v2ray, restart omr-tracker..." diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index b0d7e2ab4..c1f00a345 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -65,7 +65,7 @@ proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} wait_test=${OMR_TRACKER_WAIT_TEST:-0} server=${OMR_TRACKER_SERVER:-sss0} - +type=${OMR_TRACKER_SS_TYPE:-libev} nodns=0 last=0 @@ -103,10 +103,16 @@ while true; do script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)" [ -n "$script_alert_up" ] && eval $script_alert_up } - if [ -z "$($IPTABLESSAVE 2>/dev/null | grep :ssr)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then - _log "Reload Shadowsocks rules" - /etc/init.d/shadowsocks-libev rules_up 2> /dev/null - _get_ip + if [ -z "$($IPTABLESSAVE 2>/dev/null | grep :ssr)" ]; then + if [ "$type" = "libev" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then + _log "Reload Shadowsocks rules" + /etc/init.d/shadowsocks-libev rules_up 2> /dev/null + _get_ip + elif [ "$type" = "rust" ] && [ "$(uci -q get shadowsocks-rust.ss_rules.disabled)" != "1" ]; then + _log "Reload Shadowsocks Rust rules" + /etc/init.d/shadowsocks-rust rules_up 2> /dev/null + _get_ip + fi fi [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || ([ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]) && _get_ip last=0 @@ -119,11 +125,19 @@ while true; do OMR_TRACKER_STATUS_MSG="Shadowsocks ${server} is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.ss_${server}="down" uci -q commit openmptcprouter.omr - [ "$(uci show openmptcprouter.omr | grep ss_ | grep up)" = "" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null + if [ "$(uci show openmptcprouter.omr | grep ss_ | grep up)" = "" ]; then + [ "$type" = "libev" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null + [ "$type" = "rust" ] && /etc/init.d/shadowsocks-rust rules_down 2> /dev/null + fi _get_ip server_ping=false - serverip="$(uci -q get shadowsocks-libev.${server}.server)" - disabled="$(uci -q get shadowsocks-libev.${server}.disabled)" + if [ "$type" = "libev" ]; then + serverip="$(uci -q get shadowsocks-libev.${server}.server)" + disabled="$(uci -q get shadowsocks-libev.${server}.disabled)" + elif [ "$type" = "rust" ]; then + serverip="$(uci -q get shadowsocks-rust.${server}.server)" + disabled="$(uci -q get shadowsocks-rust.${server}.disabled)" + fi _ping_server $serverip if [ "$server_ping" = false ]; then _log "Server $server ($serverip) seems down, no answer to ping" @@ -146,10 +160,17 @@ while true; do script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" [ -n "$script_alert_down" ] && eval $script_alert_down - if [ "$disabled" != "1" ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.${server}.key)" != "" ]; then - _log "Can't find shadowsocks, restart it..." - /etc/init.d/shadowsocks-libev restart - sleep 5 + if [ "$disabled" != "1" ]; then + if [ "$type" = "libev" ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.${server}.key)" != "" ]; then + _log "Can't find shadowsocks, restart it..." + /etc/init.d/shadowsocks-libev restart + sleep 5 + fi + if [ "$type" = "rust" ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(uci -q get shadowsocks-libev.${server}.key)" != "" ]; then + _log "Can't find shadowsocks rust, restart it..." + /etc/init.d/shadowsocks-rust restart + sleep 5 + fi fi sleep $wait_test fi diff --git a/omr-tracker/files/bin/omr-tracker-v2ray b/omr-tracker/files/bin/omr-tracker-v2ray index d63d8b767..6ef18c429 100755 --- a/omr-tracker/files/bin/omr-tracker-v2ray +++ b/omr-tracker/files/bin/omr-tracker-v2ray @@ -100,7 +100,7 @@ while true; do script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)" [ -n "$script_alert_up" ] && eval $script_alert_up } - if [ -z "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then + if [ -z "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ^v2r)" ]; then _log "Reload V2Ray rules" /etc/init.d/v2ray rules_up 2> /dev/null _get_ip @@ -111,7 +111,7 @@ while true; do last=$((last + 1 )) [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" [ "${last}" -ge "${retry}" ] && { - if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep v2r)" ]; then + if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ^v2r)" ]; then _log "V2Ray is down (can't contact via http ${nocontact})" OMR_TRACKER_STATUS_MSG="V2Ray is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.v2ray="down" diff --git a/omr-tracker/files/bin/omr-tracker-xray b/omr-tracker/files/bin/omr-tracker-xray new file mode 100755 index 000000000..21272b1e6 --- /dev/null +++ b/omr-tracker/files/bin/omr-tracker-xray @@ -0,0 +1,150 @@ +#!/bin/sh +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : + +name=$0 +basename="$(basename $0)" + +if [ -f /usr/sbin/iptables-legacy ]; then + IPTABLES="/usr/sbin/iptables-legacy" +else + IPTABLES="/usr/sbin/iptables" +fi + + +_log() { + logger -p daemon.info -t "${basename}" "$@" +} + +_ping_server() { + local host=$1 + ret=$(ping \ + -w "$OMR_TRACKER_TIMEOUT" \ + -c 1 \ + -q \ + "${host}" + ) && echo "$ret" | grep -sq " 0% packet loss" && { + server_ping=true + } +} + +_get_ip() { + uci -q set openmptcprouter.omr=router + if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then + check_ipv4_website="$(uci -q get openmptcprouter.settings.check_ipv4_website)" + [ -z "$check_ipv4_website" ] && check_ipv4_website="http://ip.openmptcprouter.com" + check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" + [ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com" + public_ipv4="$(curl -s -4 -m 3 $check_ipv4_website)" + uci -q set openmptcprouter.omr.detected_public_ipv4="${public_ipv4}" + [ -n "${public_ipv4}" ] && { + uci -q set upnpd.config.external_ip="${public_ipv4}" + uci -q commit upnpd + } + if [ "$(uci -q get openmptcprouter.omr.xray)" != "down" ]; then + uci -q set openmptcprouter.omr.detected_ss_ipv4="$(curl -s -4 --socks5 "${proxy}" --max-time 3 $check_ipv4_website)" + else + uci -q del openmptcprouter.omr.detected_ss_ipv4 + fi + if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ]; then + uci -q set openmptcprouter.omr.detected_public_ipv6="$(curl -s -6 -m 3 $check_ipv6_website)" + else + uci -q del openmptcprouter.omr.detected_public_ipv6 + # uci -q set openmptcprouter.omr.detected_ss_ipv6=$(curl -s -6 --socks5 ":::1111" --max-time 3 http://ip.openmptcprouter.com) + fi + fi + uci -q commit openmptcprouter +} + +timeout=${OMR_TRACKER_TIMEOUT:-5} +interval=${OMR_TRACKER_INTERVAL:-10} +retry=${OMR_TRACKER_TRIES:-4} +proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} +hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} +wait_test=${OMR_TRACKER_WAIT_TEST:-0} + +nodns=0 + +last=0 +nocontact="" +uci -q set openmptcprouter.omr=router +uci -q delete openmptcprouter.omr.xray +_get_ip + +while true; do + host="${hosts%% *}" + [ "$host" = "$hosts" ] || { + hosts="${hosts#* } $host" + } + if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then + nocontact="" + [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.xray)" = "" ] && { + _log "xray is up (can contact via http ${host})" + OMR_TRACKER_STATUS_MSG="xray is up (can contact via http ${host})" + uci -q set openmptcprouter.omr.xray="up" + uci -q commit openmptcprouter.omr + /etc/init.d/openmptcprouter-vps set_vps_firewall + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/xray Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/xray Proxy/g" -e "s/%DEVICE%/Shadowsocks Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: xray Proxy is UP." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_up="$(uci -q get omr-tracker.proxy.script_alert_up)" + [ -n "$script_alert_up" ] && eval $script_alert_up + } + if [ -z "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ^xr)" ]; then + _log "Reload xray rules" + /etc/init.d/xray rules_up 2> /dev/null + _get_ip + fi + [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || ([ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]) && _get_ip + last=0 + else + last=$((last + 1 )) + [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" + [ "${last}" -ge "${retry}" ] && { + if [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ^xr)" ]; then + _log "xray is down (can't contact via http ${nocontact})" + OMR_TRACKER_STATUS_MSG="xray is down (can't contact via http ${nocontact})" + uci -q set openmptcprouter.omr.xray="down" + uci -q commit openmptcprouter.omr + /etc/init.d/openmptcprouter-vps set_vps_firewall + /etc/init.d/xray rules_down 2> /dev/null + _get_ip + server_ping=false + server="$(uci -q get xray.omrout.s_vless_address)" + _ping_server $server + if [ "$server_ping" = false ]; then + _log "Server ($server) seems down, no answer to ping" + OMR_TRACKER_STATUS_MSG="${OMR_TRACKER_STATUS_MSG} - Server ($server) seems down, no answer to ping" + fi + mail_alert="$(uci -q get omr-tracker.proxy.mail_alert)" + #[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/xray Proxy/g" -e "s/%DEVICE%/xray Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/xray Proxy/g" -e "s/%DEVICE%/xray Proxy/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: xray Proxy is down\n\nConnection failure of xray proxy detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="$(uci -q get omr-tracker.proxy.script_alert_down)" + [ -n "$script_alert_down" ] && eval $script_alert_down + sleep $wait_test + fi + } + fi + sleep "${interval}" +done diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 0f80614ed..9a78b2378 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -187,6 +187,38 @@ _initialize_shadowsocks_tracker() { # } } +_initialize_shadowsocks_rust_tracker() { + local redir_tcp server tracker_server + server=$1 + + [ -n "$(echo $server | grep sss)" ] || return + [ -z "$server" ] && return + + #redir_tcp=$(uci -q get shadowsocks-libev.ss_rules.redir_tcp) + #config_get tracker_server ss_rules server + config_get ss_rust_disabled $server disabled 0 + [ "$ss_rust_disabled" = "0" ] && ss_rust_enable="1" + [ -z "$(uci -q get shadowsocks-rust.tracker_${server})" ] && [ "$ss_rust_disabled" != "1" ] && { + logger -t "omr-tracker" "Create ShadowSock tracker ss_local..." + uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.tracker_${server}=ss_local + set shadowsocks-rust.tracker_${server}.server=$server + set shadowsocks-rust.tracker_${server}.local_address="127.0.0.1" + set shadowsocks-rust.tracker_${server}.local_port=1111 + set shadowsocks-rust.tracker_${server}.mode=tcp_and_udp + set shadowsocks-rust.tracker_${server}.timeout=600 + set shadowsocks-rust.tracker_${server}.fast_open=0 + set shadowsocks-rust.tracker_${server}.syslog=0 + set shadowsocks-rust.tracker_${server}.reuse_port=1 + set shadowsocks-rust.tracker_${server}.mptcp=1 + set shadowsocks-rust.tracker_${server}.verbose=0 + commit shadowsocks-rust + EOF + logger -t "omr-tracker" "Restart ShadowSocks" + /etc/init.d/shadowsocks-rust restart + } +} + _launch_shadowsocks_tracker() { local hosts timeout tries interval local_port enabled server wait_test @@ -201,7 +233,7 @@ _launch_shadowsocks_tracker() { [ "$enabled" = "0" ] || [ "$disabled" = "1" ] || [ -z "$hosts" ] && return [ -z "$server" ] && return - [ "$(uci -q get shadowsocks-libev.$server.server)" = "192.168.1.3" ] || [ "$(uci -q get shadowsocks-libev.$server.server)" = "" ] && return + [ "$server" = "192.168.1.3" ] || [ "$server" = "" ] && return procd_open_instance # shellcheck disable=SC2086 @@ -211,8 +243,43 @@ _launch_shadowsocks_tracker() { procd_append_param env "OMR_TRACKER_TRIES=$tries" procd_append_param env "OMR_TRACKER_INTERVAL=$interval" procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port" - procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$type" procd_append_param env "OMR_TRACKER_SERVER=$server" + procd_append_param env "OMR_TRACKER_SS_TYPE=libev" + procd_set_param limits nofile="51200 51200" + procd_set_param respawn 0 10 0 + procd_set_param stderr 1 + procd_close_instance + sleep 1 +} + +_launch_shadowsocks_rust_tracker() { + local hosts timeout tries interval local_port enabled server wait_test + + [ "$(echo $1 | grep tracker)" != "" ] || return + + _validate_section "proxy" "proxy" + + config_get local_port "$1" local_port + local disabled + config_get disabled "$1" disabled 0 + config_get server "$1" server + + [ "$enabled" = "0" ] || [ "$disabled" = "1" ] || [ -z "$hosts" ] && return + [ -z "$server" ] && return + [ "$server" = "192.168.1.3" ] || [ "$server" = "" ] && return + + procd_open_instance + # shellcheck disable=SC2086 + procd_set_param command /bin/omr-tracker-ss "$1" + procd_append_param env "OMR_TRACKER_HOSTS=$hosts" + procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout" + procd_append_param env "OMR_TRACKER_TRIES=$tries" + procd_append_param env "OMR_TRACKER_INTERVAL=$interval" + procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$type" + procd_append_param env "OMR_TRACKER_SERVER=$server" + procd_append_param env "OMR_TRACKER_SS_TYPE=rust" procd_set_param limits nofile="51200 51200" procd_set_param respawn 0 10 0 procd_set_param stderr 1 @@ -242,6 +309,28 @@ _launch_v2ray_tracker() { sleep 1 } +_launch_xray_tracker() { + local hosts timeout tries interval local_port enabled server wait_test + + _validate_section "proxy" "proxy" + [ "$enabled" = "0" ] || [ -z "$hosts" ] && return + + procd_open_instance + # shellcheck disable=SC2086 + procd_set_param command /bin/omr-tracker-xray "$1" + procd_append_param env "OMR_TRACKER_HOSTS=$hosts" + procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout" + procd_append_param env "OMR_TRACKER_TRIES=$tries" + procd_append_param env "OMR_TRACKER_INTERVAL=$interval" + procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:1111" + procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test" + procd_set_param limits nofile="51200 51200" + procd_set_param respawn 0 10 0 + procd_set_param stderr 1 + procd_close_instance + sleep 1 +} + _multi_server() { config_get backup $1 backup [ "$backup" = "1" ] && multiserver=true @@ -254,10 +343,14 @@ _gre_tunnel() { start_service() { local ss_enable=0 + local ss_rust_enable=0 logger -t "omr-tracker" "Launching..." config_load shadowsocks-libev config_foreach _initialize_shadowsocks_tracker server + config_load shadowsocks-rust + config_foreach _initialize_shadowsocks_rust_tracker server + config_load network config_foreach _launch_tracker interface @@ -267,11 +360,21 @@ start_service() { #elif [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ]; then # /etc/init.d/shadowsocks-libev rules_down fi + if [ "$ss_rust_enable" = "1" ]; then + config_load shadowsocks-rust + config_foreach _launch_shadowsocks_rust_tracker ss_local + fi config_load v2ray config_get v2rayenabled main enabled if [ "$v2rayenabled" = "1" ]; then _launch_v2ray_tracker fi + + config_load xray + config_get xrayenabled main enabled + if [ "$xrayenabled" = "1" ]; then + _launch_xray_tracker + fi multiserver=false config_load openmptcprouter @@ -285,7 +388,7 @@ start_service() { } service_triggers() { - procd_add_reload_trigger omr-tracker network shadowsocks-libev v2ray + procd_add_reload_trigger omr-tracker network shadowsocks-libev v2ray xray } reload_service() { diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index a5c25eefe..2e288627c 100755 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -73,17 +73,20 @@ MY_DEPENDS := \ (TARGET_x86||TARGET_x86_64):kmod-iwlwifi (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl1000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl100 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl105 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl135 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl2000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl2030 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl3160 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl3168 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl5000 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl5150 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2a (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6000g2b (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl6050 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7260 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7265 (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl7265d (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl8260c (TARGET_x86||TARGET_x86_64):iwlwifi-firmware-iwl8265 \ (TARGET_x86||TARGET_x86_64):kmod-e1000 (TARGET_x86||TARGET_x86_64):kmod-e1000e (TARGET_x86||TARGET_x86_64):kmod-igb (TARGET_x86||TARGET_x86_64):kmod-ne2k-pci (TARGET_x86||TARGET_x86_64):kmod-r8169 (TARGET_x86||TARGET_x86_64):kmod-8139too (TARGET_x86||TARGET_x86_64):kmod-bnx2 \ TARGET_mvebu:kmod-mwlwifi TARGET_mvebu:mwlwifi-firmware-88w8864 TARGET_mvebu:mwlwifi-firmware-88w8897 TARGET_mvebu:mwlwifi-firmware-88w8964 TARGET_mvebu:mwlwifi-firmware-88w8997 \ - !TARGET_mvebu:kmod-usb-serial !TARGET_mvebu:kmod-usb-serial-option !TARGET_mvebu:kmod-usb-serial-wwan !TARGET_mvebu:usb-modeswitch !TARGET_mvebu:uqmi \ + !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-serial !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-serial-option !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-serial-wwan !(TARGET_mvebu||TARGET_ipq40xx):usb-modeswitch !TARGET_mvebu:uqmi \ !TARGET_mvebu:umbim !TARGET_mvebu:kmod-mii !TARGET_mvebu:kmod-usb-net !TARGET_mvebu:kmod-usb-wdm !TARGET_mvebu:kmod-usb-net-qmi-wwan !TARGET_mvebu:kmod-usb-net-cdc-mbim !TARGET_mvebu:umbim \ - !TARGET_mvebu:kmod-usb-net-huawei-cdc-ncm !TARGET_mvebu:kmod-usb-net-rndis !TARGET_mvebu:kmod-usb-net-cdc-ether !TARGET_mvebu:kmod-usb-net-ipheth !TARGET_mvebu:usbmuxd !TARGET_mvebu:libusbmuxd \ - kmod-rt2800-usb kmod-rtl8xxxu kmod-rtl8192cu kmod-net-rtl8192su !LINUX_6_1:kmod-rtl8812au-ct \ - !TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 TARGET_r4s:kmod-r8168 (TARGET_x86||TARGET_x86_64):kmod-usb-net-rtl8152 \ - !TARGET_mvebu:luci-app-mlvpn !TARGET_mvebu:mlvpn 464xlat kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||aarch64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \ + !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-net-huawei-cdc-ncm !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-net-rndis !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-net-cdc-ether !(TARGET_mvebu||TARGET_ipq40xx):kmod-usb-net-ipheth !(TARGET_mvebu||TARGET_ipq40xx):usbmuxd !(TARGET_mvebu||TARGET_ipq40xx):libusbmuxd \ + !TARGET_ipq40xx:kmod-rt2800-usb !TARGET_ipq40xx:kmod-rtl8xxxu !TARGET_ipq40xx:kmod-rtl8192cu !TARGET_ipq40xx:kmod-net-rtl8192su !LINUX_6_1:kmod-rtl8812au-ct \ + !TARGET_mvebu:luci-proto-qmi wpad-basic !TARGET_ipq40xx:kmod-mt7601u !TARGET_ipq40xx:kmod-rtl8187 TARGET_r4s:kmod-r8168 (TARGET_x86||TARGET_x86_64):kmod-usb-net-rtl8152 \ + !TARGET_mvebu:luci-app-mlvpn !TARGET_mvebu:mlvpn 464xlat kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang iptables-mod-ipopt igmpproxy ss iptraf-ng \ luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-openssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf (TARGET_x86||TARGET_x86_64):kmod-igbvf \ hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade \ luci-theme-openwrt-2020 luci-proto-wireguard luci-app-wireguard kmod-crypto-lib-blake2s (TARGET_x86||TARGET_x86_64):kmod-r8125 \ (LINUX_5_15||LINUX_6_1):mptcpd (TARGET_x86||TARGET_x86_64):kmod-igc !TARGET_mvebu:kmod-mmc-spi kmod-macsec usbutils v2ray-core syslogd \ - (TARGET_x86||TARGET_x86_64):kmod-mlx4-core + (TARGET_x86||TARGET_x86_64):kmod-mlx4-core \ + !(TARGET_ips40xx||TARGET_ramips):iptables-mod-ndpi !(TARGET_ips40xx||TARGET_ramips):kmod-ipt-ndpi libip4tc libip6tc \ + xray-core shadowsocks-rust-sslocal shadowsocks-rust-ssservice shadowsocks-rust-config luci-app-shadowsocks-rust +# (TARGET_x86_64||aarch64):kmod-tcp-bbr2 # !TARGET_mvebu:kmod-usb-net-smsc75xx # libnetfilter-conntrack ebtables ebtables-utils ip-full nstat \ diff --git a/openmptcprouter/files/bin/omr-test-speed-server b/openmptcprouter/files/bin/omr-test-speed-server index b4d24cb1b..10ca604e1 100755 --- a/openmptcprouter/files/bin/omr-test-speed-server +++ b/openmptcprouter/files/bin/omr-test-speed-server @@ -1,4 +1,5 @@ #!/bin/sh +. /usr/lib/unbound/iptools.sh SERVER=$1 INTERFACE=$2 [ "$3" = "upload" ] && UPLOAD=$3 @@ -6,12 +7,31 @@ INTERFACE=$2 [ "$4" = "upload" ] && UPLOAD=$4 [ "$4" = "fasttest" ] && FASTTEST=$4 [ -z "$SERVER" ] && SERVER="vps" -KEY=$(uci -q get openmptcprouter.$SERVER.token) +#KEY=$(uci -q get openmptcprouter.$SERVER.token) HOST=$(uci -q get openmptcprouter.$SERVER.ip | awk '{print $1}') PORT=$(uci -q get openmptcprouter.$SERVER.port) +USERNAME=$(uci -q get openmptcprouter.$SERVER.username) +PASSWORD=$(uci -q get openmptcprouter.$SERVER.password) MP=false -if [ -n "$KEY" ] && [ -n "$HOST" ] && [ -n "$PORT" ]; then +if [ -n "$HOST" ] && [ -n "$PORT" ] && [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; then trap : HUP INT TERM + [ -z "$FASTTEST" ] && echo "Get API token on $SERVER" + resolve="$(resolveip ${HOST})" + valid_ip6=$(valid_subnet6 ${HOST}) + if [ "$resolve" != "${HOST}" ] || [ "$valid_ip6" != "ok" ]; then + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='${USERNAME}'&password='${PASSWORD} https://${HOST}:${PORT}/token` + else + auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='${USERNAME}'&password='${PASSWORD} https://[${HOST}]:${PORT}/token` + fi + [ -z "$auth" ] && { + [ -z "$FASTTEST" ] && echo "No answer to API request..." + exit 1 + } + KEY="$(echo '$auth' | jsonfilter -q -e '@.access_token')" + [ -n "$KEY" ] && { + [ -z "$FASTTEST" ] && echo "No token..." + exit 1 + } [ -z "$FASTTEST" ] && echo "Disable SQM bandwidth limit on $INTERFACE" [ -z "$FASTTEST" ] && echo "Download test via server ${SERVER}:" if [ -n "$INTERFACE" ]; then diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index e14113ce6..48398be4e 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -293,6 +293,44 @@ _set_ss_server_vps() { fi } +_set_ssgo_server_vps() { + local disabled port key method + config_load shadowsocks-rust + config_get disabled sss0 disabled + [ "$disabled" = "1" ] && return + config_get port sss0 server_port + #config_get server $1 server + config_get key sss0 key + key="$(echo $key | sed 's/+/-/g; s/\//_/g;')" + [ -z "$key" ] && return + config_get method sss0 method + local current_port current_key current_method + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + current_port="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-go.port')" + current_key="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-go.key')" + current_method="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-go.method')" + current_fast_open="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-go.fast_open')" + current_mptcp="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-go.mptcp')" + + ebpf="false" + fast_open="false" + no_delay="false" + mptcp="false" + obfs="false" + obfs_plugin="v2ray" + obfs_type="http" + config_load shadowsocks-rust + config_foreach _get_ss_redir ss_redir + config_foreach _get_ss_server server + + if [ "$current_mptcp" != "$mptcp" ] || [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_fast_open" != "$fast_open" ]; then + local settings + settings='{"port": '$port',"method":"'$method'","fast_open":'$fast_open',"reuse_port":true,"mptcp":'$mptcp'}' + result=$(_set_json "shadowsocks-go" "$settings") + fi +} + _set_v2ray_server_vps() { enabled=$(uci -q get v2ray.main.enabled) [ "$enabled" != "1" ] && return @@ -309,6 +347,22 @@ _set_v2ray_server_vps() { fi } +_set_xray_server_vps() { + enabled=$(uci -q get xray.main.enabled) + [ "$enabled" != "1" ] && return + userid=$(uci -q get xray.omrout.s_vless_user_id) + [ -z "$userid" ] && return + [ -z "$vps_config" ] && vps_config=$(_get_json "config") + [ -z "$vps_config" ] && return + current_userid="$(echo "$vps_config" | jsonfilter -q -e '@.xray.config.key')" + + if [ "$current_userid" != "$userid" ]; then + local settings + settings='{"userid": "'$userid'"}' + echo $(_set_json "xray" "$settings") + fi +} + _get_vps_config() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return @@ -450,6 +504,17 @@ _get_vps_config() { /etc/init.d/shadowsocks-libev restart fi fi + if [ "$(uci -q get shadowsocks-rust.sss0.server)" != "127.0.0.1" ] && [ "$(uci -q get shadowsocks-rust.sss0.server)" != "$vpsip" ] && [ "$(uci -q get openmptcprouter.settings.ha)" != "1" ]; then + config_foreach _set_ssrust_server server "server" $vpsip + uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.server="$vpsip" + commit shadowsocks-rust + EOF + if [ "$(uci -q get shadowsocks-rust.sss0.disabled)" = "0" ]; then + logger -t "OMR-VPS" "Restart shadowsocks Rust..." + /etc/init.d/shadowsocks-rust restart + fi + fi if [ "$(uci -q get v2ray.omrout.s_vmess_address)" != "127.0.0.1" ] && [ "$(uci -q get v2ray.omrout.s_vmess_address)" != "$vpsip" ] && [ "$(uci -q get openmptcprouter.settings.ha)" != "1" ]; then uci -q batch <<-EOF >/dev/null set v2ray.omrout.s_vmess_address="$vpsip" @@ -461,6 +526,17 @@ _get_vps_config() { /etc/init.d/v2ray restart fi fi + if [ "$(uci -q get xray.omrout.s_vmess_address)" != "127.0.0.1" ] && [ "$(uci -q get xray.omrout.s_vmess_address)" != "$vpsip" ] && [ "$(uci -q get openmptcprouter.settings.ha)" != "1" ]; then + uci -q batch <<-EOF >/dev/null + set xray.omrout.s_vmess_address="$vpsip" + set xray.omrout.s_vless_address="$vpsip" + commit xray + EOF + if [ "$(uci -q get xray.main.enabled)" = "1" ]; then + logger -t "OMR-VPS" "Restart XRay..." + /etc/init.d/xray restart + fi + fi if [ "$(uci -q get openvpn.omr.remote)" != "127.0.0.1" ] && [ "$(uci -q get openvpn.omr.remote)" != "$vpsip" ] && [ "$(uci -q get openmptcprouter.settings.ha)" != "1" ]; then uci -q batch <<-EOF >/dev/null set openvpn.omr.remote="$vpsip" @@ -942,12 +1018,14 @@ _vps_firewall_redirect_port() { #uci -q delete firewall.$1 #return fi + xray="$v2ray" [ "$(uci -q get v2ray.main.enabled)" = "0" ] && [ "$(uci -q get openmptcprouter.omr.v2ray)" != "down" ] && v2ray="0" + [ "$(uci -q get xray.main.enabled)" = "0" ] && [ "$(uci -q get openmptcprouter.omr.xray)" != "down" ] && xray="0" [ "$proto" = "all" ] && proto="tcp udp" [ "$proto" = "" ] && proto="tcp udp" [ "$src" = "vpn" ] && [ -n "$proto" ] && [ -n "$src_dport" ] && [ "$enabled" != "0" ] && [ "$name" != "Allow-DHCP-Request-VPN" ] && { for protoi in $proto; do - if [ "$v2ray" = "0" ]; then + if [ "$v2ray" = "0" ] && [ "$xray" = "0" ]; then checkfw="" if [ "$family" = "ipv4" ]; then if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then @@ -1045,7 +1123,8 @@ _vps_firewall_redirect_port() { checkfw="" if [ "$family" = "ipv4" ]; then if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - checkfw=$(echo "$vpsfwlist" | grep "$src_dport # OMR $username open router $src_dport port $protoi --- V2Ray to ${dest_ip}:${dest_port}") + [ "$v2ray" == "1" ] && checkfw=$(echo "$vpsfwlist" | grep "$src_dport # OMR $username open router $src_dport port $protoi --- V2Ray to ${dest_ip}:${dest_port}") + [ "$xray" == "1" ] && checkfw=$(echo "$vpsfwlist" | grep "$src_dport # OMR $username open router $src_dport port $protoi --- XRay to ${dest_ip}:${dest_port}") else comment="" [ -n "$src_dip" ] && { @@ -1065,45 +1144,58 @@ _vps_firewall_redirect_port() { } } [ -n "$src_ip" ] && comment=" from $src_ip" - checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$v2ray" == "1" ] && checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$xray" == "1" ] && checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}") fi else if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$v2ray" == "1" ] && checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$xray" == "1" ] && checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username open router $src_dport port ${protoi} --- XRay to ${dest_ip}:${dest_port}") else comment="" [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - checkfw=$(echo "$vpsfw6list" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$v2ray" == "1" ] && checkfw=$(echo "$vpsfw6list" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}") + [ "$xray" == "1" ] && checkfw=$(echo "$vpsfw6list" | grep "# OMR $username open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}") fi fi if [ "$checkfw" = "" ]; then - settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","source_dip" : "'$src_dip'","source_ip" : "'$src_ip'","proto" : "'${protoi}'","fwtype" : "ACCEPT","ipproto" : "'$family'","comment" : "V2Ray to '${dest_ip}':'${dest_port}'"}' + [ "$v2ray" == "1" ] && settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","source_dip" : "'$src_dip'","source_ip" : "'$src_ip'","proto" : "'${protoi}'","fwtype" : "ACCEPT","ipproto" : "'$family'","comment" : "V2Ray to '${dest_ip}':'${dest_port}'"}' + [ "$xray" == "1" ] && settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","source_dip" : "'$src_dip'","source_ip" : "'$src_ip'","proto" : "'${protoi}'","fwtype" : "ACCEPT","ipproto" : "'$family'","comment" : "XRay to '${dest_ip}':'${dest_port}'"}' result=$(_set_json "shorewallopen" "$settings") [ -z "$dest_port" ] && dest_port="$src_dport" settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","destip" : "'$dest_ip'","destport" : "'$dest_port'","proto" : "'${protoi}'"}' - result=$(_set_json "v2rayredirect" "$settings") + [ "$v2ray" == "1" ] && result=$(_set_json "v2rayredirect" "$settings") + [ "$xray" == "1" ] && result=$(_set_json "xrayredirect" "$settings") fi if [ "$family" = "ipv4" ]; then if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1"] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- XRay to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- XRay to ${dest_ip}:${dest_port}$") else comment="" [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}$") fi else if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username open router $src_dport port ${protoi} --- XRay to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR open router $src_dport port ${protoi} --- XRay to ${dest_ip}:${dest_port}$") else [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}$") + [ "$v2ray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- V2Ray to ${dest_ip}:${dest_port}$") + [ "$xray" == "1" ] && [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR open router $src_dport port ${protoi}${comment} --- XRay to ${dest_ip}:${dest_port}$") fi fi fi @@ -1136,6 +1228,7 @@ _vps_firewall_close_port() { destport=$(echo $comment | awk '{print $3}' | awk -F: '{print $2}') settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","proto" : "'$proto'","destip" : "'$destip'","destport": "'$destport'"}' result=$(_set_json "v2rayunredirect" "$settings") + result=$(_set_json "xrayunredirect" "$settings") } } done @@ -1162,6 +1255,7 @@ _vps_firewall_close_port() { [ "$type" = "ACCEPT" ] && { settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","proto" : "'$proto'","comment" : "'$comment'"}' result=$(_set_json "v2rayunredirect" "$settings") + result=$(_set_json "xrayunredirect" "$settings") } } done @@ -1276,6 +1370,30 @@ _set_ss_server() { fi } +_set_ssrust_redir() { + local option=$2 + local value=$3 + if [ "$value" = "true" ]; then + value=1 + elif [ "$value" = "false" ]; then + value=0 + fi + uci -q set shadowsocks-rust.$1.$option=$value +} + +_set_ssrust_server() { + local option=$2 + local value=$3 + if [ "$value" = "true" ]; then + value=1 + elif [ "$value" = "false" ]; then + value=0 + fi + if [ "$(echo $1 | grep omr)" != "" ] || [ "$(echo $1 | grep sss)" ]; then + uci -q set shadowsocks-rust.$1.$option=$value + fi +} + _set_config_from_vps() { local shadowsocks_disabled vpn glorytun_state redirect shorewall_redirect mlvpn_key openvpn_key dsvpn_key [ -z "$vps_config" ] && vps_config=$(_get_json "config") @@ -1331,28 +1449,66 @@ _set_config_from_vps() { EOF if [ "$current_proxy" = "shadowsocks" ]; then uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.disabled=1 + commit shadowsocks-rust set shadowsocks-libev.sss0.disabled=0 commit shadowsocks-libev set v2ray.main.enabled=0 commit v2ray + set xray.main.enabled=0 + commit xray + set openmptcprouter.settings.shadowsocks_disable=0 + commit openmptcprouter + EOF + elif [ "$current_proxy" = "shadowsocks-rust" ]; then + uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.disabled=0 + commit shadowsocks-rust + set shadowsocks-libev.sss0.disabled=1 + commit shadowsocks-libev + set v2ray.main.enabled=0 + commit v2ray + set xray.main.enabled=0 + commit xray set openmptcprouter.settings.shadowsocks_disable=0 commit openmptcprouter EOF elif [ "$current_proxy" = "v2ray" ]; then uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.disabled=1 + commit shadowsocks-rust set shadowsocks-libev.sss0.disabled=1 commit shadowsocks-libev set v2ray.main.enabled=1 commit v2ray + set xray.main.enabled=0 + commit xray + set openmptcprouter.settings.shadowsocks_disable=1 + commit openmptcprouter + EOF + elif [ "$current_proxy" = "xray" ]; then + uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.disabled=1 + commit shadowsocks-rust + set shadowsocks-libev.sss0.disabled=1 + commit shadowsocks-libev + set v2ray.main.enabled=0 + commit v2ray + set xray.main.enabled=1 + commit xray set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF elif [ "$current_proxy" = "none" ]; then uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.disabled=1 + commit shadowsocks-rust set shadowsocks-libev.sss0.disabled=1 commit shadowsocks-libev set v2ray.main.enabled=0 commit v2ray + set xray.main.enabled=0 + commit xray set openmptcprouter.settings.shadowsocks_disable=1 commit openmptcprouter EOF @@ -1419,6 +1575,34 @@ _set_config_from_vps() { fi fi + # Shadowsocks Rust settings + #shadowsocks_disabled="$(uci -q get openmptcprouter.settings.shadowsocks_disable)" + #[ -z "$shadowsocks_disabled" ] && shadowsocks_disabled=0 + ssgo_sskey="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks_go.config.password')" + if [ -n "$ssgo_sskey" ] && [ "$ssgo_sskey" != "$(uci -q get shadowsocks-rust.sss0.password)" ]; then + ss_method="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks_go.config.protocol')" + ss_port="65280" + #ss_fast_open="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks-rust.fast_open')" + config_load shadowsocks-rust + #config_foreach _set_ss_redir ss_redir "fast_open" $ss_fast_open + #config_foreach _set_ss_redir ss_local "fast_open" $ss_fast_open + uci -q batch <<-EOF >/dev/null + set shadowsocks-rust.sss0.password=$ssgo_sskey + set shadowsocks-rust.sss0.server_port=$ss_port + set shadowsocks-rust.sss0.method=$ss_method + EOF + config_foreach _set_ss_server server "key" $ssgo_sskey + config_foreach _set_ss_server server "method" $ss_method + if [ "$(uci -q get shadowsocks-rust.sss0.server)" != "127.0.0.1" ]; then + config_foreach _set_ss_server server "server" $vpsip + fi + uci -q commit shadowsocks-rust + if [ "$(uci -q get shadowsocks-rust.sss0.disabled)" != "1" ]; then + logger -t "OMR-VPS" "Shadowsocks Rust restart..." + /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 + fi + fi + # V2Ray settings v2ray_key="$(echo "$vps_config" | jsonfilter -q -e '@.v2ray.config.key')" #v2ray_port="$(echo "$vps_config" | jsonfilter -q -e '@.v2ray.config.port')" @@ -1445,6 +1629,37 @@ _set_config_from_vps() { /etc/init.d/v2ray restart >/dev/null 2>&1 fi + # XRay settings + xray_key="$(echo "$vps_config" | jsonfilter -q -e '@.xray.config.key')" + xray_sskey="$(echo "$vps_config" | jsonfilter -q -e '@.xray.config.sskey')" + #v2ray_port="$(echo "$vps_config" | jsonfilter -q -e '@.v2ray.config.port')" + xray_port="65248" + if ([ -n "$xray_key" ] && [ "$xray_key" != "$(uci -q get xray.omrout.s_vmess_user_id)" ]) || ([ -n "$xray_port" ] && [ "$xray_port" != "$(uci -q get xray.omrout.s_vmess.port)" ]); then + uci -q batch <<-EOF >/dev/null + set xray.omrout.s_shadowsocks_port="$((xray_port+4))" + set xray.omrout.s_shadowsocks_password="$xray_sskey" + set xray.omrout.s_socks_user_id="$xray_key" + set xray.omrout.s_socks_port="$((xray_port+3))" + set xray.omrout.s_trojan_user_id="$xray_key" + set xray.omrout.s_trojan_port="$((xray_port+1))" + set xray.omrout.s_vmess_user_id="$xray_key" + set xray.omrout.s_vmess_port="$((xray_port+2))" + set xray.omrout.s_vless_user_id="$xray_key" + set xray.omrout.s_vless_port="$xray_port" + EOF + uci -q set xray.omrout.s_shadowsocks_password=$ss_key + if [ "$(uci -q get xray.omrout.s_vmess_address)" != "127.0.0.1" ]; then + uci -q set xray.omrout.s_vmess_address="$vpsip" + uci -q set xray.omrout.s_vless_address="$vpsip" + uci -q set xray.omrout.s_trojan_address="$vpsip" + uci -q set xray.omrout.s_socks_address="$vpsip" + uci -q set xray.omrout.s_shadowsocks_address="$vpsip" + fi + uci -q commit v2ray + logger -t "OMR-VPS" "Xray restart..." + /etc/init.d/xray restart >/dev/null 2>&1 + fi + # Glorytun settings glorytun_key="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.key')" glorytun_port="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.port')" @@ -1951,9 +2166,12 @@ _config_service() { EOF config_foreach _set_ss_server server "method" "aes-256-gcm" uci -q commit shadowsocks-libev + config_foreach _set_ssrust_server server "method" "2022-blake3-aes-256-gcm" + uci -q commit shadowsocks-rust [ "$method" != "aes-256-gcm" ] && { logger -t "OMR-VPS" "Shadowsocks restart" /etc/init.d/shadowsocks-libev restart + /etc/init.d/shadowsocks-rust restart } fi } @@ -1967,7 +2185,9 @@ _config_service() { #config_load shadowsocks-libev #config_foreach _set_ss_server_vps server _set_ss_server_vps + _set_ssgo_server_vps _set_v2ray_server_vps + _set_xray_server_vps [ -z "$(_set_glorytun_vps)" ] && error=1 [ -z "$(_set_openvpn_vps)" ] && error=1 [ -z "$(_set_mlvpn_vps)" ] && error=1 @@ -2063,7 +2283,7 @@ start_service() { service_triggers() { #procd_add_reload_trigger openmptcprouter network shadowsocks-libev v2ray glorytun glorytun-udp mlvpn openvpn dsvpn - procd_add_reload_trigger shadowsocks-libev v2ray glorytun glorytun-udp mlvpn dsvpn + procd_add_reload_trigger shadowsocks-libev shadowsocks-rust v2ray xray glorytun glorytun-udp mlvpn dsvpn procd_add_config_trigger "config.change" "firewall" /etc/init.d/openmptcprouter-vps set_vps_firewall #procd_add_config_trigger "config.change" "network" /etc/init.d/openmptcprouter-vps set_gre_tunnel #procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd diff --git a/rust/Makefile b/rust/Makefile new file mode 100644 index 000000000..60df0e5cd --- /dev/null +++ b/rust/Makefile @@ -0,0 +1,104 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Luca Barbato and Donald Hoskins + +include $(TOPDIR)/rules.mk +include ./rust-values.mk + +PKG_NAME:=rust +PKG_VERSION:=1.71.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=rustc-$(PKG_VERSION)-src.tar.gz +PKG_SOURCE_URL:=https://static.rust-lang.org/dist/ +PKG_HASH:=6fa90d50d1d529a75f6cc349784de57d7ec0ba2419b09bde7d335c25bd4e472e +HOST_BUILD_DIR:=$(BUILD_DIR)/host/rust-$(RUSTC_TARGET_ARCH)/rustc-$(PKG_VERSION)-src + +PKG_MAINTAINER:=Luca Barbato +PKG_LICENSE:=Apache-2.0 MIT +PKG_LICENSE_FILES:=LICENSE-APACHE LICENSE-MIT + +HOST_BUILD_DEPENDS:=python3/host +PKG_HOST_ONLY:=1 + +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk + +define Package/rust + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Rust + TITLE:=Rust Programming Language Compiler + URL:=https://www.rust-lang.org/ + DEPENDS:=$(RUST_ARCH_DEPENDS) +endef + +define Package/rust/description + Rust is a multi-paradigm, general-purpose programming language designed for performance + and safety, especially safe concurrency. Rust is syntactically similar to C++, but can + guarantee memory safety by using a borrow checker to validate references. +endef + +# Rust-lang has an uninstall script +RUST_UNINSTALL:=$(CARGO_HOME)/lib/rustlib/uninstall.sh + +# Target Flags +TARGET_CONFIGURE_ARGS = \ + --set=target.$(RUSTC_TARGET_ARCH).ar=$(TARGET_AR) \ + --set=target.$(RUSTC_TARGET_ARCH).cc=$(TARGET_CC_NOCACHE) \ + --set=target.$(RUSTC_TARGET_ARCH).cxx=$(TARGET_CXX_NOCACHE) \ + --set=target.$(RUSTC_TARGET_ARCH).linker=$(TARGET_CC_NOCACHE) \ + --set=target.$(RUSTC_TARGET_ARCH).ranlib=$(TARGET_RANLIB) \ + $(if $(CONFIG_USE_MUSL),--set=target.$(RUSTC_TARGET_ARCH).musl-root=$(TOOLCHAIN_DIR)) + +# CARGO_HOME is an environmental +HOST_CONFIGURE_OPTS += CARGO_HOME="$(CARGO_HOME)" + +# Rust Configuration Arguments +HOST_CONFIGURE_ARGS = \ + --build=$(RUSTC_HOST_ARCH) \ + --target=$(RUSTC_TARGET_ARCH),$(RUSTC_HOST_ARCH) \ + --host=$(RUSTC_HOST_ARCH) \ + --prefix=$(CARGO_HOME) \ + --bindir=$(CARGO_HOME)/bin \ + --libdir=$(CARGO_HOME)/lib \ + --sysconfdir=$(CARGO_HOME)/etc \ + --datadir=$(CARGO_HOME)/share \ + --mandir=$(CARGO_HOME)/man \ + --dist-compression-formats=xz \ + --enable-missing-tools \ + --disable-sanitizers \ + --release-channel=stable \ + --enable-cargo-native-static \ + --set=llvm.download-ci-llvm=true \ + $(TARGET_CONFIGURE_ARGS) + +define Host/Uninstall + # Call the Uninstall script + [ -f $(RUST_UNINSTALL) ] && \ + $(BASH) $(RUST_UNINSTALL) || echo No Uninstall +endef + +define Host/Compile + ( \ + cd $(HOST_BUILD_DIR) ; \ + $(PYTHON) x.py --config ./config.toml dist build-manifest cargo llvm-tools \ + rustc rust-std rust-src ; \ + ) +endef + +define Host/Install + ( \ + cd $(HOST_BUILD_DIR)/build/dist ; \ + find -iname "*.xz" -exec tar -xJf {} \; ; \ + find ./* -type f -name install.sh -execdir sh {} --prefix=$(CARGO_HOME) --disable-ldconfig \; ; \ + \ + sed -e 's|@RUSTC_TARGET_ARCH@|$(RUSTC_TARGET_ARCH)|g' \ + -e 's|@TARGET_CC_NOCACHE@|$(TARGET_CC_NOCACHE)|g' \ + -e 's|@RUSTC_LDFLAGS@|$(RUSTC_LDFLAGS)|g' \ + $(CURDIR)/files/cargo-config > $(CARGO_HOME)/config ; \ + ) +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,rust)) diff --git a/rust/files/cargo-config b/rust/files/cargo-config new file mode 100644 index 000000000..2ed512931 --- /dev/null +++ b/rust/files/cargo-config @@ -0,0 +1,8 @@ +[target.@RUSTC_TARGET_ARCH@] +linker = "@TARGET_CC_NOCACHE@" +rustflags = ["-Ctarget-feature=-crt-static", "-Clink-args=@RUSTC_LDFLAGS@"] + +[profile.stripped] +inherits = "release" +opt-level = "s" +strip = true diff --git a/rust/patches/0001-Update-xz2-and-use-it-static.patch b/rust/patches/0001-Update-xz2-and-use-it-static.patch new file mode 100644 index 000000000..8d0c4b042 --- /dev/null +++ b/rust/patches/0001-Update-xz2-and-use-it-static.patch @@ -0,0 +1,48 @@ +From d3000458501d339ea2043006924d431ead18769e Mon Sep 17 00:00:00 2001 +From: Luca Barbato +Date: Sun, 4 Jun 2023 19:32:28 +0000 +Subject: [PATCH] Update xz2 and use it static + +--- + Cargo.lock | 8 ++++---- + src/bootstrap/Cargo.lock | 8 ++++---- + src/bootstrap/Cargo.toml | 2 +- + 3 files changed, 9 insertions(+), 9 deletions(-) + +--- a/src/bootstrap/Cargo.lock ++++ b/src/bootstrap/Cargo.lock +@@ -443,9 +443,9 @@ dependencies = [ + + [[package]] + name = "lzma-sys" +-version = "0.1.17" ++version = "0.1.20" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "bdb4b7c3eddad11d3af9e86c487607d2d2442d185d848575365c4856ba96d619" ++checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" + dependencies = [ + "cc", + "libc", +@@ -912,9 +912,9 @@ dependencies = [ + + [[package]] + name = "xz2" +-version = "0.1.6" ++version = "0.1.7" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c179869f34fc7c01830d3ce7ea2086bc3a07e0d35289b667d0a8bf910258926c" ++checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" + dependencies = [ + "lzma-sys", + ] +--- a/src/bootstrap/Cargo.toml ++++ b/src/bootstrap/Cargo.toml +@@ -50,7 +50,7 @@ toml = "0.5" + ignore = "0.4.10" + opener = "0.5" + once_cell = "1.7.2" +-xz2 = "0.1" ++xz2 = { version = "0.1", features = ["static"] } + walkdir = "2" + + # Dependencies needed by the build-metrics feature diff --git a/rust/patches/0002-Bumped-libc-version.patch b/rust/patches/0002-Bumped-libc-version.patch new file mode 100644 index 000000000..52c8a245c --- /dev/null +++ b/rust/patches/0002-Bumped-libc-version.patch @@ -0,0 +1,35 @@ +From 032857e7e403f654129c45dc7e6718a9ad49e377 Mon Sep 17 00:00:00 2001 +From: Nikolay Arhipov +Date: Tue, 6 Jun 2023 16:09:05 +0300 +Subject: [PATCH] Bumped libc version + +--- + Cargo.lock | 4 ++-- + library/std/Cargo.toml | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -1988,9 +1988,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0e + + [[package]] + name = "libc" +-version = "0.2.143" ++version = "0.2.146" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "edc207893e85c5d6be840e969b496b53d94cec8be2d501b214f50daa97fa8024" ++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" + dependencies = [ + "rustc-std-workspace-core", + ] +--- a/library/std/Cargo.toml ++++ b/library/std/Cargo.toml +@@ -15,7 +15,7 @@ cfg-if = { version = "1.0", features = [ + panic_unwind = { path = "../panic_unwind", optional = true } + panic_abort = { path = "../panic_abort" } + core = { path = "../core" } +-libc = { version = "0.2.143", default-features = false, features = ['rustc-dep-of-std'] } ++libc = { version = "0.2.146", default-features = false, features = ['rustc-dep-of-std'] } + compiler_builtins = { version = "0.1.92" } + profiler_builtins = { path = "../profiler_builtins", optional = true } + unwind = { path = "../unwind" } diff --git a/rust/rust-host-build.mk b/rust/rust-host-build.mk new file mode 100644 index 000000000..39cf1f23c --- /dev/null +++ b/rust/rust-host-build.mk @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Luca Barbato and Donald Hoskins + +ifeq ($(origin RUST_INCLUDE_DIR),undefined) + RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) +endif +include $(RUST_INCLUDE_DIR)/rust-values.mk + +# $(1) path to the package (optional) +# $(2) additional arguments to cargo (optional) +define Host/Compile/Cargo + ( \ + cd $(HOST_BUILD_DIR) ; \ + export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ + CARGO_HOME=$(CARGO_HOME) \ + CC=$(HOSTCC_NOCACHE) \ + cargo install -v \ + --profile stripped \ + $(if $(RUST_PKG_FEATURES),--features "$(RUST_PKG_FEATURES)") \ + --root $(HOST_INSTALL_DIR) \ + --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \ + ) +endef + +define Host/Uninstall/Cargo + ( \ + cd $(HOST_BUILD_DIR) ; \ + export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ + CARGO_HOME=$(CARGO_HOME) \ + CC=$(HOSTCC_NOCACHE) \ + cargo uninstall -v \ + --root $(HOST_INSTALL_DIR) || true ; \ + ) +endef + +define RustBinHostBuild + define Host/Install + $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin + $(INSTALL_BIN) $(HOST_INSTALL_DIR)/bin/* $(STAGING_DIR_HOSTPKG)/bin/ + endef +endef + +Host/Compile=$(call Host/Compile/Cargo) +Host/Uninstall=$(call Host/Uninstall/Cargo) diff --git a/rust/rust-package.mk b/rust/rust-package.mk new file mode 100644 index 000000000..955b37c29 --- /dev/null +++ b/rust/rust-package.mk @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Luca Barbato and Donald Hoskins + +# Variables (all optional) to be set in package Makefiles: +# +# RUST_PKG_FEATURES - list of options, default empty +# +# Space or comma separated list of features to activate +# +# e.g. RUST_PKG_FEATURES:=enable-foo,with-bar + +ifeq ($(origin RUST_INCLUDE_DIR),undefined) + RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) +endif +include $(RUST_INCLUDE_DIR)/rust-values.mk + +# Support only a subset for now. +RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||riscv64||x86_64) + +# $(1) path to the package (optional) +# $(2) additional arguments to cargo (optional) +define Build/Compile/Cargo + ( \ + cd $(PKG_BUILD_DIR) ; \ + export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ + CARGO_HOME=$(CARGO_HOME) \ + TARGET_CFLAGS="$(TARGET_CFLAGS) $(RUST_CFLAGS)" \ + TARGET_CC=$(TARGET_CC_NOCACHE) \ + CC=$(HOSTCC_NOCACHE) \ + $(CARGO_VARS) \ + cargo install -v \ + --profile stripped \ + --target $(RUSTC_TARGET_ARCH) \ + $(if $(strip $(RUST_PKG_FEATURES)),--features "$(strip $(RUST_PKG_FEATURES))") \ + --root $(PKG_INSTALL_DIR) \ + --path "$(if $(strip $(1)),$(strip $(1)),.)" \ + $(2) ; \ + ) +endef + +define RustBinPackage + ifndef Package/$(1)/install + define Package/$(1)/install + $$(INSTALL_DIR) $$(1)/usr/bin/ + $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/bin/* $$(1)/usr/bin/ + endef + endif +endef + +Build/Compile=$(call Build/Compile/Cargo) diff --git a/rust/rust-values.mk b/rust/rust-values.mk new file mode 100644 index 000000000..26935c0f6 --- /dev/null +++ b/rust/rust-values.mk @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Luca Barbato and Donald Hoskins + +# Rust Environmental Vars +CONFIG_HOST_SUFFIX:=$(word 4, $(subst -, ,$(GNU_HOST_NAME))) +RUSTC_HOST_ARCH:=$(HOST_ARCH)-unknown-linux-$(CONFIG_HOST_SUFFIX) +CARGO_HOME:=$(STAGING_DIR)/host/cargo +CARGO_VARS:= + +ifeq ($(CONFIG_USE_MUSL),y) +# Force linking of the SSP library for musl +ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR + ifeq ($(strip $(PKG_SSP)),1) + RUSTC_LDFLAGS += -lssp_nonshared + endif +endif +ifdef CONFIG_PKG_CC_STACKPROTECTOR_STRONG + ifeq ($(strip $(PKG_SSP)),1) + TARGET_CFLAGS += -lssp_nonshared + endif +endif +endif + +ifeq ($(HOST_OS),Darwin) + ifeq ($(HOST_ARCH),arm64) + RUSTC_HOST_ARCH:=aarch64-apple-darwin + endif +endif + +# mips64 openwrt has a specific targed in rustc +ifeq ($(ARCH),mips64) + RUSTC_TARGET_ARCH:=$(REAL_GNU_TARGET_NAME) +else + RUSTC_TARGET_ARCH:=$(subst openwrt,unknown,$(REAL_GNU_TARGET_NAME)) +endif + +RUSTC_TARGET_ARCH:=$(subst muslgnueabi,musleabi,$(RUSTC_TARGET_ARCH)) + +ifeq ($(ARCH),i386) + RUSTC_TARGET_ARCH:=$(subst i486,i586,$(RUSTC_TARGET_ARCH)) +else ifeq ($(ARCH),riscv64) + RUSTC_TARGET_ARCH:=$(subst riscv64,riscv64gc,$(RUSTC_TARGET_ARCH)) +endif + +# ARM Logic +ifeq ($(ARCH),arm) + ifeq ($(CONFIG_arm_v7),y) + RUSTC_TARGET_ARCH:=$(subst arm,armv7,$(RUSTC_TARGET_ARCH)) + endif + + ifeq ($(CONFIG_HAS_FPU),y) + RUSTC_TARGET_ARCH:=$(subst musleabi,musleabihf,$(RUSTC_TARGET_ARCH)) + endif +endif + +ifeq ($(ARCH),aarch64) + RUST_CFLAGS:=-mno-outline-atomics +endif diff --git a/shadowsocks-rust/Makefile b/shadowsocks-rust/Makefile new file mode 100644 index 000000000..74bf8ebae --- /dev/null +++ b/shadowsocks-rust/Makefile @@ -0,0 +1,78 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2017-2020 Yousong Zhou +# Copyright (C) 2021-2023 ImmortalWrt.org + +include $(TOPDIR)/rules.mk + +PKG_NAME:=shadowsocks-rust +PKG_VERSION:=1.16.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/shadowsocks/shadowsocks-rust/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=da4c6256247207b2579721046292bab1a2ac62301878c73ff778c168caa8a990 + +PKG_MAINTAINER:=Tianling Shen +PKG_LICENSE:=MIT +PKG_LICENSE_FILES:=LICENSE + +PKG_BUILD_DEPENDS:=rust/host + +RUST_PKG_FEATURES:=local-redir + +include $(INCLUDE_DIR)/package.mk +#include $(TOPDIR)/feeds/packages/lang/rust/rust-package.mk +include $(TOPDIR)/feeds/openmptcprouter/rust/rust-package.mk + +define Package/shadowsocks-rust/Default + define Package/shadowsocks-rust-$(1) + SECTION:=net + CATEGORY:=Network + SUBMENU:=Web Servers/Proxies + TITLE:=shadowsocks-rust $(1) + URL:=https://github.com/shadowsocks/shadowsocks-rust + DEPENDS:=$$(RUST_ARCH_DEPENDS) + endef + + define Package/shadowsocks-rust-$(1)/install + $$(INSTALL_DIR) $$(1)/usr/bin + $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/bin/$(1) $$(1)/usr/bin/ + endef +endef + +define Package/shadowsocks-rust-config + SECTION:=net + CATEGORY:=Network + SUBMENU:=Web Servers/Proxies + TITLE:=shadowsocks-rust config + URL:=https://github.com/shadowsocks/shadowsocks-rust + DEPENDS:=$$(RUST_ARCH_DEPENDS) +endef + + +define Package/shadowsocks-rust-config/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) ./files/ssr-rules $(1)/usr/bin + $(INSTALL_BIN) ./files/ssr-rules6 $(1)/usr/bin + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/firewall.ssr-rules $(1)/etc + $(INSTALL_BIN) ./files/ssr-rules.defaults $(1)/etc/uci-defaults + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/shadowsocks-rust.config $(1)/etc/config/shadowsocks-rust + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/shadowsocks-rust.init $(1)/etc/init.d/shadowsocks-rust +endef + +SHADOWSOCKS_COMPONENTS:=sslocal ssmanager ssserver ssurl ssservice +define shadowsocks-rust/templates + $(foreach component,$(SHADOWSOCKS_COMPONENTS), + $(call Package/shadowsocks-rust/Default,$(component)) + ) +endef +$(eval $(call shadowsocks-rust/templates)) + +$(eval $(call BuildPackage,shadowsocks-rust-config)) +$(foreach component,$(SHADOWSOCKS_COMPONENTS), \ + $(eval $(call BuildPackage,shadowsocks-rust-$(component))) \ +) diff --git a/shadowsocks-rust/files/firewall.ssr-rules b/shadowsocks-rust/files/firewall.ssr-rules new file mode 100644 index 000000000..87e4769b6 --- /dev/null +++ b/shadowsocks-rust/files/firewall.ssr-rules @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/init.d/shadowsocks-rust rules_up diff --git a/shadowsocks-rust/files/shadowsocks-rust.config b/shadowsocks-rust/files/shadowsocks-rust.config new file mode 100644 index 000000000..82d13a389 --- /dev/null +++ b/shadowsocks-rust/files/shadowsocks-rust.config @@ -0,0 +1,51 @@ +config ss_redir hi1 + option server 'sss0' + option local_address '::' + option local_port '1100' + option mode 'tcp_and_udp' + option timeout '1000' + option fast_open 0 + option verbose 0 + option syslog 1 + option reuse_port 1 + option mptcp 1 + option ipv6_first 1 + option no_delay 1 + +config ss_redir hi2 + option server 'sss0' + option local_address '0.0.0.0' + option local_port '1100' + option mode 'tcp_and_udp' + option timeout '1000' + option fast_open 1 + option verbose 0 + option syslog 1 + option reuse_port 1 + option mptcp 1 + option ipv6_first 1 + option no_delay 1 + option disabled 1 + +config ss_rules 'ss_rules' + option disabled 0 + option redir_tcp 'hi1' + option src_default 'forward' + option dst_default 'forward' + option local_default 'forward' + option server 'sss0' + +config server 'sss0' + option disabled 1 + option server '192.168.1.3' + option server_port '65280' + option key '' + option method '2022-blake3-aes-256-gcm' + option obfs 0 + +config ss_tunnel 'dns' + option disabled 1 + option mode 'tcp_and_udp' + option server 'sss0' + option local_port '5353' + option tunnel_address '8.8.8.8:53' \ No newline at end of file diff --git a/shadowsocks-rust/files/shadowsocks-rust.init b/shadowsocks-rust/files/shadowsocks-rust.init new file mode 100644 index 000000000..ef9e77704 --- /dev/null +++ b/shadowsocks-rust/files/shadowsocks-rust.init @@ -0,0 +1,494 @@ +#!/bin/sh /etc/rc.common +# +# Copyright (C) 2017-2019 Yousong Zhou +# Copyright (C) 2019-2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +USE_PROCD=1 +EXTRA_COMMANDS="rules_up rules_down rules_exist" +START=91 + +ss_confdir=/var/etc/shadowsocks-rust +ss_bindir=/usr/bin + +ss_mkjson_server_conf() { + local cfgserver + + config_get cfgserver "$cfg" server + [ -n "$cfgserver" ] || return 1 + eval "$(validate_server_section "$cfg" ss_validate_mklocal)" + validate_server_section "$cfgserver" || return 1 + [ "$disabled" = 0 ] || return 1 + ss_mkjson_server_conf_ "$cfgserver" +} + +ss_mkjson_server_conf_() { + [ -n "$server_port" ] || return 1 + [ -z "$method" ] || json_add_string method "$method" + [ -z "$server" ] || json_add_string server "$server" + json_add_int server_port "$server_port" + [ -z "$password" ] || { + #password="$(echo $password | sed 's/+/-/g; s/\//_/g;')" + json_add_string password "$password" + } + [ -z "$password" ] && return 1 + [ -z "$plugin" ] || json_add_string plugin "$plugin" + [ -z "$plugin_opts" ] || json_add_string plugin_opts "$plugin_opts" + if [ "$obfs" = 1 ]; then + if [ "$obfs_plugin" = "obfs" ]; then + obfs_options="obfs=$obfs_type" + [ -z "$obfs_host" ] || obfs_options="$obfs_options;obfs-host=$obfs_host" + [ -z "$obfs_uri" ] || obfs_options="$obfs_options;obfs-uri=$obfs_uri" + [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" + [ "$mptcp" = 1 ] && obfs_options="$obfs_options;mptcp" + [ -z "$timeout" ] || obfs_options="$obfs_options;t=$timeout" + json_add_string plugin "/usr/bin/obfs-local" + json_add_string plugin_opts "$obfs_options" + fi + if [ "$obfs_plugin" = "v2ray" ]; then + obfs_options="loglevel=default" + [ "$obfs_type" = "tls" ] && obfs_options="tls" + [ -z "$obfs_host" ] || obfs_options="$obfs_options;host=$obfs_host" + [ -z "$obfs_uri" ] || obfs_options="$obfs_options;path=$obfs_uri" + [ "$fast_open" = 1 ] && obfs_options="$obfs_options;fast-open" + json_add_string plugin "/usr/bin/v2ray-plugin" + json_add_string plugin_opts "$obfs_options" + fi + fi +} + +ss_mkjson_ss_local_conf() { + ss_mkjson_server_conf +} + +ss_mkjson_ss_redir_conf() { + ss_mkjson_server_conf +} + +ss_mkjson_ss_server_conf() { + ss_mkjson_server_conf_ +} + +ss_mkjson_ss_tunnel_conf() { + ss_mkjson_server_conf || return 1 + [ -n "$tunnel_address" ] || return 1 + json_add_string tunnel_address "$tunnel_address" +} + +ss_xxx() { + local cfg="$1" + local cfgtype="$2" + local bin="$ss_bindir/sslocal" + local confjson="$ss_confdir/$cfgtype.$cfg.json" + + [ -x "$bin" ] || return + eval "$("validate_${cfgtype}_section" "$cfg" ss_validate_mklocal)" + "validate_${cfgtype}_section" "$cfg" || return + [ "$disabled" = 0 ] || return + + json_init + ss_mkjson_${cfgtype}_conf || return + json_add_boolean use_syslog 1 + json_add_boolean ipv6_first "$ipv6_first" + json_add_boolean fast_open "$fast_open" + json_add_boolean reuse_port "$reuse_port" + json_add_boolean no_delay "$no_delay" + json_add_boolean mptcp "$mptcp" + [ "$cfgtype" != "ss_local" ] && json_add_string protocol "${cfgtype/ss_/}" + [ -z "$local_address" ] || json_add_string local_address "$local_address" + [ -z "$local_port" ] || json_add_int local_port "$local_port" + [ -z "$mode" ] || json_add_string mode "$mode" + [ -z "$mtu" ] || json_add_int mtu "$mtu" + [ -z "$timeout" ] || json_add_int timeout "$timeout" + [ -z "$user" ] || json_add_string user "$user" + json_dump -i >"$confjson" + + procd_open_instance "$cfgtype.$cfg" + procd_set_param command "$bin" -c "$confjson" + [ "$verbose" = 0 ] || procd_append_param command -v + [ -z "$bind_address" ] || procd_append_param command -b "$bind_address" + procd_set_param file "$confjson" + procd_set_param limits nofile="512000 512000" + procd_set_param respawn + procd_close_instance + ss_rules_cb +} + +ss_rules_restart() { + local cfg="$1" + local cfgtype="$2" + + eval "$("validate_${cfgtype}_section" "$cfg" ss_validate_mklocal)" + "validate_${cfgtype}_section" "$cfg" || return 1 + ss_rules_cb +} + +ss_rules_cb() { + local cfgserver server + + if [ "$cfgtype" = ss_redir ]; then + config_get cfgserver "$cfg" server + config_get server "$cfgserver" server + ss_redir_servers="$ss_redir_servers $server" + if [ "$mode" = "tcp_only" -o "$mode" = "tcp_and_udp" ]; then + eval "ss_rules_redir_tcp_$cfg=$local_port" + eval "ss_rules6_redir_tcp_$cfg=$local_port" + fi + if [ "$mode" = "udp_only" -o "$mode" = "tcp_and_udp" ]; then + eval "ss_rules_redir_udp_$cfg=$local_port" + eval "ss_rules6_redir_udp_$cfg=$local_port" + fi + fi +} + +ss_redir_ports() { + port=$(uci -q get shadowsocks-rust.$1.local_port) + server=$(uci -q get shadowsocks-rust.$1.server) + disabled=$(uci -q get shadowsocks-rust.$1.disabled) + if [ "$disabled" != "1" ] && ([ "$server" = "$2" ] || [ "$2" = "" ]); then + if [ "$port" -lt "$min_ss_redir_ports" ]; then + min_ss_redir_ports=$port + fi + if [ "$port" -gt "$max_ss_redir_ports" ]; then + max_ss_redir_ports=$port + fi + fi +} + +ss_rules() { + local cfg="$1" + local bin="$ss_bindir/ssr-rules" + local bin6="$ss_bindir/ssr-rules6" + local cfgtype + local cfgrulesserver + local local_port_tcp local_port_udp + local local_port_tcp6 local_port_udp6 + local args + local rule_name + if [ "$cfg" = "ss_rules" ]; then + rule_name="def" + else + rule_name="$(echo $cfg | sed 's/_rule//' | cut -c -7)" + fi + + [ -x "$bin" ] || return 1 + #"$bin" -f + [ -x "$bin6" ] || return 1 + #"$bin6" -f + + config_get cfgtype "$cfg" TYPE + [ "$cfgtype" = ss_rules ] || return 1 + + config_get cfgrulesserver "$cfg" server + + eval "$(validate_ss_rules_section "$cfg" ss_validate_mklocal)" + validate_ss_rules_section "$cfg" || return 1 + [ "$disabled" != "1" ] || return 0 + [ "$(uci -q get shadowsocks-rust.${cfgrulesserver}.disabled)" != "1" ] || return 0 + if [ "$ss_rules_redir_tcp_$redir_tcp" = "all" ]; then + min_ss_redir_ports="65535" + max_ss_redir_ports="0" + config_load shadowsocks-rust + config_foreach ss_redir_ports ss_redir $cfgrulesserver + if [ "$min_ss_redir_ports" != "$max_ss_redir_ports" ]; then + all_ss_redir_ports=$min_ss_redir_ports-$max_ss_redir_ports + else + all_ss_redir_ports=$min_ss_redir_ports + fi + local_port_tcp="$all_ss_redir_ports" + if [ "$ss_rules_redir_udp_$redir_udp" = "all" ] || [ "$ss_rules_redir_udp_$redir_udp" = "hi1" ]; then + local_port_udp="$min_ss_redir_ports" + fi + #eval local_port_udp="\$ss_rules_redir_udp_$redir_udp" + local_port_tcp6="$all_ss_redir_ports" + if [ "$ss_rules_redir_udp_$redir_udp" = "all" ] || [ "$ss_rules_redir_udp_$redir_udp" = "hi1" ]; then + local_port_udp6="$min_ss_redir_ports" + fi + #eval local_port_udp6="\$ss_rules6_redir_udp_$redir_udp" + else + eval local_port_tcp="\$ss_rules_redir_tcp_$redir_tcp" + eval local_port_udp="\$ss_rules_redir_udp_$redir_udp" + eval local_port_tcp6="\$ss_rules6_redir_tcp_$redir_tcp" + eval local_port_udp6="\$ss_rules6_redir_udp_$redir_udp" + fi + [ -n "$local_port_tcp" -o -n "$local_port_udp" ] || return 1 + ss_redir_servers4="$(echo "$ss_redir_servers" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + ss_redir_servers6="$(echo "$ss_redir_servers" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + [ -z "$ss_redir_servers4" ] && [ -z "$ss_redir_servers6" ] && { + ss_redir_servers4="$ss_redir_servers" + ss_redir_servers6="$ss_redir_servers" + } + #ss_redir_servers="$(echo "$ss_redir_servers" | tr ' ' '\n' | sort -u)" + dst_ips_bypass4="$(echo "$dst_ips_bypass" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + dst_ips_forward4="$(echo "$dst_ips_forward" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + src_ips_bypass4="$(echo "$src_ips_bypass" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + src_ips_forward4="$(echo "$src_ips_forward" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + src_ips_checkdst4="$(echo "$src_ips_checkdst" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -u)" + dst_ips_bypass6="$(echo "$dst_ips_bypass" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + dst_ips_forward6="$(echo "$dst_ips_forward" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + src_ips_bypass6="$(echo "$src_ips_bypass" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + src_ips_forward6="$(echo "$src_ips_forward" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + src_ips_checkdst6="$(echo "$src_ips_checkdst" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)" + [ -z "$dst_ips_bypass4" ] && [ -z "$dst_ips_bypass6" ] && { + dst_ips_bypass4="$dst_ips_bypass" + dst_ips_bypass6="$dst_ips_bypass" + } + [ -z "$dst_ips_forward4" ] && [ -z "$dst_ips_forward6" ] && { + dst_ips_forward4="$dst_ips_forward" + dst_ips_forward6="$dst_ips_forward" + } + [ -z "$src_ips_bypass4" ] && [ -z "$src_ips_bypass6" ] && { + src_ips_bypass4="$src_ips_bypass" + src_ips_bypass6="$src_ips_bypass" + } + [ -z "$src_ips_forward4" ] && [ -z "$src_ips_forward6" ] && { + src_ips_forward4="$src_ips_forward" + src_ips_forward6="$src_ips_forward" + } + [ -z "$src_ips_checkdst4" ] && [ -z "$src_ips_checkdst6" ] && { + src_ips_checkdst4="$src_ips_checkdst" + src_ips_checkdst6="$src_ips_checkdst" + } + [ "$dst_forward_recentrst" = 0 ] || args="$args --dst-forward-recentrst" + + ss_rules_call + ss_rules_call6 +} + +ss_rules_call() { + "$bin" "$@" \ + -s "$ss_redir_servers4" \ + ${local_port_tcp:+-l "$local_port_tcp"} \ + ${local_port_udp:+-L "$local_port_udp"} \ + ${src_default:+--src-default "$src_default"} \ + ${dst_default:+--dst-default "$dst_default"} \ + ${local_default:+--local-default "$local_default"} \ + ${dst_ips_bypass_file:+--dst-bypass-file "$dst_ips_bypass_file"} \ + ${dst_ips_forward_file:+--dst-forward-file "$dst_ips_forward_file"} \ + ${dst_ips_bypass4:+--dst-bypass "$dst_ips_bypass4"} \ + ${dst_ips_forward4:+--dst-forward "$dst_ips_forward4"} \ + ${src_ips_bypass4:+--src-bypass "$src_ips_bypass4"} \ + ${src_ips_forward4:+--src-forward "$src_ips_forward4"} \ + ${src_ips_checkdst4:+--src-checkdst "$src_ips_checkdst4"} \ + ${ifnames:+--ifnames "$ifnames"} \ + ${ipt_args:+--ipt-extra "$ipt_args"} \ + ${cfg:+--rule-name "$rule_name"} \ + $args \ + || "$bin" "$@" -f +} + +ss_rules_call6() { + "$bin6" "$@" \ + -s "$ss_redir_servers6" \ + ${local_port_tcp:+-l "$local_port_tcp6"} \ + ${local_port_udp:+-L "$local_port_udp6"} \ + ${src_default:+--src-default "$src_default"} \ + ${dst_default:+--dst-default "$dst_default"} \ + ${local_default:+--local-default "$local_default"} \ + ${dst_ips_bypass_file:+--dst-bypass-file "$dst_ips_bypass_file"} \ + ${dst_ips_forward_file:+--dst-forward-file "$dst_ips_forward_file"} \ + ${dst_ips_bypass6:+--dst-bypass "$dst_ips_bypass6"} \ + ${dst_ips_forward6:+--dst-forward "$dst_ips_forward6"} \ + ${src_ips_bypass6:+--src-bypass "$src_ips_bypass6"} \ + ${src_ips_forward6:+--src-forward "$src_ips_forward6"} \ + ${src_ips_checkdst6:+--src-checkdst "$src_ips_checkdst6"} \ + ${ifnames:+--ifnames "$ifnames"} \ + ${ipt_args:+--ipt-extra "$ipt_args"} \ + ${cfg:+--rule-name "$rule_name"} \ + $args \ + || "$bin6" "$@" -f +} + +start_service() { + local cfgtype + + mkdir -p "$ss_confdir" + config_load shadowsocks-rust + for cfgtype in ss_local ss_redir ss_server ss_tunnel; do + config_foreach ss_xxx "$cfgtype" "$cfgtype" + done + # Add rule to match traffic marked by firewall for bypass + ip rule add prio 1 fwmark 0x539 lookup 991337 > /dev/null 2>&1 + rules_up + [ -f /etc/firewall.gre-tunnel ] && sh /etc/firewall.gre-tunnel > /dev/null 2>&1 +} + +stop_service() { + rules_down + rm -rf "$ss_confdir" +} + +reload_service() { + restart "$@" +} + +rules_exist() { + [ -n "$(iptables-save 2>/dev/null | grep 'A ssr')" ] && return 0 + return 1 +} + +server_state() { + config_get disabled "$1" disabled "0" + [ "$disabled" = "0" ] && enabled="1" + config_get password "$1" password + [ -n "$password" ] && passkey=$password +} + +rules_up() { + rules_exist && { + [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null + return 0 + } + [ "$(uci -q get shadowsocks-rust.ss_rules.disabled)" = "1" ] && return 0 + enabled="0" + passkey="" + config_load shadowsocks-rust + config_foreach server_state server + [ "$enabled" = "0" ] && return + [ -z "$passkey" ] && return + logger -t "Shadowsocks-rust" "Rules UP" + for cfgtype in ss_redir; do + config_foreach ss_rules_restart "$cfgtype" "$cfgtype" + done + config_foreach ss_rules ss_rules + [ -z "$(iptables-save 2>/dev/null | grep :ssr)" ] && logger -t "Shadowsocks-rust" "Rules not applied" + [ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && { + logger -t "Shadowsocks-rust" "Reload omr-bypass rules" + /etc/init.d/omr-bypass reload_rules + } + [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null +} + +rules_down() { + rules_exist || return 0 + logger -t "Shadowsocks-rust" "Rules DOWN" + local bin="$ss_bindir/ssr-rules" + [ -x "$bin" ] && { + "$bin" -f >/dev/null 2>&1 + } + local bin6="$ss_bindir/ssr-rules6" + [ -x "$bin6" ] && { + "$bin6" -f >/dev/null 2>&1 + } +} + +service_triggers() { + procd_add_reload_interface_trigger wan* + procd_add_reload_trigger shadowsocks-rust + procd_open_validate + validate_server_section + validate_ss_local_section + validate_ss_redir_section + validate_ss_rules_section + validate_ss_server_section + validate_ss_tunnel_section + procd_close_validate +} + +ss_validate_mklocal() { + local tuple opts + + shift 2 + for tuple in "$@"; do + opts="${tuple%%:*} $opts" + done + [ -z "$opts" ] || echo "local $opts" +} + +ss_validate() { + uci_validate_section shadowsocks-rust "$@" +} + +validate_common_server_options_() { + local cfgtype="$1"; shift + local cfg="$1"; shift + local func="$1"; shift + local stream_methods='"none", "plain", "chacha20-ietf-poly1305"' + local aead_methods='"aes-128-gcm", "aes-256-gcm","2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "chacha20-ietf-poly1305", "2022-blake3-chacha20-poly1305","2022-blake3-chacha8-poly1305"' + + "${func:-ss_validate}" "$cfgtype" "$cfg" "$@" \ + 'disabled:bool:0' \ + 'server:host' \ + 'server_port:port' \ + 'password:string' \ + "method:or($stream_methods, $aead_methods)" \ + 'plugin:string' \ + 'plugin_opts:string' \ + 'obfs:bool:0' \ + 'obfs_plugin:or("v2ray","obfs"):v2ray' \ + 'obfs_type:or("http","tls"):http' +} + +validate_common_client_options_() { + validate_common_options_ "$@" \ + 'server:uci("shadowsocks-rust", "@server")' \ + 'local_address:host:0.0.0.0' \ + 'local_port:port' +} + +validate_common_options_() { + local cfgtype="$1"; shift + local cfg="$1"; shift + local func="$1"; shift + + "${func:-ss_validate}" "$cfgtype" "$cfg" "$@" \ + 'disabled:bool:0' \ + 'fast_open:bool:0' \ + 'ipv6_first:bool:0' \ + 'no_delay:bool:0' \ + 'mptcp:bool:0' \ + 'reuse_port:bool:0' \ + 'verbose:bool:0' \ + 'mode:or("tcp_only", "udp_only", "tcp_and_udp"):tcp_only' \ + 'mtu:uinteger' \ + 'timeout:uinteger' \ + 'user:string' +} + +validate_server_section() { + validate_common_server_options_ server "$1" "$2" +} + +validate_ss_local_section() { + validate_common_client_options_ ss_local "$1" "$2" +} + +validate_ss_redir_section() { + validate_common_client_options_ ss_redir "$1" "$2" +} + +validate_ss_rules_section() { + "${2:-ss_validate}" ss_rules "$1" \ + 'disabled:bool:0' \ + 'redir_tcp:or(uci("shadowsocks-rust", "@ss_redir"),"all")' \ + 'redir_udp:or(uci("shadowsocks-rust", "@ss_redir"),"all")' \ + 'src_ips_bypass:or(ipaddr,cidr)' \ + 'src_ips_forward:or(ipaddr,cidr)' \ + 'src_ips_checkdst:or(ipaddr,cidr)' \ + 'dst_ips_bypass_file:file' \ + 'dst_ips_bypass:or(ipaddr,cidr)' \ + 'dst_ips_forward_file:file' \ + 'dst_ips_forward:or(ipaddr,cidr)' \ + 'src_default:or("bypass", "forward", "checkdst"):checkdst' \ + 'dst_default:or("bypass", "forward"):bypass' \ + 'local_default:or("bypass", "forward", "checkdst"):bypass' \ + 'dst_forward_recentrst:bool:0' \ + 'ifnames:maxlength(15)' \ + 'ipt_args:string' +} + +validate_ss_server_section() { + validate_common_server_options_ ss_server "$1" \ + validate_common_options_ \ + "$2" \ + 'bind_address:ipaddr' +} + +validate_ss_tunnel_section() { + validate_common_client_options_ ss_tunnel "$1" \ + "$2" \ + 'tunnel_address:regex(".+\:[0-9]+")' +} diff --git a/shadowsocks-rust/files/ssr-rules b/shadowsocks-rust/files/ssr-rules new file mode 100755 index 000000000..e945d9ef9 --- /dev/null +++ b/shadowsocks-rust/files/ssr-rules @@ -0,0 +1,301 @@ +#!/bin/sh -e +# +# Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) +# +# The design idea was derived from ss-rules by Jian Chang +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +if [ -f /usr/sbin/iptables-legacy ]; then + IPTABLES="/usr/sbin/iptables-legacy" + IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore" + IPTABLESSAVE="/usr/sbin/iptables-legacy-save" +else + IPTABLES="/usr/sbin/iptables" + IPTABLESRESTORE="/usr/sbin/iptables-restore" + IPTABLESSAVE="/usr/sbin/iptables-save" +fi + + +ss_rules_usage() { + cat >&2 < Local port number of ss-redir with TCP mode + -L Local port number of ss-redir with UDP mode + -s List of ip addresses of remote shadowsocks server + --ifnames Only apply rules on packets from these ifnames + --src-bypass + --src-forward + --src-checkdst + --src-default + Packets will have their src ip checked in order against + bypass, forward, checkdst list and will bypass, forward + through, or continue to have their dst ip checked + respectively on the first match. Otherwise, --src-default + decide the default action + --dst-bypass + --dst-forward + --dst-bypass-file + --dst-forward-file + --dst-default + Same as with their --src-xx equivalent + --dst-forward-recentrst + Forward those packets whose destinations have recently + sent to us multiple tcp-rst packets + --local-default + Default action for local out TCP traffic + +The following ipsets will be created by ss-rules. They are also intended to be +populated by other programs like dnsmasq with ipset support + + ss_rules_src_bypass + ss_rules_src_forward + ss_rules_src_checkdst + ss_rules_dst_bypass + ss_rules_dst_bypass_all + ss_rules_dst_forward +EOF +} + +o_dst_bypass_=" + 0.0.0.0/8 + 10.0.0.0/8 + 100.64.0.0/10 + 127.0.0.0/8 + 169.254.0.0/16 + 172.16.0.0/12 + 192.0.0.0/24 + 192.0.2.0/24 + 192.31.196.0/24 + 192.52.193.0/24 + 192.88.99.0/24 + 192.168.0.0/16 + 192.175.48.0/24 + 198.18.0.0/15 + 198.51.100.0/24 + 203.0.113.0/24 + 224.0.0.0/4 + 240.0.0.0/4 + 255.255.255.255 +" +o_src_default=bypass +o_dst_default=bypass +o_local_default=bypass + +__errmsg() { + echo "ss-rules: $*" >&2 +} + +ss_rules_parse_args() { + while [ "$#" -gt 0 ]; do + case "$1" in + -h|--help) ss_rules_usage; exit 0;; + -f|--flush) ss_rules_flush; exit 0;; + -l) o_redir_tcp_port="$2"; shift 2;; + -L) o_redir_udp_port="$2"; shift 2;; + -s) o_remote_servers="$2"; shift 2;; + --ifnames) o_ifnames="$2"; shift 2;; + --ipt-extra) o_ipt_extra="$2"; shift 2;; + --src-default) o_src_default="$2"; shift 2;; + --dst-default) o_dst_default="$2"; shift 2;; + --local-default) o_local_default="$2"; shift 2;; + --src-bypass) o_src_bypass="$2"; shift 2;; + --src-forward) o_src_forward="$2"; shift 2;; + --src-checkdst) o_src_checkdst="$2"; shift 2;; + --dst-bypass) o_dst_bypass="$2"; shift 2;; + --dst-bypass_all) o_dst_bypass_all="$2"; shift 2;; + --dst-forward) o_dst_forward="$2"; shift 2;; + --dst-forward-recentrst) o_dst_forward_recentrst=1; shift 1;; + --dst-bypass-file) o_dst_bypass_file="$2"; shift 2;; + --dst-forward-file) o_dst_forward_file="$2"; shift 2;; + --rule-name) rule="$2"; shift 2;; + *) __errmsg "unknown option $1"; return 1;; + esac + done + + if [ -z "$o_redir_tcp_port" -a -z "$o_redir_udp_port" ]; then + __errmsg "Requires at least -l or -L option" + return 1 + fi + if [ -n "$o_dst_forward_recentrst" ] && ! $IPTABLES -w -m recent -h >/dev/null; then + __errmsg "Please install iptables-mod-conntrack-extra with opkg" + return 1 + fi + o_remote_servers="$(for s in $o_remote_servers; do resolveip -4 "$s"; done)" +} + +ss_rules_flush() { + local setname + + $IPTABLESSAVE --counters 2>/dev/null | grep -v ssr_ | $IPTABLESRESTORE --counters + while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done + ip route flush table 100 || true + for setname in $(ipset -n list | grep "ssr_${rule}"); do + ipset destroy "$setname" 2>/dev/null || true + done +} + +ss_rules_ipset_init() { + ipset --exist restore <<-EOF + create ssr_${rule}_src_bypass hash:net hashsize 64 + create ssr_${rule}_src_forward hash:net hashsize 64 + create ssr_${rule}_src_checkdst hash:net hashsize 64 + create ss_rules_dst_bypass_all hash:net hashsize 64 + create ssr_${rule}_dst_bypass hash:net hashsize 64 + create ssr_${rule}_dst_bypass_ hash:net hashsize 64 + create ssr_${rule}_dst_forward hash:net hashsize 64 + create ss_rules_dst_forward_recentrst_ hash:ip hashsize 64 timeout 3600 + $(ss_rules_ipset_mkadd ssr_${rule}_dst_bypass_ "$o_dst_bypass_ $o_remote_servers") + $(ss_rules_ipset_mkadd ss_rules_dst_bypass_all "$o_dst_bypass_all") + $(ss_rules_ipset_mkadd ssr_${rule}_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')") + $(ss_rules_ipset_mkadd ssr_${rule}_src_bypass "$o_src_bypass") + $(ss_rules_ipset_mkadd ssr_${rule}_src_forward "$o_src_forward") + $(ss_rules_ipset_mkadd ssr_${rule}_src_checkdst "$o_src_checkdst") + $(ss_rules_ipset_mkadd ssr_${rule}_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')") + EOF +} + +ss_rules_ipset_mkadd() { + local setname="$1"; shift + local i + + for i in $*; do + echo "add $setname $i" + done +} + +ss_rules_iptchains_init() { + ss_rules_iptchains_init_mark + ss_rules_iptchains_init_tcp + ss_rules_iptchains_init_udp +} + +ss_rules_iptchains_init_mark() { + if [ "$($IPTABLES -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then + $IPTABLESRESTORE --noflush <<-EOF + *mangle + -A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 + COMMIT + EOF + fi +} + +ss_rules_iptchains_init_tcp() { + local local_target + + [ -n "$o_redir_tcp_port" ] || return 0 + + ss_rules_iptchains_init_ nat tcp + + case "$o_local_default" in + checkdst) local_target=ssr_${rule}_dst ;; + forward) local_target=ssr_${rule}_forward ;; + bypass|*) return 0;; + esac + if [ "$($IPTABLESSAVE 2>/dev/null | grep ssr_${rule}_local_out | grep ssr_${rule}_dst_bypass)" = "" ]; then + $IPTABLESRESTORE --noflush <<-EOF + *nat + :ssr_${rule}_local_out - + -I OUTPUT 1 -p tcp -j ssr_${rule}_local_out + -A ssr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A ssr_${rule}_local_out -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A ssr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN + -A ssr_${rule}_local_out -m mark --mark 0x539 -j RETURN + -A ssr_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" + COMMIT + EOF + fi +} + +ss_rules_iptchains_init_udp() { + [ -n "$o_redir_udp_port" ] || return 0 + ss_rules_iptchains_init_ mangle udp +} + +ss_rules_iptchains_init_() { + local table="$1" + local proto="$2" + local forward_rules + local src_default_target dst_default_target + local recentrst_mangle_rules recentrst_addset_rules + + case "$proto" in + tcp) + forward_rules="-A ssr_${rule}_forward -p tcp -j REDIRECT --to-ports $o_redir_tcp_port" + if [ -n "$o_dst_forward_recentrst" ]; then + recentrst_mangle_rules=" + *mangle + -I PREROUTING 1 -p tcp -m tcp --tcp-flags RST RST -m recent --name ss_rules_recentrst --set --rsource + COMMIT + " + recentrst_addset_rules=" + -A ssr_${rule}_dst -m recent --name ss_rules_recentrst --rcheck --rdest --seconds 3 --hitcount 3 -j SET --add-set ss_rules_dst_forward_recentrst_ dst --exist + -A ssr_${rule}_dst -m set --match-set ss_rules_dst_forward_recentrst_ dst -j ssr_${rule}_forward + " + fi + ;; + udp) + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true + forward_rules="-A ssr_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" + ;; + esac + case "$o_src_default" in + forward) src_default_target=ssr_${rule}_forward ;; + checkdst) src_default_target=ssr_${rule}_dst ;; + bypass|*) src_default_target=RETURN ;; + esac + case "$o_dst_default" in + forward) dst_default_target=ssr_${rule}_forward ;; + bypass|*) dst_default_target=RETURN ;; + esac + sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IPTABLESRESTORE --noflush + *$table + :ssr_${rule}_pre_src - + :ssr_${rule}_src - + :ssr_${rule}_dst - + :ssr_${rule}_forward - + $(ss_rules_iptchains_mkprerules "$proto") + -A ssr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN + -A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 + -A ssr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A ssr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A ssr_${rule}_pre_src -m mark --mark 0x539 -j RETURN + -A ssr_${rule}_dst -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A ssr_${rule}_dst -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A ssr_${rule}_pre_src -p $proto $o_ipt_extra -j ssr_${rule}_src + -A ssr_${rule}_src -m set --match-set ssr_${rule}_src_bypass src -j RETURN + -A ssr_${rule}_src -m set --match-set ssr_${rule}_src_forward src -j ssr_${rule}_forward + -A ssr_${rule}_src -m set --match-set ssr_${rule}_src_checkdst src -j ssr_${rule}_dst + -A ssr_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default" + -A ssr_${rule}_dst -m set --match-set ssr_${rule}_dst_forward dst -j ssr_${rule}_forward + $recentrst_addset_rules + -A ssr_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default" + $forward_rules + COMMIT + $recentrst_mangle_rules + EOF +} + +ss_rules_iptchains_mkprerules() { + local proto="$1" + + if [ -z "$o_ifnames" ]; then + echo "-A PREROUTING -p $proto -j ssr_${rule}_pre_src" + else + echo $o_ifnames \ + | tr ' ' '\n' \ + | sed "s/.*/-I PREROUTING 1 -i \\0 -p $proto -j ssr_${rule}_pre_src/" + fi +} + +ss_rules_parse_args "$@" +#ss_rules_flush +ss_rules_ipset_init +ss_rules_iptchains_init diff --git a/shadowsocks-rust/files/ssr-rules.defaults b/shadowsocks-rust/files/ssr-rules.defaults new file mode 100755 index 000000000..2c5011c13 --- /dev/null +++ b/shadowsocks-rust/files/ssr-rules.defaults @@ -0,0 +1,12 @@ +#!/bin/sh + +s=firewall.ssr_rules +uci get "$s" >/dev/null || { + uci batch <<-EOF + set $s=include + set $s.path=/etc/firewall.ssr-rules + set $s.reload=1 + commit firewall + EOF +} +exit 0 \ No newline at end of file diff --git a/shadowsocks-rust/files/ssr-rules6 b/shadowsocks-rust/files/ssr-rules6 new file mode 100755 index 000000000..2c2a3eddc --- /dev/null +++ b/shadowsocks-rust/files/ssr-rules6 @@ -0,0 +1,285 @@ +#!/bin/sh -e +# +# Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) +# +# The design idea was derived from ss-rules by Jian Chang +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +if [ -f /usr/sbin/iptables-legacy ]; then + IP6TABLES="/usr/sbin/ip6tables-legacy" + IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore" + IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save" +else + IP6TABLES="/usr/sbin/ip6tables" + IP6TABLESRESTORE="/usr/sbin/ip6tables-restore" + IP6TABLESSAVE="/usr/sbin/ip6tables-save" +fi + + + +ss_rules6_usage() { + cat >&2 < Local port number of ss-redir with TCP mode + -L Local port number of ss-redir with UDP mode + -s List of ip addresses of remote shadowsocks server + --ifnames Only apply rules on packets from these ifnames + --src-bypass + --src-forward + --src-checkdst + --src-default + Packets will have their src ip checked in order against + bypass, forward, checkdst list and will bypass, forward + through, or continue to have their dst ip checked + respectively on the first match. Otherwise, --src-default + decide the default action + --dst-bypass + --dst-forward + --dst-bypass-file + --dst-forward-file + --dst-default + Same as with their --src-xx equivalent + --dst-forward-recentrst + Forward those packets whose destinations have recently + sent to us multiple tcp-rst packets + --local-default + Default action for local out TCP traffic + +The following ipsets will be created by ss-rules. They are also intended to be +populated by other programs like dnsmasq with ipset support + + ss_rules6_src_bypass + ss_rules6_src_forward + ss_rules6_src_checkdst + ss_rules6_dst_bypass + ss_rules6_dst_forward +EOF +} + +o_dst_bypass_=" + fe80::/10 + fd00::/8 + ::1 +" +o_src_default=bypass +o_dst_default=bypass +o_local_default=bypass + +__errmsg() { + echo "ss-rules6: $*" >&2 +} + +ss_rules6_parse_args() { + while [ "$#" -gt 0 ]; do + case "$1" in + -h|--help) ss_rules6_usage; exit 0;; + -f|--flush) ss_rules6_flush; exit 0;; + -l) o_redir_tcp_port="$2"; shift 2;; + -L) o_redir_udp_port="$2"; shift 2;; + -s) o_remote_servers="$2"; shift 2;; + --ifnames) o_ifnames="$2"; shift 2;; + --ipt-extra) o_ipt_extra="$2"; shift 2;; + --src-default) o_src_default="$2"; shift 2;; + --dst-default) o_dst_default="$2"; shift 2;; + --local-default) o_local_default="$2"; shift 2;; + --src-bypass) o_src_bypass="$2"; shift 2;; + --src-forward) o_src_forward="$2"; shift 2;; + --src-checkdst) o_src_checkdst="$2"; shift 2;; + --dst-bypass) o_dst_bypass="$2"; shift 2;; + --dst-bypass_all) o_dst_bypass_all="$2"; shift 2;; + --dst-forward) o_dst_forward="$2"; shift 2;; + --dst-forward-recentrst) o_dst_forward_recentrst=1; shift 1;; + --dst-bypass-file) o_dst_bypass_file="$2"; shift 2;; + --dst-forward-file) o_dst_forward_file="$2"; shift 2;; + --rule-name) rule="$2"; shift 2;; + *) __errmsg "unknown option $1"; return 1;; + esac + done + + if [ -z "$o_redir_tcp_port" -a -z "$o_redir_udp_port" ]; then + __errmsg "Requires at least -l or -L option" + return 1 + fi + if [ -n "$o_dst_forward_recentrst" ] && ! $IP6TABLES -w -m recent -h >/dev/null; then + __errmsg "Please install ip6tables-mod-conntrack-extra with opkg" + return 1 + fi + o_remote_servers="$(for s in $o_remote_servers; do resolveip -6 "$s"; done)" +} + +ss_rules6_flush() { + local setname + + $IP6TABLESSAVE --counters 2>/dev/null | grep -v ssr6_ | $IP6TABLESRESTORE --counters + while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done + ip -f inet6 route flush table 100 || true + for setname in $(ipset -n list | grep "ssr6_${rule}"); do + ipset destroy "$setname" 2>/dev/null || true + done +} + +ss_rules6_ipset_init() { + ipset --exist restore <<-EOF + create ssr6_${rule}_src_bypass hash:net family inet6 hashsize 64 + create ssr6_${rule}_src_forward hash:net family inet6 hashsize 64 + create ssr6_${rule}_src_checkdst hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_bypass hash:net family inet6 hashsize 64 + create ss_rules6_dst_bypass_all hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_bypass_ hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_forward hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_forward_recrst_ hash:ip family inet6 hashsize 64 timeout 3600 + $(ss_rules6_ipset_mkadd ssr6_${rule}_dst_bypass_ "$o_dst_bypass_ $o_remote_servers") + $(ss_rules6_ipset_mkadd ss_rules6_dst_bypass_all "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + $(ss_rules6_ipset_mkadd ssr6_${rule}_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + $(ss_rules6_ipset_mkadd ssr6_${rule}_src_bypass "$o_src_bypass") + $(ss_rules6_ipset_mkadd ssr6_${rule}_src_forward "$o_src_forward") + $(ss_rules6_ipset_mkadd ssr6_${rule}_src_checkdst "$o_src_checkdst") + $(ss_rules6_ipset_mkadd ssr6_${rule}_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + EOF +} + +ss_rules6_ipset_mkadd() { + local setname="$1"; shift + local i + + for i in $*; do + echo "add $setname $i" + done +} + +ss_rules6_iptchains_init() { + ss_rules6_iptchains_init_mark + ss_rules6_iptchains_init_tcp + ss_rules6_iptchains_init_udp +} + +ss_rules6_iptchains_init_mark() { + if [ "$($IP6TABLES -w -t mangle -L PREROUTING | grep ss_rules6_dst_bypass_all)" = "" ]; then + $IP6TABLESRESTORE --noflush <<-EOF + *mangle + -A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539 + COMMIT + EOF + fi +} + + +ss_rules6_iptchains_init_tcp() { + local local_target + + [ -n "$o_redir_tcp_port" ] || return 0 + + ss_rules6_iptchains_init_ nat tcp + + case "$o_local_default" in + checkdst) local_target=ssr6_${rule}_dst ;; + forward) local_target=ssr6_${rule}_forward ;; + bypass|*) return 0;; + esac + + $IP6TABLESRESTORE --noflush <<-EOF + *nat + :ssr6_${rule}_local_out - + -I OUTPUT 1 -p tcp -j ssr6_${rule}_local_out + -A ssr6_${rule}_local_out -m set --match-set ssr6_${rule}_dst_bypass dst -j RETURN + -A ssr6_${rule}_local_out -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN + -A ssr6_${rule}_local_out -m set --match-set ssr6_${rule}_dst_bypass_ dst -j RETURN + -A ssr6_${rule}_local_out -m mark --mark 0x6539 -j RETURN + -A ssr6_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" + COMMIT + EOF +} + +ss_rules6_iptchains_init_udp() { + [ -n "$o_redir_udp_port" ] || return 0 + ss_rules6_iptchains_init_ mangle udp +} + +ss_rules6_iptchains_init_() { + local table="$1" + local proto="$2" + local forward_rules + local src_default_target dst_default_target + local recentrst_mangle_rules recentrst_addset_rules + + case "$proto" in + tcp) + forward_rules="-A ssr6_${rule}_forward -p tcp -j REDIRECT --to-ports $o_redir_tcp_port" + if [ -n "$o_dst_forward_recentrst" ]; then + recentrst_mangle_rules=" + *mangle + -I PREROUTING 1 -p tcp -m tcp --tcp-flags RST RST -m recent --name ss_rules6_recentrst --set --rsource + COMMIT + " + recentrst_addset_rules=" + -A ssr6_${rule}_dst -m recent --name ss_rules6_recentrst --rcheck --rdest --seconds 3 --hitcount 3 -j SET --add-set ss_rules6_dst_forward_recrst_ dst --exist + -A ssr6_${rule}_dst -m set --match-set ss_rules6_dst_forward_recrst_ dst -j ssr6_${rule}_forward + " + fi + ;; + udp) + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true + forward_rules="-A ssr6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" + ;; + esac + case "$o_src_default" in + forward) src_default_target=ssr6_${rule}_forward ;; + checkdst) src_default_target=ssr6_${rule}_dst ;; + bypass|*) src_default_target=RETURN ;; + esac + case "$o_dst_default" in + forward) dst_default_target=ssr6_${rule}_forward ;; + bypass|*) dst_default_target=RETURN ;; + esac + sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IP6TABLESRESTORE --noflush + *$table + :ssr6_${rule}_pre_src - + :ssr6_${rule}_src - + :ssr6_${rule}_dst - + :ssr6_${rule}_forward - + $(ss_rules6_iptchains_mkprerules "$proto") + -A ssr6_${rule}_pre_src -m set --match-set ssr6_${rule}_dst_bypass_ dst -j RETURN + -A ssr6_${rule}_pre_src -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -A ssr6_${rule}_pre_src -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN + -A ssr6_${rule}_pre_src -m set --match-set ssr6_${rule}_dst_bypass dst -j RETURN + -A ssr6_${rule}_pre_src -m mark --mark 0x6539 -j RETURN + -A ssr6_${rule}_dst -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN + -A ssr6_${rule}_dst -m set --match-set ssr6_${rule}_dst_bypass dst -j RETURN + -A ssr6_${rule}_pre_src -p $proto $o_ipt_extra -j ssr6_${rule}_src + -A ssr6_${rule}_src -m set --match-set ssr6_${rule}_src_bypass src -j RETURN + -A ssr6_${rule}_src -m set --match-set ssr6_${rule}_src_forward src -j ssr6_${rule}_forward + -A ssr6_${rule}_src -m set --match-set ssr6_${rule}_src_checkdst src -j ssr6_${rule}_dst + -A ssr6_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default" + -A ssr6_${rule}_dst -m set --match-set ssr6_${rule}_dst_forward dst -j ssr6_${rule}_forward + $recentrst_addset_rules + -A ssr6_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default" + $forward_rules + COMMIT + $recentrst_mangle_rules + EOF +} + +ss_rules6_iptchains_mkprerules() { + local proto="$1" + + if [ -z "$o_ifnames" ]; then + echo "-A PREROUTING -p $proto -j ssr6_${rule}_pre_src" + else + echo $o_ifnames \ + | tr ' ' '\n' \ + | sed "s/.*/-I PREROUTING 1 -i \\0 -p $proto -j ssr6_${rule}_pre_src/" + fi +} + +ss_rules6_parse_args "$@" +ss_rules6_flush +ss_rules6_ipset_init +ss_rules6_iptchains_init diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index e2195cd56..f89c9d1bd 100755 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -13,7 +13,7 @@ PKG_RELEASE:=1 #PKG_HASH:=599fcd264537e39178b6008a11af68816dfd1609e19a9cf8adc8b2a4240ee370 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core.git -PKG_SOURCE_VERSION:=d58649764e3afa52234ada9a28b7ae79577a23a9 +PKG_SOURCE_VERSION:=8de2f27043b00612986d96f37975cd4aa98b49c3 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE diff --git a/v2ray-core/files/etc/init.d/v2ray b/v2ray-core/files/etc/init.d/v2ray index 7adbfa052..865297512 100755 --- a/v2ray-core/files/etc/init.d/v2ray +++ b/v2ray-core/files/etc/init.d/v2ray @@ -328,6 +328,7 @@ inbound_section_validate() { 'ss_quic_key:string' \ 'ss_quic_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ 'ss_sockopt_tcp_fast_open:or("0", "1")' \ + 'ss_sockopt_mptcp:or("0", "1")' \ 'ss_sockopt_tproxy:or("redirect", "tproxy", "off")' \ 'tag:string' \ 'sniffing_enabled:bool:0' \ @@ -426,6 +427,7 @@ outbound_section_validate() { 'ss_quic_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ 'ss_sockopt_mark:uinteger' \ 'ss_sockopt_tcp_fast_open:or("0", "1")' \ + 'ss_sockopt_mptcp:or("0", "1")' \ 'stream_settings:string' \ 'proxy_settings_tag:string' \ 'mux_enabled:bool:0' \ @@ -1371,12 +1373,13 @@ add_inbound_setting() { # else test -n "$ss_sockopt_tcp_fast_open" && \ json_add_boolean "tcpFastOpen" "$ss_sockopt_tcp_fast_open" + if version_over_5_4; then + test -n "$ss_sockopt_mptcp" && \ + json_add_boolean "mptcp" "$ss_sockopt_mptcp" + fi test -n "$ss_sockopt_tproxy" && \ json_add_string "tproxy" "$ss_sockopt_tproxy" # fi - if version_over_5_4; then - json_add_boolean "mptcp" "1" - fi json_close_object # sockopt @@ -1843,6 +1846,10 @@ add_outbound_setting() { test -n "$ss_sockopt_tcp_fast_open" && \ json_add_boolean "tcpFastOpen" "$ss_sockopt_tcp_fast_open" + if version_over_5_4; then + test -n "$ss_sockopt_mptcp" && \ + json_add_boolean "mptcp" "$ss_sockopt_mptcp" + fi json_close_object # sockopt diff --git a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray index df545a5b6..64d18278d 100755 --- a/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray +++ b/v2ray-core/files/etc/uci-defaults/3010-omr-v2ray @@ -75,6 +75,7 @@ if [ -z "$(uci -q get v2ray.main)" ]; then add_list v2ray.omr.s_dokodemo_door_network='udp' set v2ray.omr.ss_sockopt_tproxy='redirect' set v2ray.omr.ss_sockopt_tcp_fast_open='1' + set v2ray.omr.ss_sockopt_mptcp='1' set v2ray.omr.s_dokodemo_door_follow_redirect='1' set v2ray.omr6=inbound set v2ray.omr6.tag='omrtunnel6' @@ -196,5 +197,10 @@ if [ "$(uci -q get v2ray.omrout.s_socks_port)" = "" ]; then commit v2ray EOF fi +if [ "$(uci -q get v2ray.omrout.ss_sockopt_mptcp)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set v2ray.omr.ss_sockopt_mptcp='1' + EOF +fi exit 0 \ No newline at end of file diff --git a/v2ray-core/patches/add-mptcp-support.patch b/v2ray-core/patches/add-mptcp-support.patch index 85ba7a316..deb0ac78d 100644 --- a/v2ray-core/patches/add-mptcp-support.patch +++ b/v2ray-core/patches/add-mptcp-support.patch @@ -4,50 +4,6 @@ Date: Sat, 29 Jul 2023 14:56:58 +0800 Subject: [PATCH] support mptcp --- -diff --git a/go.mod b/go.mod -index e3881e5aa..73599d927 100644 ---- a/go.mod -+++ b/go.mod -@@ -16,7 +16,7 @@ require ( - github.com/mustafaturan/bus v1.0.2 - github.com/pelletier/go-toml v1.9.5 - github.com/pires/go-proxyproto v0.7.0 -- github.com/quic-go/quic-go v0.36.2 -+ github.com/quic-go/quic-go v0.37.0 - github.com/refraction-networking/utls v1.3.3 - github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb - github.com/stretchr/testify v1.8.4 -@@ -65,8 +65,7 @@ require ( - github.com/pion/sctp v1.8.7 // indirect - github.com/pion/transport/v2 v2.2.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect -- github.com/quic-go/qtls-go1-19 v0.3.2 // indirect -- github.com/quic-go/qtls-go1-20 v0.2.2 // indirect -+ github.com/quic-go/qtls-go1-20 v0.3.0 // indirect - github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect - github.com/secure-io/siv-go v0.0.0-20180922214919-5ff40651e2c4 // indirect - github.com/xtaci/smux v1.5.24 // indirect -diff --git a/go.sum b/go.sum -index 0ce21101c..63298b0c1 100644 ---- a/go.sum -+++ b/go.sum -@@ -260,12 +260,10 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 - github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= - github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= - github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= --github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= --github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= --github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= --github.com/quic-go/qtls-go1-20 v0.2.2/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= --github.com/quic-go/quic-go v0.36.2 h1:ZX/UNQ4gvpCv2RmwdbA6lrRjF6EBm5yZ7TMoT4NQVrA= --github.com/quic-go/quic-go v0.36.2/go.mod h1:zPetvwDlILVxt15n3hr3Gf/I3mDf7LpLKPhR4Ez0AZQ= -+github.com/quic-go/qtls-go1-20 v0.3.0 h1:NrCXmDl8BddZwO67vlvEpBTwT89bJfKYygxv4HQvuDk= -+github.com/quic-go/qtls-go1-20 v0.3.0/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -+github.com/quic-go/quic-go v0.37.0 h1:wf/Ym2yeWi98oQn4ahiBSqdnaXVxNQGj2oBQFgiVChc= -+github.com/quic-go/quic-go v0.37.0/go.mod h1:XtCUOCALTTWbPyd0IxFfHf6h0sEMubRFvEYHl3QxKw8= - github.com/refraction-networking/utls v1.3.3 h1:f/TBLX7KBciRyFH3bwupp+CE4fzoYKCirhdRcC490sw= - github.com/refraction-networking/utls v1.3.3/go.mod h1:DlecWW1LMlMJu+9qpzzQqdHDT/C2LAe03EdpLUz/RL8= - github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg= diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index 314664a78..96bb0eca1 100644 --- a/transport/internet/system_dialer.go diff --git a/xray-core/Makefile b/xray-core/Makefile new file mode 100644 index 000000000..4caa7ef87 --- /dev/null +++ b/xray-core/Makefile @@ -0,0 +1,68 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=xray-core +PKG_VERSION:=1.8.5 +PKG_RELEASE:=1 + +PKG_LICENSE:=MPLv2 +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Yannick Chabanois +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/XTLS/Xray-core.git +PKG_SOURCE_VERSION:=585d5ba7c8b64f6da60837546a70bbcfd2350c64 + +PKG_BUILD_DEPENDS:=golang/host +PKG_BUILD_PARALLEL:=1 + +GO_PKG:=github.com/XTLS/Xray-core + +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/openmptcprouter/golang/golang-package.mk + +define Package/$(PKG_NAME) + SECTION:=Custom + CATEGORY:=Extra packages + TITLE:=Xray-core + DEPENDS:=$(GO_ARCH_DEPENDS) + PROVIDES:=xray-core +endef + +define Package/$(PKG_NAME)/description + Xray-core bare bones binary (compiled without cgo) +endef + +define Package/$(PKG_NAME)/config +menu "Xray Configuration" + depends on PACKAGE_$(PKG_NAME) + +config PACKAGE_XRAY_ENABLE_GOPROXY_IO + bool "Use goproxy.io to speed up module fetching (recommended for some network situations)" + default n + +endmenu +endef + +USE_GOPROXY:= +ifdef CONFIG_PACKAGE_XRAY_ENABLE_GOPROXY_IO + USE_GOPROXY:=GOPROXY=https://goproxy.io,direct +endif + +MAKE_PATH:=$(GO_PKG_WORK_DIR_NAME)/build/src/$(GO_PKG) +MAKE_VARS += $(GO_PKG_VARS) + +#define Build/Patch +# $(CP) $(PKG_BUILD_DIR)/../Xray-core-$(PKG_VERSION)/* $(PKG_BUILD_DIR) +# $(Build/Patch/Default) +#endef + +define Build/Compile + cd $(PKG_BUILD_DIR); $(GO_PKG_VARS) $(USE_GOPROXY) CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o $(PKG_INSTALL_DIR)/bin/xray ./main; +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/xray $(1)/usr/bin/xray + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/xray-core/files/etc/firewall.xray-rules b/xray-core/files/etc/firewall.xray-rules new file mode 100644 index 000000000..2aac68055 --- /dev/null +++ b/xray-core/files/etc/firewall.xray-rules @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/init.d/xray rules_up diff --git a/xray-core/files/etc/init.d/xray b/xray-core/files/etc/init.d/xray new file mode 100755 index 000000000..f3c0566c3 --- /dev/null +++ b/xray-core/files/etc/init.d/xray @@ -0,0 +1,2282 @@ +#!/bin/sh /etc/rc.common +# +# Copyright 2019-2020 Xingwang Liao +# Copyright 2020-2022 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# Licensed to the public under the MIT License. +# + +START=99 +USE_PROCD=1 +EXTRA_COMMANDS="rules_up rules_down rules_exist" + +NAME=xray +CONFIG_FOLDER=/var/etc/$NAME + +FILE_XRAY_DNSMASQ=/tmp/dnsmasq.d/$NAME +FILE_XRAY_DNSMASQ_CACHE=/tmp/$NAME.dnsmasq.cache + +IPSET_SRC_IGNORE_V4=xray_src_ignore_v4 +IPSET_SRC_IGNORE_V6=xray_src_ignore_v6 +IPSET_DST_PROXY_V4=xray_dst_proxy_v4 +IPSET_DST_PROXY_V6=xray_dst_proxy_v6 +IPSET_SRC_DIRECT_V4=ss_rules_src_bypass +IPSET_DST_DIRECT_V4=ss_rules_dst_bypass +IPSET_DST_DIRECT_V6=ss_rules6_dst_bypass + +OUTBOUND_SERVERS_V4= +OUTBOUND_SERVERS_V6= + +TRANSPARENT_PROXY_EXPECTED=0 +TRANSPARENT_PROXY_PORT= +TRANSPARENT_PROXY_USE_TPROXY= +TRANSPARENT_PROXY_ADDITION= + +DNSMASQ_RESTART_EXPECTED=0 + +. /usr/share/libubox/jshn.sh + +_log() { + local level="$1" ; shift + local msg="$@" + logger -p "daemon.$level" -t "$NAME" "$msg" + + echo "[$level] $msg" >&2 +} + +_info() { + _log "info" $@ +} + +_err() { + _log "err" $@ +} + +version_over_5_4() { + MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}') + MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}') + if [ $MAJOR_VERSION -ge 5 ] && [ $MINOR_VERSION -gt 13 ] || [ $MAJOR_VERSION -gt 5 ] ; then + return 0 + else + return 1 + fi +} + + +get_value_from_json() { + local json="$1" + local key="$2" + + test -n "$json" || return + + local value="" + + local old_ns + json_set_namespace "json_key" old_ns + json_load "$json" + json_get_var "$key" value + json_cleanup + json_set_namespace "$old_ns" + + echo "$value" +} + +get_commands_from_json() { + local json="$1" + + test -n "$json" || return + + jshn -r "$json" 2>/dev/null | grep -v "json_init" +} + +get_file_content() { + local filename="$1" + + test -n "$filename" || return + test -r "/etc/xray/${filename}.txt" || return + + cat "/etc/xray/${filename}.txt" | grep -v "^$" | grep -v "^#" +} + +append_server_ipv4() { + local addr="$1" + + test -n "$addr" || return + + if [ -z "$OUTBOUND_SERVERS_V4" ] ; then + OUTBOUND_SERVERS_V4="$addr" + else + OUTBOUND_SERVERS_V4="$(cat >&1 <<-EOF + $OUTBOUND_SERVERS_V4 + $addr + EOF + )" + fi +} + +append_server_ipv6() { + local addr="$1" + + test -n "$addr" || return + + if [ -z "$OUTBOUND_SERVERS_V6" ] ; then + OUTBOUND_SERVERS_V6="$addr" + else + OUTBOUND_SERVERS_V6="$(cat >&1 <<-EOF + $OUTBOUND_SERVERS_V6 + $addr + EOF + )" + fi +} + +append_server_address() { + local addr="$1" + + test -n "$addr" || return + + local ipv4 + for ipv4 in $(resolveip -4 -t 5 "$addr") ; do + append_server_ipv4 "$ipv4" + done + + local ipv6 + for ipv6 in $(resolveip -6 -t 5 "$addr") ; do + append_server_ipv6 "$ipv6" + done +} + +xray_section_validate() { + uci_validate_section "$NAME" "xray" "$1" \ + 'enabled:bool:0' \ + 'xray_file:string' \ + 'asset_location:directory' \ + 'mem_percentage:and(uinteger, max(100)):80' \ + 'config_file:file' \ + 'loglevel:or("debug", "info", "warning", "error", "none")' \ + 'access_log:string' \ + 'error_log:string' \ + 'stats_enabled:bool:0' \ + 'transport_enabled:bool:0' \ + 'inbounds:list(uci("xray", "@inbound"))' \ + 'outbounds:list(uci("xray", "@outbound"))' +} + +dns_section_validate() { + uci_validate_section "$NAME" "dns" "$1" \ + 'enabled:bool:0' \ + 'tag:string' \ + 'client_ip:ipaddr' \ + 'hosts:list(string)' \ + 'servers:list(uci("xray", "@dns_server"))' +} + +dns_server_section_validate() { + uci_validate_section "$NAME" "dns_server" "$1" \ + 'address:string' \ + 'port:port' \ + 'domains:list(string)' \ + 'expect_ips:list(string)' +} + +routing_section_validate() { + uci_validate_section "$NAME" "routing" "$1" \ + 'enabled:bool:0' \ + 'domain_strategy:or("AsIs", "IPIfNonMatch", "IPOnDemand")' \ + 'rules:list(uci("xray", "@routing_rule"))' \ + 'balancers:list(uci("xray", "@routing_balancer"))' +} + +routing_rule_section_validate() { + uci_validate_section "$NAME" "routing_rule" "$1" \ + 'type:"field"' \ + 'domain:list(string)' \ + 'ip:list(string)' \ + 'port:or(port, portrange)' \ + 'network:list(or("tcp", "udp"))' \ + 'source:list(string)' \ + 'user:list(string)' \ + 'inbound_tag:list(string)' \ + 'protocol:list(or("http", "tls", "bittorrent"))' \ + 'attrs:string' \ + 'outbound_tag:string' \ + 'balancer_tag:string' +} + +routing_balancer_section_validate() { + uci_validate_section "$NAME" "routing_balancer" "$1" \ + 'tag:string' \ + 'selector:list(string)' +} + +policy_section_validate() { + uci_validate_section "$NAME" "policy" "$1" \ + 'enabled:bool:0' \ + 'levels:list(uci("xray", "@policy_level"))' \ + 'system_stats_inbound_uplink:bool:0' \ + 'system_stats_inbound_downlink:bool:0' +} + +policy_level_section_validate() { + uci_validate_section "$NAME" "policy_level" "$1" \ + 'level:uinteger' \ + 'handshake:uinteger:4' \ + 'conn_idle:uinteger:300' \ + 'uplink_only:uinteger:2' \ + 'downlink_only:uinteger:5' \ + 'stats_user_uplink:bool:0' \ + 'stats_user_downlink:bool:0' \ + 'buffer_size:uinteger' +} + +reverse_section_validate() { + uci_validate_section "$NAME" "reverse" "$1" \ + 'enabled:bool:0' \ + 'bridges:list(string)' \ + 'portals:list(string)' +} + +inbound_section_validate() { + uci_validate_section "$NAME" "inbound" "$1" \ + 'port:or(port, portrange, string)' \ + 'listen:ipaddr' \ + 'protocol:string' \ + 's_dokodemo_door_address:host' \ + 's_dokodemo_door_port:port' \ + 's_dokodemo_door_network:list(or("tcp", "udp"))' \ + 's_dokodemo_door_timeout:uinteger' \ + 's_dokodemo_door_follow_redirect:bool:0' \ + 's_dokodemo_door_user_level:uiterger' \ + 's_http_account_user:string' \ + 's_http_account_pass:string' \ + 's_http_allow_transparent:bool:0' \ + 's_http_timeout:uinteger' \ + 's_http_user_level:uinteger' \ + 's_mtproto_user_email:string' \ + 's_mtproto_user_secret:string' \ + 's_mtproto_user_level:uinteger' \ + 's_shadowsocks_email:string' \ + 's_shadowsocks_method:string' \ + 's_shadowsocks_password:string' \ + 's_shadowsocks_level:uinteger' \ + 's_shadowsocks_ota:bool:0' \ + 's_shadowsocks_network:list(or("tcp", "udp")):tcp' \ + 's_socks_auth:or("noauth", "password")' \ + 's_socks_account_user:string' \ + 's_socks_account_pass:string' \ + 's_socks_udp:bool:0' \ + 's_socks_ip:host' \ + 's_socks_user_level:uinteger' \ + 's_vmess_client_id:string' \ + 's_vmess_client_alter_id:and(uinteger, max(65535))' \ + 's_vmess_client_email:string' \ + 's_vmess_client_user_level:uinteger' \ + 's_vmess_default_alter_id:and(uinteger, max(65535))' \ + 's_vmess_default_user_level:uinteger' \ + 's_vmess_detour_to:string' \ + 's_vmess_disable_insecure_encryption:bool:0' \ + 's_vless_client_id:string' \ + 's_vless_client_alter_id:and(uinteger, max(65535))' \ + 's_vless_client_email:string' \ + 's_vless_client_user_level:uinteger' \ + 's_vless_default_alter_id:and(uinteger, max(65535))' \ + 's_vless_default_user_level:uinteger' \ + 's_vless_detour_to:string' \ + 's_vless_disable_insecure_encryption:bool:0' \ + 's_trojan_client_id:string' \ + 's_trojan_client_alter_id:and(uinteger, max(65535))' \ + 's_trojan_client_email:string' \ + 's_trojan_client_user_level:uinteger' \ + 's_trojan_default_alter_id:and(uinteger, max(65535))' \ + 's_trojan_default_user_level:uinteger' \ + 's_trojan_detour_to:string' \ + 's_trojan_disable_insecure_encryption:bool:0' \ + 's_socks_client_id:string' \ + 's_socks_client_email:string:"openmptcprouter"' \ + 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ + 'ss_security:or("none", "tls")' \ + 'ss_tls_server_name:host' \ + 'ss_tls_alpn:string' \ + 'ss_tls_allow_insecure:bool:0' \ + 'ss_tls_allow_insecure_ciphers:bool:0' \ + 'ss_tls_disable_system_root:bool:0' \ + 'ss_tls_cert_usage:or("encipherment", "verify", "issue")' \ + 'ss_tls_cert_file:string' \ + 'ss_tls_key_file:string' \ + 'ss_tcp_header_type:or("none", "http")' \ + 'ss_tcp_header_request_version:string' \ + 'ss_tcp_header_request_method:string:GET' \ + 'ss_tcp_header_request_path:string' \ + 'ss_tcp_header_request_headers:list(string)' \ + 'ss_tcp_header_response_version:string' \ + 'ss_tcp_header_response_status:string' \ + 'ss_tcp_header_response_reason:string' \ + 'ss_tcp_header_response_headers:list(string)' \ + 'ss_kcp_mtu:and(min(576), max(1460))' \ + 'ss_kcp_tti:and(min(10), max(100))' \ + 'ss_kcp_uplink_capacity:uinteger' \ + 'ss_kcp_downlink_capacity:uinteger' \ + 'ss_kcp_congestion:bool:0' \ + 'ss_kcp_read_buffer_size:uinteger' \ + 'ss_kcp_write_buffer_size:uinteger' \ + 'ss_kcp_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ + 'ss_websocket_path:string' \ + 'ss_websocket_headers:list(string)' \ + 'ss_http_host:list(host)' \ + 'ss_http_path:string' \ + 'ss_domainsocket_path:string' \ + 'ss_quic_security:or("aes-128-gcm", "chacha20-poly1305", "none")' \ + 'ss_quic_key:string' \ + 'ss_quic_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ + 'ss_sockopt_tcp_fast_open:or("0", "1")' \ + 'ss_sockopt_mptcp:or("0", "1")' \ + 'ss_sockopt_tproxy:or("redirect", "tproxy", "off")' \ + 'tag:string' \ + 'sniffing_enabled:bool:0' \ + 'sniffing_dest_override:list(or("http", "tls"))' \ + 'allocate_strategy:or("always", "random")' \ + 'allocate_refresh:uinteger' \ + 'allocate_concurrency:uinteger' +} + +outbound_section_validate() { + uci_validate_section "$NAME" "outbound" "$1" \ + 'send_through:ipaddr' \ + 'protocol:string' \ + 'tag:string' \ + 's_blackhole_reponse_type:or("none", "http")' \ + 's_dns_network:or("tcp", "udp")' \ + 's_dns_address:string' \ + 's_dns_port:port' \ + 's_freedom_domain_strategy:or("AsIs", "UseIP", "UseIPv4", "UseIPv6")' \ + 's_freedom_redirect:string' \ + 's_freedom_user_level:uinteger' \ + 's_http_server_address:host' \ + 's_http_server_port:port' \ + 's_http_account_user:string' \ + 's_http_account_pass:string' \ + 's_shadowsocks_email:string' \ + 's_shadowsocks_address:host' \ + 's_shadowsocks_port:port' \ + 's_shadowsocks_method:string' \ + 's_shadowsocks_password:string' \ + 's_shadowsocks_level:uinteger' \ + 's_shadowsocks_ota:bool:0' \ + 's_socks_server_address:host' \ + 's_socks_server_port:port' \ + 's_socks_account_user:string' \ + 's_socks_account_pass:string' \ + 's_socks_user_level:uinteger' \ + 's_vmess_address:host' \ + 's_vmess_port:port' \ + 's_vmess_user_id:string' \ + 's_vmess_user_alter_id:and(uinteger, max(65535))' \ + 's_vmess_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ + 's_vmess_user_level:uinteger' \ + 's_vless_address:host' \ + 's_vless_port:port' \ + 's_vless_user_id:string' \ + 's_vless_user_alter_id:and(uinteger, max(65535))' \ + 's_vless_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ + 's_vless_user_encryption:or("auto", "none")' \ + 's_vless_user_level:uinteger' \ + 's_trojan_address:host' \ + 's_trojan_port:port' \ + 's_trojan_user_id:string' \ + 's_trojan_user_alter_id:and(uinteger, max(65535))' \ + 's_trojan_user_security:or("auto", "aes-128-gcm", "chacha20-poly1305", "none")' \ + 's_trojan_user_encryption:or("auto", "none")' \ + 's_trojan_user_level:uinteger' \ + 's_socks_address:host' \ + 's_socks_port:port' \ + 's_socks_user_id:string' \ + 's_socks_email:string:openmptcprouter' \ + 'ss_network:or("tcp", "kcp", "ws", "http", "domainsocket", "quic")' \ + 'ss_security:or("none", "tls")' \ + 'ss_tls_server_name:host' \ + 'ss_tls_alpn:string' \ + 'ss_tls_allow_insecure:bool:0' \ + 'ss_tls_allow_insecure_ciphers:bool:0' \ + 'ss_tls_disable_system_root:bool:0' \ + 'ss_tls_cert_usage:or("encipherment", "verify", "issue")' \ + 'ss_tls_cert_file:string' \ + 'ss_tls_key_file:string' \ + 'ss_tcp_header_type:or("none", "http")' \ + 'ss_tcp_header_request_version:string' \ + 'ss_tcp_header_request_method:string' \ + 'ss_tcp_header_request_path:string' \ + 'ss_tcp_header_request_headers:list(string)' \ + 'ss_tcp_header_response_version:string' \ + 'ss_tcp_header_response_status:string' \ + 'ss_tcp_header_response_reason:string' \ + 'ss_tcp_header_response_headers:list(string)' \ + 'ss_kcp_mtu:and(min(576), max(1460))' \ + 'ss_kcp_tti:and(min(10), max(100))' \ + 'ss_kcp_uplink_capacity:uinteger' \ + 'ss_kcp_downlink_capacity:uinteger' \ + 'ss_kcp_congestion:bool:0' \ + 'ss_kcp_read_buffer_size:uinteger' \ + 'ss_kcp_write_buffer_size:uinteger' \ + 'ss_kcp_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ + 'ss_websocket_path:string' \ + 'ss_websocket_headers:list(string)' \ + 'ss_http_host:list(host)' \ + 'ss_http_path:string' \ + 'ss_domainsocket_path:string' \ + 'ss_quic_security:or("aes-128-gcm", "chacha20-poly1305", "none")' \ + 'ss_quic_key:string' \ + 'ss_quic_header_type:or("none", "srtp", "utp", "wechat-video", "dtls", "wireguard")' \ + 'ss_sockopt_mark:uinteger' \ + 'ss_sockopt_tcp_fast_open:or("0", "1")' \ + 'ss_sockopt_mptcp:or("0", "1")' \ + 'stream_settings:string' \ + 'proxy_settings_tag:string' \ + 'mux_enabled:bool:0' \ + 'mux_concurrency:uinteger:8' +} + +add_xray_redirect_rules() { + local ext_args="$1" + local lan_devices="$2" + local lan_ipaddrs="$3" + + local port="$TRANSPARENT_PROXY_PORT" + local addition="$TRANSPARENT_PROXY_ADDITION" + local ipset_src_direct="$IPSET_SRC_DIRECT_V4" + local ipset_dst_direct="$IPSET_DST_DIRECT_V4" + + test -n "$port" || return + + # This part need a rewrite + xray-rules -f + #logger -t "xray" "xray-rules -l ${port} -L ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward" + commandline="-l ${port} -s $OUTBOUND_SERVERS_V4 --rule-name def --src-default forward --dst-default forward --local-default forward" + [ "$(uci -q get xray.main_transparent_proxy.redirect_udp)" = "1" ] && [ "$(uci -q get xray.omrout.protocol)" != "socks" ] && commandline="$commandline -L ${port}" + xray-rules $commandline + [ "$(uci -q get xray.main.inbounds | grep omr6)" != "" ] && [ -n "$OUTBOUND_SERVERS_V6" ] && { + xray-rules6 -f + commandline="-l $((port+1)) -L $((port+1)) -s $OUTBOUND_SERVERS_V6 --rule-name def --src-default forward --dst-default forward --local-default forward" + [ "$(uci -q get xray.main_transparent_proxy.redirect_udp)" = "1" ] && ([ "$(uci -q get xray.omrout.protocol)" = "vless" ] || [ "$(uci -q get xray.omrout.protocol)" = "vmess" ]) && commandline="$commandline -L ${port+1}" + xray-rules6 $commandline + } + [ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && { + logger -t "xray" "Reload omr-bypass rules" + /etc/init.d/omr-bypass reload_rules + } +} + +init_rules_for_listfile() { + local direct_list_dns="$1" + local proxy_list_dns="$2" + + echo "# AUTO-GENERATED FILE. DO NOT MODIFY." >"$FILE_XRAY_DNSMASQ_CACHE" + + # For direct list + local direct_content + direct_content="$(get_file_content "directlist")" + + if [ -n "$direct_content" ] ; then + echo "$direct_content" | \ + grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}(/[0-9]{1,2})?" | \ + sed "s/.*/add $IPSET_DST_DIRECT_V4 & timeout 0/" | \ + ipset -! restore 2>/dev/null + + echo "$direct_content" | \ + grep -oE "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}(/[0-9]{1,2})?" | \ + sed "s/.*/add $IPSET_DST_DIRECT_V6 & timeout 0/" | \ + ipset -! restore 2>/dev/null + + if [ -n "$direct_list_dns" ] ; then + echo "$direct_content" | \ + grep -oE "([0-9a-zA-Z_-]+\.)+[a-zA-Z]{2,}$" | \ + sed "s|.*|server=/&/$direct_list_dns\nipset=/&/$IPSET_DST_DIRECT_V4,$IPSET_DST_DIRECT_V6|" \ + >>"$FILE_XRAY_DNSMASQ_CACHE" + else + echo "$direct_content" | \ + grep -oE "([0-9a-zA-Z_-]+\.)+[a-zA-Z]{2,}$" | \ + sed "s|.*|ipset=/&/$IPSET_DST_DIRECT_V4,$IPSET_DST_DIRECT_V6|" \ + >>"$FILE_XRAY_DNSMASQ_CACHE" + fi + fi + + # For proxy list + local proxy_content + proxy_content="$(get_file_content "proxylist")" + + if [ -n "$proxy_content" ] ; then + echo "$proxy_content" | \ + grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}(/[0-9]{1,2})?" | \ + sed "s/.*/add $IPSET_DST_PROXY_V4 & timeout 0/" | \ + ipset -! restore 2>/dev/null + + echo "$proxy_content" | \ + grep -oE "([0-9a-fA-F]{0,4}:){1,7}([0-9a-fA-F]){0,4}(/[0-9]{1,2})?" | \ + sed "s/.*/add $IPSET_DST_PROXY_V6 & timeout 0/" | \ + ipset -! restore 2>/dev/null + + if [ -n "$proxy_list_dns" ] ; then + echo "$proxy_content" | \ + grep -oE "([0-9a-zA-Z_-]+\.)+[a-zA-Z]{2,}$" | \ + sed "s|.*|server=/&/$proxy_list_dns\nipset=/&/$IPSET_DST_PROXY_V4,$IPSET_DST_PROXY_V6|" \ + >>"$FILE_XRAY_DNSMASQ_CACHE" + else + echo "$proxy_content" | \ + grep -oE "([0-9a-zA-Z_-]+\.)+[a-zA-Z]{2,}$" | \ + sed "s|.*|ipset=/&/$IPSET_DST_PROXY_V4,$IPSET_DST_PROXY_V6|" \ + >>"$FILE_XRAY_DNSMASQ_CACHE" + fi + fi + + # For local devices outbound list + local src_content + src_content="$(get_file_content "srcdirectlist")" + + if [ -n "$src_content" ] ; then + echo "$src_content" | \ + grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}(/[0-9]{1,2})?" | \ + sed "s/.*/add $IPSET_SRC_DIRECT_V4 & timeout 0/" | \ + ipset -! restore 2>/dev/null + fi + +} + +gracefully_restart_dnsmasq() { + if [ "x$DNSMASQ_RESTART_EXPECTED" = "x1" ] && [ -x "/etc/init.d/dnsmasq" ] ; then + _info "Restarting dnsmasq..." + /etc/init.d/dnsmasq restart >/dev/null 2>&1 + DNSMASQ_RESTART_EXPECTED=0 + fi +} + +add_dns_settings() { + local section="${1}_dns" + + if ! dns_section_validate "$section" ; then + _err "Invalid DNS config: $section, skip" + return 1 + fi + + if [ "x$enabled" != "x1" ] ; then + _info "DNS disabled: $section" + return 0 + fi + + json_add_object "dns" + + test -n "$tag" && \ + json_add_string "tag" "$tag" + test -n "$client_ip" && \ + json_add_string "clientIp" "$client_ip" + + if [ -n "$hosts" ] ; then + json_add_object "hosts" + + local h + for h in $hosts ; do + local domain="$(echo "$h" | cut -d'|' -f1)" + local ip="$(echo "$h" | cut -d'|' -f2)" + + if [ -n "$domain" ] && [ -n "$ip" ] ; then + json_add_string "$domain" "$ip" + fi + done + + json_close_object # hosts + fi + + if [ -n "$servers" ] ; then + json_add_array "servers" + + for ss in $servers ; do + if dns_server_section_validate "$ss" ; then + if [ -z "$address" ] ; then + continue + fi + + if [ -z "${port}${domains}${expect_ips}" ] ; then + json_add_string "" "$address" + else + json_add_object "" + json_add_string "address" "$address" + + if [ -n "$port" ] ; then + json_add_int "port" "$port" + else + json_add_int "port" "53" + fi + + if [ -n "$domains" ] ; then + json_add_array "domains" + + local d + for d in $domains ; do + json_add_string "" "$d" + done + + json_close_array # domains + fi + + if [ -n "$expect_ips" ] ; then + json_add_array "expectIPs" + + local e + for e in $expect_ips ; do + json_add_string "" "$e" + done + + json_close_array # expectIPs + fi + + json_close_object + fi + fi + done + + json_close_array # servers + fi + + json_close_object # dns +} + +add_routing_settings() { + local section="${1}_routing" + + if ! routing_section_validate "$section" ; then + _err "Invalid routing config: $section, skip" + return 1 + fi + + if [ "x$enabled" != "x1" ] ; then + _info "Routing disabled: $section" + return 0 + fi + + json_add_object "routing" + + test -n "$domain_strategy" && \ + json_add_string "domainStrategy" "$domain_strategy" + + if [ -n "$rules" ] ; then + json_add_array "rules" + + local rs + for rs in $rules ; do + if routing_rule_section_validate "$rs" ; then + json_add_object "" + + json_add_string "type" "$type" + + if [ -n "$domain" ] ; then + json_add_array "domain" + + local d + for d in $domain ; do + json_add_string "" "$d" + done + + json_close_array # domain + fi + + if [ -n "$ip" ] ; then + json_add_array "ip" + + local i + for i in $ip ; do + json_add_string "" "$i" + done + + json_close_array # ip + fi + + if [ -n "$port" ] ; then + json_add_string "port" "$(echo "$port" | tr -s ' ' ',')" + fi + + if [ -n "$network" ] ; then + json_add_string "network" "$(echo "$network" | tr -s ' ' ',')" + fi + + if [ -n "$source" ] ; then + json_add_array "source" + + local s + for s in $source ; do + json_add_string "" "$s" + done + + json_close_array # source + fi + + if [ -n "$user" ] ; then + json_add_array "user" + + local u + for u in $user ; do + json_add_string "" "$u" + done + + json_close_array # user + fi + + if [ -n "$inbound_tag" ] ; then + json_add_array "inboundTag" + + local it + for it in $inbound_tag ; do + json_add_string "" "$it" + done + + json_close_array # inboundTag + fi + + if [ -n "$protocol" ] ; then + json_add_array "protocol" + local p + for p in $protocol ; do + json_add_string "" "$p" + done + json_close_array # protocol + fi + + test -n "$attrs" && \ + json_add_string "attrs" "$attrs" + test -n "$outbound_tag" && \ + json_add_string "outboundTag" "$outbound_tag" + test -n "$balancer_tag" && \ + json_add_string "balancerTag" "$balancer_tag" + + json_close_object + fi + done + + json_close_array # rules + fi + + if [ -n "$balancers" ] ; then + json_add_array "balancers" + + local bs + for bs in $balancers ; do + if routing_balancer_section_validate "$bs" ; then + json_add_object "" + json_add_string "tag" "$tag" + + json_add_array "selector" + + local s + for s in $selector ; do + json_add_string "" "$s" + done + + json_close_array # selector + json_close_object + fi + done + + json_close_array # balancers + fi + + json_close_object +} + +add_policy_settings() { + local section="${1}_policy" + + if ! policy_section_validate "$section" ; then + _err "Invalid policy config: $section, skip" + return 1 + fi + + if [ "x$enabled" != "x1" ] ; then + _info "Policy disabled: $section" + return 0 + fi + + json_add_object "policy" + + if [ -n "$levels" ] ; then + json_add_object "levels" + + local l_s + for l_s in $levels ; do + if policy_level_section_validate "$l_s" ; then + json_add_object "$level" + json_add_int "handshake" "$handshake" + json_add_int "connIdle" "$conn_idle" + json_add_int "uplinkOnly" "$uplink_only" + json_add_int "downlinkOnly" "$downlink_only" + json_add_boolean "statsUserUplink" "$stats_user_uplink" + json_add_boolean "statsUserDownlink" "$stats_user_downlink" + test -n "$buffer_size" && \ + json_add_int "bufferSize" "$buffer_size" + json_close_object + fi + done + + json_close_object # levels + fi + + json_add_object "system" + json_add_boolean "statsInboundUplink" "$system_stats_inbound_uplink" + json_add_boolean "statsInboundDownlink" "$system_stats_inbound_downlink" + json_close_object # system + + json_close_object # policy +} + +add_reverse_settings() { + local section="${1}_reverse" + + if ! reverse_section_validate "$section" ; then + _err "Invalid reverse config: $section, skip" + return 1 + fi + + if [ "x$enabled" != "x1" ] ; then + _info "Reverse disabled: $section" + return 0 + fi + + json_add_object "reverse" + + if [ -n "$bridges" ] ; then + json_add_array "bridges" + + local b + for b in $bridges ; do + local tag="$(echo "$b" | cut -d'|' -f1)" + local domain="$(echo "$b" | cut -d'|' -f2)" + if [ -n "$tag" ] && [ -n "$domain" ] ; then + json_add_object "" + json_add_string "tag" "$tag" + json_add_string "domain" "$domain" + json_close_object + fi + done + + json_close_array # bridges + fi + + if [ -n "$portals" ] ; then + json_add_array "portals" + + local p + for p in $portals ; do + local tag="$(echo "$p" | cut -d'|' -f1)" + local domain="$(echo "$p" | cut -d'|' -f2)" + if [ -n "$tag" ] && [ -n "$domain" ] ; then + json_add_object "" + json_add_string "tag" "$tag" + json_add_string "domain" "$domain" + json_close_object + fi + done + + json_close_array # portals + fi + + json_close_object # reverse +} + +add_transport_settings() { + local json + json="$(get_file_content "transport")" + + if [ -z "$json" ] ; then + _err "Invalid transport config: $key" + return 1 + fi + + json_add_object "transport" + eval "$(get_commands_from_json "$json")" + json_close_object # transport +} + +add_inbound_setting() { + local section="$1" + + if ! inbound_section_validate "$section" ; then + _err "Invalid inbound section: $section" + return 1 + fi + + json_add_object "" + + test -n "$listen" && \ + json_add_string "listen" "$listen" + json_add_int "port" "$port" + json_add_string "protocol" "$protocol" + + case "${protocol:-x}" in + "dokodemo-door") + json_add_object "settings" + + if [ -n "$port" ] && [ "x$port" = "x$TRANSPARENT_PROXY_PORT" ] ; then + local settings_network="tcp" + + test -n "$TRANSPARENT_PROXY_ADDITION" && \ + settings_network="$settings_network,udp" + + json_add_boolean "followRedirect" "1" + json_add_string "network" "$settings_network" + else + test -n "$s_dokodemo_door_address" && \ + json_add_string "address" "$s_dokodemo_door_address" + + test -n "$s_dokodemo_door_port" && \ + json_add_int "port" "$s_dokodemo_door_port" + + test -n "$s_dokodemo_door_follow_redirect" && \ + json_add_boolean "followRedirect" "$s_dokodemo_door_follow_redirect" + + test -n "$s_dokodemo_door_network" && \ + json_add_string "network" "$(echo "$s_dokodemo_door_network" | tr -s ' ' ',')" + fi + + test -n "$s_dokodemo_door_timeout" && \ + json_add_int "timeout" "$s_dokodemo_door_timeout" + + test -n "$s_dokodemo_door_user_level" && \ + json_add_int "userLevel" "$s_dokodemo_door_user_level" + + json_close_object # settings + ;; + "http") + json_add_object "settings" + + if [ -n "$s_http_account_user" ] ; then + json_add_array "accounts" + + json_add_object "" + json_add_string "user" "$s_http_account_user" + json_add_string "pass" "$s_http_account_pass" + json_close_object + + json_close_array # accounts + fi + + json_add_boolean "allowTransparent" "$s_http_allow_transparent" + + test -n "$s_http_timeout" && \ + json_add_int "timeout" "$s_http_timeout" + test -n "$s_http_user_level" && \ + json_add_int "userLevel" "$s_http_user_level" + + json_close_object # settings + ;; + "mtproto") + json_add_object "settings" + + if [ -n "$s_mtproto_user_email" ] ; then + json_add_array "users" + json_add_object "" + + json_add_string "email" "$s_mtproto_user_email" + json_add_string "secret" "$s_mtproto_user_secret" + + test -n "$s_mtproto_user_level" && \ + json_add_int "level" "$s_mtproto_user_level" + + json_close_object + json_close_array # users + fi + + json_close_object # settings + ;; + "shadowsocks") + json_add_object "settings" + + json_add_string "method" "$s_shadowsocks_method" + json_add_string "password" "$s_shadowsocks_password" + + test -n "$s_shadowsocks_email" && \ + json_add_string "email" "$s_shadowsocks_email" + test -n "$s_shadowsocks_level" && \ + json_add_int "level" "$s_shadowsocks_level" + + json_add_boolean "ota" "$s_shadowsocks_ota" + json_add_string "network" "$(echo "$s_shadowsocks_network" | tr -s ' ' ',')" + + json_close_object # settings + ;; + "socks") + json_add_object "settings" + + json_add_string "auth" "$s_socks_auth" + + if [ -n "$s_socks_account_user" ] ; then + json_add_array "accounts" + json_add_object "" + json_add_string "user" "$s_socks_account_user" + json_add_string "pass" "$s_socks_account_pass" + json_close_object + json_close_array # accounts + fi + if [ -n "$s_socks_client_id" ] ; then + json_add_array "accounts" + json_add_object "" + json_add_string "user" "$s_socks_email" + json_add_string "pass" "$s_socks_client_id" + json_close_object + json_close_array # accounts + fi + + json_add_boolean "udp" "$s_socks_udp" + + test -n "$s_socks_ip" && \ + json_add_string "ip" "$s_socks_ip" + test -n "$s_socks_user_level" && \ + json_add_int "userLevel" "$s_socks_user_level" + + json_close_object # settings + ;; + "vmess") + json_add_object "settings" + + if [ -n "$s_vmess_client_id" ] ; then + json_add_array "clients" + json_add_object "" + + json_add_string "id" "$s_vmess_client_id" + + test -n "$s_vmess_client_alter_id" && \ + json_add_int "alterId" "$s_vmess_client_alter_id" + test -n "$s_vmess_client_email" && \ + json_add_string "email" "$s_vmess_client_email" + test -n "$s_vmess_client_user_level" && \ + json_add_int "level" "$s_vmess_client_user_level" + + json_close_object + json_close_array # clients + fi + + json_add_object "default" + + test -n "$s_vmess_default_alter_id" && \ + json_add_int "alterId" "$s_vmess_default_alter_id" + test -n "$s_vmess_default_user_level" && \ + json_add_int "level" "$s_vmess_default_user_level" + + json_close_object # default + + if [ -n "$s_vmess_detour_to" ] ; then + json_add_object "detour" + json_add_string "to" "$s_vmess_detour_to" + json_close_object # detour + fi + + json_add_boolean "disableInsecureEncryption" "$s_vmess_disable_insecure_encryption" + + json_close_object # settings + ;; + "vless") + json_add_object "settings" + + if [ -n "$s_vless_client_id" ] ; then + json_add_array "clients" + json_add_object "" + + json_add_string "id" "$s_vless_client_id" + + test -n "$s_vless_client_alter_id" && \ + json_add_int "alterId" "$s_vless_client_alter_id" + test -n "$s_vless_client_email" && \ + json_add_string "email" "$s_vless_client_email" + test -n "$s_vless_client_user_level" && \ + json_add_int "level" "$s_vless_client_user_level" + + json_close_object + json_close_array # clients + fi + + json_add_object "default" + + test -n "$s_vless_default_alter_id" && \ + json_add_int "alterId" "$s_vless_default_alter_id" + test -n "$s_vless_default_user_level" && \ + json_add_int "level" "$s_vless_default_user_level" + + json_close_object # default + + if [ -n "$s_vless_detour_to" ] ; then + json_add_object "detour" + json_add_string "to" "$s_vless_detour_to" + json_close_object # detour + fi + + json_add_boolean "disableInsecureEncryption" "$s_vless_disable_insecure_encryption" + + json_close_object # settings + ;; + "trojan") + json_add_object "settings" + + if [ -n "$s_trojan_client_id" ] ; then + json_add_array "clients" + json_add_object "" + + json_add_string "password" "$s_trojan_client_id" + + test -n "$s_trojan_client_alter_id" && \ + json_add_int "alterId" "$s_trojan_client_alter_id" + test -n "$s_trojan_client_email" && \ + json_add_string "email" "$s_trojan_client_email" + test -n "$s_trojan_client_user_level" && \ + json_add_int "level" "$s_trojan_client_user_level" + + json_close_object + json_close_array # clients + fi + + json_add_object "default" + + test -n "$s_trojan_default_alter_id" && \ + json_add_int "alterId" "$s_trojan_default_alter_id" + test -n "$s_trojan_default_user_level" && \ + json_add_int "level" "$s_trojan_default_user_level" + + json_close_object # default + + if [ -n "$s_trojan_detour_to" ] ; then + json_add_object "detour" + json_add_string "to" "$s_trojan_detour_to" + json_close_object # detour + fi + + json_add_boolean "disableInsecureEncryption" "$s_trojan_disable_insecure_encryption" + + json_close_object # settings + ;; + esac + + json_add_object "streamSettings" + + test -n "$ss_network" && \ + json_add_string "network" "$ss_network" + + test -n "$ss_security" && \ + json_add_string "security" "$ss_security" + + if [ "x$ss_security" = "xtls" ] && [ "x$protocol" != "xshadowsocks" ]; then + json_add_object "tlsSettings" + + test -n "$ss_tls_server_name" && \ + json_add_string "serverName" "$ss_tls_server_name" + + if [ -n "$ss_tls_alpn" ] ; then + json_add_array "alpn" + json_add_string "" "$ss_tls_alpn" + json_close_array # alpn + fi + + json_add_boolean "allowInsecure" "$ss_tls_allow_insecure" + json_add_boolean "allowInsecureCiphers" "$ss_tls_allow_insecure_ciphers" + json_add_boolean "disableSystemRoot" "$ss_tls_disable_system_root" + + json_add_array "certificates" + if [ -n "$ss_tls_cert_file" ] ; then + json_add_object "" + + json_add_string "certificateFile" "$ss_tls_cert_file" + json_add_string "keyFile" "$ss_tls_key_file" + test -n "$ss_tls_cert_usage" && \ + json_add_string "usage" "$ss_tls_cert_usage" + + json_close_object + fi + json_close_array # certificates + + json_close_object # tlsSettings + fi + + case "${ss_network:-x}" in + "tcp") + json_add_object "tcpSettings" + + if [ -n "$ss_tcp_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_tcp_header_type" + + if [ "$ss_tcp_header_type" = "http" ] ; then + json_add_object "request" + test -n "$ss_tcp_header_request_version" && \ + json_add_string "version" "$ss_tcp_header_request_version" + json_add_string "method" "$ss_tcp_header_request_method" + + if [ -n "$ss_tcp_header_request_path" ] ; then + json_add_array "path" + json_add_string "" "$ss_tcp_header_request_path" + json_close_array # path + fi + + if [ -n "$ss_tcp_header_request_headers" ] ; then + json_add_object "headers" + + handle_request_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_array "$name" + json_add_string "" "$value" + json_close_array + fi + } + config_list_foreach "$section" "ss_tcp_header_request_headers" handle_request_header + + json_close_object # headers + fi + + json_close_object # request + + json_add_object "response" + + test -n "$ss_tcp_header_response_version" && \ + json_add_string "version" "$ss_tcp_header_response_version" + test -n "$ss_tcp_header_response_status" && \ + json_add_string "status" "$ss_tcp_header_response_status" + test -n "$ss_tcp_header_response_reason" && \ + json_add_string "reason" "$ss_tcp_header_response_reason" + + if [ -n "$ss_tcp_header_response_headers" ] ; then + json_add_object "headers" + + handle_response_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_array "$name" + json_add_string "" "$value" + json_close_array + fi + } + config_list_foreach "$section" "ss_tcp_header_response_headers" handle_response_header + + json_close_object # headers + fi + + json_close_object # response + fi + json_close_object # header + fi + + json_close_object # tcpSettings + ;; + "kcp") + json_add_object "kcpSettings" + + test -n "$ss_kcp_mtu" && \ + json_add_int "mtu" "$ss_kcp_mtu" + test -n "$ss_kcp_tti" && \ + json_add_int "tti" "$ss_kcp_tti" + test -n "$ss_kcp_uplink_capacity" && \ + json_add_int "uplinkCapacity" "$ss_kcp_uplink_capacity" + test -n "$ss_kcp_downlink_capacity" && \ + json_add_int "downlinkCapacity" "$ss_kcp_downlink_capacity" + json_add_boolean "congestion" "$ss_kcp_congestion" + test -n "$ss_kcp_read_buffer_size" && \ + json_add_int "readBufferSize" "$ss_kcp_read_buffer_size" + test -n "$ss_kcp_write_buffer_size" && \ + json_add_int "writeBufferSize" "$ss_kcp_write_buffer_size" + + if [ -n "$ss_kcp_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_kcp_header_type" + json_close_object # header + fi + + json_close_object # kcpSettings + ;; + "ws") + json_add_object "wsSettings" + + test -n "$ss_websocket_path" && \ + json_add_string "path" "$ss_websocket_path" + + if [ -n "$ss_websocket_headers" ] ; then + json_add_object "headers" + + handle_websocket_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_string "$name" "$value" + fi + } + config_list_foreach "$section" "ss_websocket_headers" handle_websocket_header + + json_close_object # headers + fi + + json_close_object # wsSettings + ;; + "http") + json_add_object "httpSettings" + + if [ -n "$ss_http_host" ] ; then + json_add_array "host" + + local h + for h in $ss_http_host ; do + json_add_string "" "$h" + done + + json_close_array # host + fi + + test -n "$ss_http_path" && \ + json_add_string "path" "$ss_http_path" + + json_close_object # httpSettings + ;; + "domainsocket") + json_add_object "dsSettings" + + test -n "$ss_domainsocket_path" && \ + json_add_string "path" "$ss_domainsocket_path" + + json_close_object # dsSettings + ;; + "quic") + json_add_object "quicSettings" + + test -n "$ss_quic_security" && \ + json_add_string "security" "$ss_quic_security" + test -n "$ss_quic_key" && \ + json_add_string "key" "$ss_quic_key" + + if [ -n "$ss_quic_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_quic_header_type" + json_close_object # header + fi + + json_close_object # quicSettings + ;; + esac + + json_add_object "sockopt" + +# if [ -n "$port" ] && [ "x$port" = "x$TRANSPARENT_PROXY_PORT" ] ; then +# if [ "x$TRANSPARENT_PROXY_USE_TPROXY" = "x1" ] ; then +# json_add_string "tproxy" "tproxy" +# else +# json_add_string "tproxy" "redirect" +# fi +# else + test -n "$ss_sockopt_tcp_fast_open" && \ + json_add_boolean "tcpFastOpen" "$ss_sockopt_tcp_fast_open" + if version_over_5_4; then + test -n "$ss_sockopt_mptcp" && \ + json_add_boolean "mptcp" "$ss_sockopt_mptcp" + fi + test -n "$ss_sockopt_tproxy" && \ + json_add_string "tproxy" "$ss_sockopt_tproxy" +# fi + + json_close_object # sockopt + + json_close_object # streamSettings + + test -n "$tag" && \ + json_add_string "tag" "$tag" + + json_add_object "sniffing" + + json_add_boolean "enabled" "$sniffing_enabled" + + if [ -n "$sniffing_dest_override" ] ; then + json_add_array "destOverride" + local d + for d in $sniffing_dest_override ; do + json_add_string "" "$d" + done + json_close_array # destOverride + fi + + json_close_object # sniffing + + if [ -n "$allocate_strategy" ] ; then + json_add_object "allocate" + json_add_string "strategy" "$allocate_strategy" + test -n "$allocate_refresh" && \ + json_add_int "refresh" "$allocate_refresh" + test -n "$allocate_concurrency" && \ + json_add_int "concurrency" "$allocate_concurrency" + json_close_object # allocate + fi + + json_close_object +} + +add_outbound_setting() { + local section="$1" + + if ! outbound_section_validate "$section" ; then + _err "Invalid outbound section: $section" + return 1 + fi + + json_add_object "" + + test -n "$send_through" && \ + json_add_string "sendThrough" "$send_through" + json_add_string "protocol" "$protocol" + + case "${protocol:-x}" in + "blackhole") + json_add_object "settings" + + if [ -n "$s_blackhole_reponse_type" ] ; then + json_add_object "response" + json_add_string "type" "$s_blackhole_reponse_type" + json_close_object # response + fi + + json_close_object # settings + ;; + "dns") + json_add_object "settings" + + test -n "$s_dns_network" && \ + json_add_string "network" "$s_dns_network" + + if [ -n "$s_dns_address" ] ; then + json_add_string "address" "$s_dns_address" + append_server_address "$s_dns_address" + fi + + test -n "$s_dns_port" && \ + json_add_int "port" "$s_dns_port" + + json_close_object # settings + ;; + "freedom") + json_add_object "settings" + + test -n "$s_freedom_domain_strategy" && \ + json_add_string "domainStrategy" "$s_freedom_domain_strategy" + test -n "$s_freedom_redirect" && \ + json_add_string "redirect" "$s_freedom_redirect" + test -n "$s_freedom_user_level" && \ + json_add_int "userLevel" "$s_freedom_user_level" + + json_close_object # settings + ;; + "http") + json_add_object "settings" + json_add_array "servers" + + json_add_object "" + + json_add_string "address" "$s_http_server_address" + append_server_address "$s_http_server_address" + + test -n "$s_http_server_port" && \ + json_add_int "port" "$s_http_server_port" + + if [ -n "$s_http_account_user" ] ; then + json_add_array "users" + json_add_object "" + + json_add_string "user" "$s_http_account_user" + json_add_string "pass" "$s_http_account_pass" + + json_close_object + json_close_array # users + fi + json_close_object + + json_close_array # servers + json_close_object # settings + ;; + "mtproto") + json_add_object "settings" + json_close_object + ;; + "shadowsocks") + json_add_object "settings" + json_add_array "servers" + + json_add_object "" + test -n "$s_shadowsocks_email" && \ + json_add_string "email" "$s_shadowsocks_email" + json_add_string "address" "$s_shadowsocks_address" + append_server_address "$s_shadowsocks_address" + + json_add_int "port" "$s_shadowsocks_port" + json_add_string "method" "$s_shadowsocks_method" + json_add_string "password" "$s_shadowsocks_password" + + test -n "$s_shadowsocks_level" && \ + json_add_int "level" "$s_shadowsocks_level" + json_add_boolean "ota" "$s_shadowsocks_ota" + json_close_object + + json_close_array # servers + json_close_object # settings + ;; + "vmess") + json_add_object "settings" + + json_add_array "vnext" + json_add_object "" + + json_add_string "address" "$s_vmess_address" + append_server_address "$s_vmess_address" + + json_add_int "port" "$s_vmess_port" + + json_add_array "users" + json_add_object "" + json_add_string "id" "$s_vmess_user_id" + json_add_int "alterId" "$s_vmess_user_alter_id" + test -n "$s_vmess_user_security" && \ + json_add_string "security" "$s_vmess_user_security" + test -n "$s_vmess_user_level" && \ + json_add_int "level" "$s_vmess_user_level" + json_close_object + json_close_array # users + + json_close_object + + json_close_array # vnext + json_close_object # settings + ;; + "vless") + json_add_object "settings" + + json_add_array "vnext" + json_add_object "" + + json_add_string "address" "$s_vless_address" + append_server_address "$s_vless_address" + + json_add_int "port" "$s_vless_port" + + json_add_array "users" + json_add_object "" + json_add_string "id" "$s_vless_user_id" + json_add_int "alterId" "$s_vless_user_alter_id" + test -n "$s_vless_user_security" && \ + json_add_string "security" "$s_vless_user_security" + test -n "$s_vless_user_encryption" && \ + json_add_string "encryption" "$s_vless_user_encryption" + test -n "$s_vless_user_level" && \ + json_add_int "level" "$s_vless_user_level" + json_close_object + json_close_array # users + + json_close_object + + json_close_array # vnext + json_close_object # settings + ;; + "trojan") + json_add_object "settings" + + json_add_array "servers" + json_add_object "" + + json_add_string "address" "$s_trojan_address" + append_server_address "$s_trojan_address" + + json_add_int "port" "$s_trojan_port" + + json_add_string "password" "$s_trojan_user_id" + + json_close_object + + json_close_array # trojan + json_close_object # settings + ;; + "socks") + json_add_object "settings" + + json_add_array "servers" + json_add_object "" + + json_add_string "address" "$s_socks_address" + append_server_address "$s_socks_address" + + json_add_int "port" "$s_socks_port" + + json_add_array "users" + json_add_object "" + json_add_string "pass" "$s_socks_user_id" + json_add_string "user" "$s_socks_email" + json_close_object + json_close_array # users + + json_close_object + + json_close_array # socks + json_close_object # settings + ;; + esac + + json_add_object "streamSettings" + test -n "$ss_network" && \ + json_add_string "network" "$ss_network" + + if [ "x$protocol" != "xshadowsocks" ]; then + test -n "$ss_security" && \ + json_add_string "security" "$ss_security" + + if [ "x$ss_security" = "xtls" ]; then + json_add_object "tlsSettings" + + test -n "$ss_tls_server_name" && \ + json_add_string "serverName" "$ss_tls_server_name" + + if [ -n "$ss_tls_alpn" ] ; then + json_add_array "alpn" + json_add_string "" "$ss_tls_alpn" + json_close_array + fi + + json_add_boolean "allowInsecure" "$ss_tls_allow_insecure" + json_add_boolean "allowInsecureCiphers" "$ss_tls_allow_insecure_ciphers" + json_add_boolean "disableSystemRoot" "$ss_tls_disable_system_root" + + json_add_array "certificates" + if [ -n "$ss_tls_cert_file" ] ; then + json_add_object "" + json_add_string "certificateFile" "$ss_tls_cert_file" + json_add_string "keyFile" "$ss_tls_key_file" + test -n "$ss_tls_cert_usage" && \ + json_add_string "usage" "$ss_tls_cert_usage" + json_close_object + fi + json_close_array # certificates + + json_close_object # tlsSettings + fi + fi + + case "${ss_network:-x}" in + "tcp") + json_add_object "tcpSettings" + + if [ -n "$ss_tcp_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_tcp_header_type" + + if [ "$ss_tcp_header_type" = "http" ] ; then + json_add_object "request" + test -n "$ss_tcp_header_request_version" && \ + json_add_string "version" "$ss_tcp_header_request_version" + json_add_string "method" "$ss_tcp_header_request_method" + + if [ -n "$ss_tcp_header_request_path" ] ; then + json_add_array "path" + json_add_string "" "$ss_tcp_header_request_path" + json_close_array + fi + + if [ -n "$ss_tcp_header_request_headers" ] ; then + json_add_object "headers" + + handle_request_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_array "$name" + json_add_string "" "$value" + json_close_array + fi + } + config_list_foreach "$section" "ss_tcp_header_request_headers" handle_request_header + + json_close_object # headers + fi + + json_close_object # request + + json_add_object "response" + test -n "$ss_tcp_header_response_version" && \ + json_add_string "version" "$ss_tcp_header_response_version" + test -n "$ss_tcp_header_response_status" && \ + json_add_string "status" "$ss_tcp_header_response_status" + test -n "$ss_tcp_header_response_reason" && \ + json_add_string "reason" "$ss_tcp_header_response_reason" + + if [ -n "$ss_tcp_header_response_headers" ] ; then + json_add_object "headers" + + handle_response_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_array "$name" + json_add_string "" "$value" + json_close_array + fi + } + config_list_foreach "$section" "ss_tcp_header_response_headers" handle_response_header + + json_close_object # headers + fi + + json_close_object # response + fi + + json_close_object # header + fi + + json_close_object # tcpSettings + ;; + "kcp") + json_add_object "kcpSettings" + + test -n "$ss_kcp_mtu" && \ + json_add_int "mtu" "$ss_kcp_mtu" + test -n "$ss_kcp_tti" && \ + json_add_int "tti" "$ss_kcp_tti" + test -n "$ss_kcp_uplink_capacity" && \ + json_add_int "uplinkCapacity" "$ss_kcp_uplink_capacity" + test -n "$ss_kcp_downlink_capacity" && \ + json_add_int "downlinkCapacity" "$ss_kcp_downlink_capacity" + + json_add_boolean "congestion" "$ss_kcp_congestion" + + test -n "$ss_kcp_read_buffer_size" && \ + json_add_int "readBufferSize" "$ss_kcp_read_buffer_size" + test -n "$ss_kcp_write_buffer_size" && \ + json_add_int "writeBufferSize" "$ss_kcp_write_buffer_size" + + if [ -n "$ss_kcp_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_kcp_header_type" + json_close_object + fi + + json_close_object # kcpSettings + ;; + "ws") + json_add_object "wsSettings" + + test -n "$ss_websocket_path" && \ + json_add_string "path" "$ss_websocket_path" + + if [ -n "$ss_websocket_headers" ] ; then + json_add_object "headers" + + handle_websocket_header() { + local h="$1" + + local name="$(echo "$h" | cut -d'=' -f1)" + local value="$(echo "$h" | cut -d'=' -f2)" + + if [ -n "$name" ] && [ -n "$value" ] ; then + json_add_string "$name" "$value" + fi + } + config_list_foreach "$section" "ss_websocket_headers" handle_websocket_header + + json_close_object # headers + fi + + json_close_object # wsSettings + ;; + "http") + json_add_object "httpSettings" + + if [ -n "$ss_http_host" ] ; then + json_add_array "host" + + local h + for h in $ss_http_host ; do + json_add_string "" "$h" + done + + json_close_array # host + fi + + test -n "$ss_http_path" && \ + json_add_string "path" "$ss_http_path" + + json_close_object # httpSettings + ;; + "domainsocket") + json_add_object "dsSettings" + + test -n "$ss_domainsocket_path" && \ + json_add_string "path" "$ss_domainsocket_path" + + json_close_object # dsSettings + ;; + "quic") + json_add_object "quicSettings" + + test -n "$ss_quic_security" && \ + json_add_string "security" "$ss_quic_security" + test -n "$ss_quic_key" && \ + json_add_string "key" "$ss_quic_key" + + if [ -n "$ss_quic_header_type" ] ; then + json_add_object "header" + json_add_string "type" "$ss_quic_header_type" + json_close_object # header + fi + + json_close_object # quicSettings + ;; + esac + + json_add_object "sockopt" + + if [ -n "$TRANSPARENT_PROXY_PORT" ] ; then + json_add_int "mark" "255" + else + test -n "$ss_sockopt_mark" && \ + json_add_int "mark" "$ss_sockopt_mark" + fi + + test -n "$ss_sockopt_tcp_fast_open" && \ + json_add_boolean "tcpFastOpen" "$ss_sockopt_tcp_fast_open" + if version_over_5_4; then + test -n "$ss_sockopt_mptcp" && \ + json_add_boolean "tcpMptcp" "$ss_sockopt_mptcp" + fi + + json_close_object # sockopt + + json_close_object # streamSettings + + test -n "$tag" && \ + json_add_string "tag" "$tag" + + if [ -n "$proxy_settings_tag" ] ; then + json_add_object "proxySettings" + json_add_string "tag" "$proxy_settings_tag" + json_close_object # proxySettings + fi + + if [ "x$mux_enabled" = "x1" ] ; then + json_add_object "mux" + json_add_boolean "enabled" "1" + json_add_int "concurrency" "$mux_concurrency" + json_close_object # mux + fi + + json_close_object +} + +init_transparent_proxy() { + local tp_cfg="main_transparent_proxy" + local redirect_port use_tproxy redirect_udp redirect_dns + + config_get redirect_port "$tp_cfg" "redirect_port" + config_get_bool use_tproxy "$tp_cfg" "use_tproxy" "0" + config_get_bool redirect_udp "$tp_cfg" "redirect_udp" "0" + config_get_bool redirect_dns "$tp_cfg" "redirect_dns" "0" + + if [ -n "$redirect_port" ] && \ + ! validate_data "port" "$redirect_port" 2>/dev/null ; then + _err "Transparent proxy redirect port is invalid: $redirect_port" + return 1 + fi + + TRANSPARENT_PROXY_PORT="$redirect_port" + TRANSPARENT_PROXY_USE_TPROXY="$use_tproxy" + + if [ "x$redirect_udp" = "x1" ] && [ "$(uci -q get xray.omrout.protocol)" != "socks" ]; then + TRANSPARENT_PROXY_ADDITION="udp" + elif [ "x$redirect_dns" = "x1" ] ; then + TRANSPARENT_PROXY_ADDITION="dns" + else + TRANSPARENT_PROXY_ADDITION= + fi +} + +setup_transparent_proxy() { + if [ -z "$TRANSPARENT_PROXY_PORT" ] ; then + #_info "Transparent proxy disabled." + return 0 + fi + + if [ "x$TRANSPARENT_PROXY_EXPECTED" != "x1" ] ; then + #_info "No xray instance enabled, skip transparent proxy." + return 0 + fi + + _info "Setting transparent proxy on port: $TRANSPARENT_PROXY_PORT" + + local tp_cfg="main_transparent_proxy" + local lan_ifaces only_privileged_ports proxy_mode direct_list_dns proxy_list_dns + + config_get lan_ifaces "$tp_cfg" "lan_ifaces" + config_get_bool only_privileged_ports "$tp_cfg" "only_privileged_ports" "0" + config_get proxy_mode "$tp_cfg" "proxy_mode" + config_get direct_list_dns "$tp_cfg" "direct_list_dns" + config_get proxy_list_dns "$tp_cfg" "proxy_list_dns" + + _info "Transparent proxy mode: $proxy_mode" + + #init_rules_for_listfile "$direct_list_dns" "$proxy_list_dns" + + local ext_args + case "${proxy_mode:-default}" in + "cn_direct") + local chnroute="$(get_file_content "chnroute")" + local chnroute6="$(get_file_content "chnroute6")" + + if [ -n "$chnroute" ] ; then + ipset -! restore <<-EOF 2>/dev/null + $(echo "$chnroute" | sed "s/.*/add $IPSET_DST_DIRECT_V4 & timeout 0/") + EOF + fi + + if [ -n "$chnroute6" ] ; then + ipset -! restore <<-EOF 2>/dev/null + $(echo "$chnroute6" | sed "s/.*/add $IPSET_DST_DIRECT_V6 & timeout 0/") + EOF + fi + + ext_args= + ;; + "cn_proxy") + local chnroute="$(get_file_content "chnroute")" + local chnroute6="$(get_file_content "chnroute6")" + + if [ -n "$chnroute" ] ; then + ipset -! restore <<-EOF 2>/dev/null + $(echo "$chnroute" | sed "s/.*/add $IPSET_DST_PROXY_V4 & timeout 0/") + EOF + fi + + if [ -n "$chnroute6" ] ; then + ipset -! restore <<-EOF 2>/dev/null + $(echo "$chnroute6" | sed "s/.*/add $IPSET_DST_PROXY_V6 & timeout 0/") + EOF + fi + + ext_args="-m set --match-set $IPSET_DST_PROXY_V4 dst" + ;; + "gfwlist_proxy") + local gfwlist="$(get_file_content "gfwlist")" + + if [ -n "$gfwlist" ] ; then + if [ -n "$proxy_list_dns" ] ; then + echo "$gfwlist" | \ + sed "s|.*|server=/&/$proxy_list_dns\nipset=/&/$IPSET_DST_PROXY_V4,$IPSET_DST_PROXY_V6|" \ + >> "$FILE_XRAY_DNSMASQ_CACHE" + else + echo "$gfwlist" | \ + sed "s|.*|ipset=/&/$IPSET_DST_PROXY_V4,$IPSET_DST_PROXY_V6|" \ + >> "$FILE_XRAY_DNSMASQ_CACHE" + fi + fi + + ext_args="-m set --match-set $IPSET_DST_PROXY_V4 dst" + ;; + *) + ext_args= + ;; + esac + + if [ "x$only_privileged_ports" = "x1" ] ; then + ext_args="--dport 0:1023 $ext_args" + fi + + if [ -f $FILE_XRAY_DNSMASQ_CACHE ] && [ -n "$(cat "$FILE_XRAY_DNSMASQ_CACHE" | grep -v "^$" | grep -v "^#")" ] ; then + local dir="$(dirname "$FILE_XRAY_DNSMASQ")" + test -d "$dir" || mkdir -p "$dir" + cat "$FILE_XRAY_DNSMASQ_CACHE" >"$FILE_XRAY_DNSMASQ" 2>/dev/null + DNSMASQ_RESTART_EXPECTED=1 + fi + + rm -f "$FILE_XRAY_DNSMASQ_CACHE" + + local lan_devices lan_ipaddrs + + if [ -n "$lan_ifaces" ] ; then + . /lib/functions/network.sh + + local lan + for lan in $lan_ifaces ; do + local device ipaddrs ipaddr + network_get_device device "$lan" + network_get_ipaddrs ipaddrs "$lan" + + if [ -n "$device" ] ; then + if [ -n "$lan_devices" ] ; then + lan_devices="$lan_devices $device" + else + lan_devices="$device" + fi + fi + + if [ -n "$ipaddrs" ] ; then + for ipaddr in $ipaddrs ; do + if [ -n "$lan_ipaddrs" ] ; then + lan_ipaddrs="$ipaddr" + else + lan_ipaddrs="$lan_ipaddrs $ipaddr" + fi + done + fi + done + fi + + logger -t "xray" "add rules" + add_xray_redirect_rules "$ext_args" "$lan_devices" "$lan_ipaddrs" +} + +clear_transparent_proxy() { + xray-rules -f + + if [ -s "$FILE_XRAY_DNSMASQ" ] ; then + rm -f "$FILE_XRAY_DNSMASQ" + DNSMASQ_RESTART_EXPECTED=1 + fi +} + +start_instance() { + local section="$1" + + if ! xray_section_validate "$section" ; then + _err "Invalid config." + return 1 + fi + + if [ "x$enabled" != "x1" ] ; then + #_info "Service disabled: $section" + return 0 + fi + + if [ -z "$xray_file" ] || [ ! -s "$xray_file" ] ; then + _err "Invalid V2Ray file." + return 1 + fi + + test -x "$xray_file" || chmod 755 "$xray_file" + + local temp_config + + if [ -n "$config_file" ] ; then + if [ ! -s "$config_file" ] ; then + _err "Config file not found: $config_file" + return 1 + fi + + if ! ( eval "$xray_file test -config \"$config_file\" >/dev/null 2>&1" ) ; then + _err "Validate config file failed: $config_file" + return 1 + fi + + local file_content="$(cat "$config_file")" + local config_commands="$(get_commands_from_json "$file_content")" + + local addr + + for addr in $(echo "$config_commands" | sed -n "s/^json.*'address'[[:space:]]'\([^']*\)'.*/\1/p") ; do + append_server_address "$addr" + done + + temp_config="$config_file" + else + test -d "$CONFIG_FOLDER" || mkdir -p "$CONFIG_FOLDER" + + temp_config="$CONFIG_FOLDER/xray.${section}.json" + + local old_ns + json_set_namespace "$section" old_ns + json_init + + json_add_object "log" + + test -n "$access_log" && \ + json_add_string "access" "$access_log" + + if [ -n "$loglevel" ] && [ "$loglevel" != "none" ] ; then + json_add_string "loglevel" "$loglevel" + json_add_string "error" "$error_log" + fi + + json_close_object # log + + if [ "x$stats_enabled" = "x1" ] ; then + json_add_object "stats" + json_close_object # stats + fi + + add_dns_settings "$section" + add_routing_settings "$section" + add_policy_settings "$section" + add_reverse_settings "$section" + + if [ "x$transport_enabled" = "x1" ] ; then + add_transport_settings + fi + + if [ -n "$inbounds" ] ; then + json_add_array "inbounds" + + local is + for is in $inbounds ; do + add_inbound_setting "$is" + done + + json_close_array # inbounds + fi + + if [ -n "$outbounds" ] ; then + json_add_array "outbounds" + + local os + for os in $outbounds ; do + add_outbound_setting "$os" + done + + json_close_array # outbounds + fi + + json_dump -i >"$temp_config" + + json_cleanup + json_set_namespace "$old_ns" + + if [ ! -s "$temp_config" ] ; then + _err "Error when create config file: $temp_config" + return 1 + fi + fi + + PROG="$NAME.$section" + + TRANSPARENT_PROXY_EXPECTED=1 + procd_open_instance "$PROG" + procd_set_param command "$xray_file" + procd_append_param command run + procd_append_param command -config "$temp_config" + procd_set_param respawn + + if [ -n "$asset_location" ] && [ -d "$asset_location" ] ; then + procd_set_param env XRAY_LOCATION_ASSET="$asset_location" + fi + + # cat /proc/PID/limits to see if limits works + procd_set_param limits nofile="102400 102400" + procd_append_param limits core="0 0" + + if [ "$mem_percentage" -gt "0" ] ; then + local mem_total="$(awk '/MemTotal/ {print $2}' /proc/meminfo)" + if [ -n "$mem_total" ] ; then + local use_mem="$(expr $mem_total \* $mem_percentage \* 10)" + procd_append_param limits as="$use_mem $use_mem" + fi + fi + + procd_set_param file "$temp_config" + procd_set_param stderr 1 # forward stderr of the command to logd + procd_set_param stdout 1 + procd_set_param pidfile "/var/run/${NAME}.${section}.pid" + procd_close_instance +} + +rules_exist() { + [ -n "$(iptables -w -t nat -L -n 2>/dev/null | grep v2r_)" ] && return 0 + return 1 +} + +rules_up() { + rules_exist && { + [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null + return 0 + } + enabled="0" + config_load xray + config_get enabled main enabled "0" + [ "$enabled" = "0" ] && return + if [ "$(uci -q get xray.omrout.protocol)" = "vless" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get xray.omrout.s_vless_address)" + OUTBOUND_SERVERS_V6="$(uci -q get xray.omrout.s_vless_address)" + elif [ "$(uci -q get xray.omrout.protocol)" = "vmess" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get xray.omrout.s_vmess_address)" + OUTBOUND_SERVERS_V6="$(uci -q get xray.omrout.s_vmess_address)" + elif [ "$(uci -q get xray.omrout.protocol)" = "trojan" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get xray.omrout.s_trojan_address)" + OUTBOUND_SERVERS_V6="$(uci -q get xray.omrout.s_trojan_address)" + elif [ "$(uci -q get xray.omrout.protocol)" = "socks" ]; then + OUTBOUND_SERVERS_V4="$(uci -q get xray.omrout.s_socks_address)" + OUTBOUND_SERVERS_V6="$(uci -q get xray.omrout.s_socks_address)" + fi + TRANSPARENT_PROXY_PORT="$(uci -q get xray.omr.port)" + [ -n "$OUTBOUND_SERVERS_V4" ] || [ -n "$OUTBOUND_SERVERS_V6" ] && { + logger -t "xray" "Rules UP" + add_xray_redirect_rules + } + [ -f /etc/init.d/omr-bypass ] && [ -z "$(pgrep -f omr-bypass)" ] && { + logger -t "xray" "Reload omr-bypass rules" + /etc/init.d/omr-bypass reload_rules + } + [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null +} + +rules_down() { + rules_exist || return 0 + logger -t "xray" "Rules DOWN" + local bin="/usr/bin/xray-rules" + [ -x "$bin" ] && { + "$bin" -f >/dev/null 2>&1 + } + local bin6="/usr/bin/xray-rules6" + [ -x "$bin6" ] && { + "$bin6" -f >/dev/null 2>&1 + } +} + +start_service() { + clear_transparent_proxy + + config_load "$NAME" + + if ! init_transparent_proxy ; then + gracefully_restart_dnsmasq + return 1 + fi + + config_foreach start_instance "xray" + + setup_transparent_proxy + gracefully_restart_dnsmasq + rules_up + + unset OUTBOUND_SERVERS_V4 \ + OUTBOUND_SERVERS_V6 \ + TRANSPARENT_PROXY_EXPECTED \ + TRANSPARENT_PROXY_PORT \ + TRANSPARENT_PROXY_ADDITION \ + DNSMASQ_RESTART_EXPECTED +} + +stop_service() { + if [ "x$action" = "xrestart" ] ; then + # skip when restarting, start_service will do this + return 0 + fi + + clear_transparent_proxy + rules_down + gracefully_restart_dnsmasq + test -d "$CONFIG_FOLDER" && rm -rf "$CONFIG_FOLDER" +} + +service_triggers() { + procd_add_reload_trigger "$NAME" +} diff --git a/xray-core/files/etc/uci-defaults/3010-omr-xray b/xray-core/files/etc/uci-defaults/3010-omr-xray new file mode 100644 index 000000000..7897ae2cf --- /dev/null +++ b/xray-core/files/etc/uci-defaults/3010-omr-xray @@ -0,0 +1,202 @@ +#!/bin/sh + +if [ -z "$(uci -q get xray.main)" ]; then + touch /etc/config/xray + uci batch <<-EOF + set xray.main=xray + set xray.main.xray_file='/usr/bin/xray' + set xray.main.mem_percentage='0' + set xray.main.loglevel='error' + set xray.main.access_log='/dev/null' + set xray.main.error_log='/dev/null' + set xray.main.enabled='0' + set xray.main.outbounds='omrout' + set xray.main.inbounds='omr' + add_list xray.main.inbounds='omrtest' + set xray.main_dns=dns + set xray.main_dns.hosts='example.com|127.0.0.1' + set xray.main_dns.enabled='0' + set xray.main_policy=policy + set xray.main_policy.enabled='1' + set xray.main_policy.levels='policy_level_0' + set xray.policy_level_0=policy_level + set xray.policy_level_0.level='0' + set xray.policy_level_0.handshake='4' + set xray.policy_level_0.conn_idle='1200' + set xray.policy_level_0.uplink_only='0' + set xray.policy_level_0.downlink_only='0' + set xray.policy_level_0.buffer_size='512' + set xray.main_transparent_proxy=transparent_proxy + set xray.main_transparent_proxy.proxy_mode='default' + set xray.main_transparent_proxy.apnic_delegated_mirror='apnic' + set xray.main_transparent_proxy.gfwlist_mirror='github' + set xray.main_transparent_proxy.redirect_udp='0' + set xray.main_transparent_proxy.redirect_port='1897' + set xray.omrout=outbound + set xray.omrout.tag='omrout_tunnel' + set xray.omrout.protocol='vless' + set xray.omrout.s_vmess_address='' + set xray.omrout.s_vmess_port='65230' + set xray.omrout.s_vmess_user_id='' + set xray.omrout.s_vmess_user_security='none' + set xray.omrout.s_vmess_user_alter_id='0' + set xray.omrout.s_vless_address='' + set xray.omrout.s_vless_port='65228' + set xray.omrout.s_vless_user_id='' + set xray.omrout.s_vless_user_security='none' + set xray.omrout.s_vless_user_encryption='none' + set xray.omrout.s_vless_user_alter_id='0' + set xray.omrout.s_trojan_address='' + set xray.omrout.s_trojan_port='65229' + set xray.omrout.s_trojan_user_id='' + set xray.omrout.s_trojan_user_security='none' + set xray.omrout.s_trojan_user_encryption='none' + set xray.omrout.s_trojan_user_alter_id='0' + set xray.omrout.s_socks_address='' + set xray.omrout.s_socks_port='65231' + set xray.omrout.s_socks_user_id='' + set xray.omrout.s_socks_user_security='none' + set xray.omrout.s_socks_user_encryption='none' + set xray.omrout.s_socks_user_alter_id='0' + set xray.omrout.ss_network='tcp' + set xray.omrout.ss_security='tls' + set xray.omrout.ss_tls_allow_insecure='1' + set xray.omrout.ss_tls_disable_system_root='1' + set xray.omrout.ss_tls_cert_usage='verify' + set xray.omrout.ss_tls_cert_file='/etc/luci-uploads/client.crt' + set xray.omrout.ss_tls_key_file='/etc/luci-uploads/client.key' + set xray.omrout.s_shadowsocks_port='65252' + set xray.omrout.mux_concurrency='8' + set xray.omr=inbound + set xray.omr.tag='omrtunnel' + set xray.omr.listen='0.0.0.0' + set xray.omr.port='1897' + set xray.omr.protocol='dokodemo-door' + set xray.omr.s_dokodemo_door_network='tcp' + add_list xray.omr.s_dokodemo_door_network='udp' + set xray.omr.ss_sockopt_tproxy='redirect' + set xray.omr.ss_sockopt_tcp_fast_open='1' + set xray.omr.ss_sockopt_mptcp='1' + set xray.omr.s_dokodemo_door_follow_redirect='1' + set xray.omr6=inbound + set xray.omr6.tag='omrtunnel6' + set xray.omr6.listen='::' + set xray.omr6.port='1898' + set xray.omr6.protocol='dokodemo-door' + set xray.omr6.s_dokodemo_door_network='tcp' + add_list xray.omr6.s_dokodemo_door_network='udp' + set xray.omr6.ss_sockopt_tproxy='tproxy' + set xray.omr6.ss_sockopt_tcp_fast_open='1' + set xray.omr6.s_dokodemo_door_follow_redirect='1' + set xray.omrtest=inbound + set xray.omrtest.port='1111' + set xray.omrtest.protocol='socks' + set xray.omrtest.listen='127.0.0.1' + set xray.omrtest.s_socks_auth='noauth' + set xray.omrtest.s_socks_udp='1' + set xray.omrtest.s_socks_ip='127.0.0.1' + set xray.omrtest.s_socks_userlevel='0' + commit xray + EOF +fi +uci -q batch <<-EOF >/dev/null + set xray.omr.listen='0.0.0.0' + commit xray +EOF + +if [ "$(uci -q get firewall.xray)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.xray=include + set firewall.xray.path=/etc/firewall.xray-rules + set firewall.xray.reload=0 + commit firewall + EOF +fi +if [ "$(uci -q get firewall.xray.path)" != "/etc/firewall.xray-rules" ]; then + uci -q batch <<-EOF >/dev/null + set firewall.xray.path=/etc/firewall.xray-rules + commit firewall + EOF +fi + +if [ "$(uci -q get xray.main_reverse.bridges | grep omrbridge)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set xray.main_reverse=reverse + set xray.main_reverse.enabled=1 + set xray.main_reverse.bridges='omrbridge|omr.lan' + commit xray + EOF +fi +if [ "$(uci -q get xray.omrrouting)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set xray.omrexit=outbound + set xray.omrexit.protocol='freedom' + set xray.omrexit.tag='out' + add_list xray.main.outbounds=omrexit + set xray.omrrouting=routing_rule + set xray.omrrouting.type='field' + set xray.omrrouting.inbound_tag='omrbridge' + set xray.omrrouting.outbound_tag='omrout_tunnel' + set xray.omrrouting.domain='full:omr.lan' + set xray.omrroutingo=routing_rule + set xray.omrroutingo.type='field' + set xray.omrroutingo.inbound_tag='omrbridge' + set xray.omrroutingo.outbound_tag='out' + set xray.main_routing=routing + set xray.main_routing.enabled=1 + set xray.main_routing.rules='omrrouting' + add_list xray.main_routing.rules='omrroutingo' + commit xray + EOF +fi + +if [ "$(uci -q get xray.main.error_log)" != "/dev/null" ]; then + uci -q batch <<-EOF >/dev/null + set xray.main.error_log='/dev/null' + commit xray + EOF +fi +#if [ "$(uci -q get xray.main.mem_percentage)" = "0" ]; then +# uci -q batch <<-EOF >/dev/null +# set xray.main.mem_percentage='80' +# commit xray +# EOF +#fi +if [ "$(uci -q get xray.policy_level_0.conn_idle)" = "2400" ]; then + uci -q batch <<-EOF >/dev/null + set xray.policy_level_0.conn_idle='1200' + commit xray + EOF +fi + +if [ "$(uci -q get xray.omrout.s_vmess_port)" = "65228" ]; then + uci -q batch <<-EOF >/dev/null + set xray.omrout.s_vmess_port='65230' + commit xray + EOF +fi + +if [ "$(uci -q get xray.omrout.s_trojan_port)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set xray.omrout.s_trojan_address='' + set xray.omrout.s_trojan_port='65229' + set xray.omrout.s_trojan_user_id='' + set xray.omrout.s_trojan_user_security='none' + set xray.omrout.s_trojan_user_encryption='none' + set xray.omrout.s_trojan_user_alter_id='0' + commit xray + EOF +fi +if [ "$(uci -q get xray.omrout.s_socks_port)" = "" ]; then + uci -q batch <<-EOF >/dev/null + set xray.omrout.s_socks_address='' + set xray.omrout.s_socks_port='65231' + set xray.omrout.s_socks_user_id='' + set xray.omrout.s_socks_user_security='none' + set xray.omrout.s_socks_user_encryption='none' + set xray.omrout.s_socks_user_alter_id='0' + commit xray + EOF +fi + +exit 0 \ No newline at end of file diff --git a/xray-core/files/usr/bin/xray-rules b/xray-core/files/usr/bin/xray-rules new file mode 100755 index 000000000..d96ebc73b --- /dev/null +++ b/xray-core/files/usr/bin/xray-rules @@ -0,0 +1,319 @@ +#!/bin/sh -e +# +# Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# The design idea was derived from ss-rules by Jian Chang +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +if [ -f /usr/sbin/iptables-legacy ]; then + IPTABLES="/usr/sbin/iptables-legacy" + IPTABLESRESTORE="/usr/sbin/iptables-legacy-restore" + IPTABLESSAVE="/usr/sbin/iptables-legacy-save" +else + IPTABLES="/usr/sbin/iptables" + IPTABLESRESTORE="/usr/sbin/iptables-restore" + IPTABLESSAVE="/usr/sbin/iptables-save" +fi + + + +xr_rules_usage() { + cat >&2 < Local port number of ss-redir with TCP mode + -L Local port number of ss-redir with UDP mode + -s List of ip addresses of remote shadowsocks server + --ifnames Only apply rules on packets from these ifnames + --src-bypass + --src-forward + --src-checkdst + --src-default + Packets will have their src ip checked in order against + bypass, forward, checkdst list and will bypass, forward + through, or continue to have their dst ip checked + respectively on the first match. Otherwise, --src-default + decide the default action + --dst-bypass + --dst-forward + --dst-bypass-file + --dst-forward-file + --dst-default + Same as with their --src-xx equivalent + --dst-forward-recentrst + Forward those packets whose destinations have recently + sent to us multiple tcp-rst packets + --local-default + Default action for local out TCP traffic + +The following ipsets will be created by ss-rules. They are also intended to be +populated by other programs like dnsmasq with ipset support + + ss_rules_src_bypass + ss_rules_src_forward + ss_rules_src_checkdst + ss_rules_dst_bypass + ss_rules_dst_bypass_all + ss_rules_dst_forward +EOF +} + +o_dst_bypass_=" + 0.0.0.0/8 + 10.0.0.0/8 + 100.64.0.0/10 + 127.0.0.0/8 + 169.254.0.0/16 + 172.16.0.0/12 + 192.0.0.0/24 + 192.0.2.0/24 + 192.31.196.0/24 + 192.52.193.0/24 + 192.88.99.0/24 + 192.168.0.0/16 + 192.175.48.0/24 + 198.18.0.0/15 + 198.51.100.0/24 + 203.0.113.0/24 + 224.0.0.0/4 + 240.0.0.0/4 + 255.255.255.255 +" +o_src_default=bypass +o_dst_default=bypass +o_local_default=bypass + +__errmsg() { + echo "xray-rules: $*" >&2 +} + +xr_rules_parse_args() { + while [ "$#" -gt 0 ]; do + case "$1" in + -h|--help) xr_rules_usage; exit 0;; + -f|--flush) xr_rules_flush; exit 0;; + -l) o_redir_tcp_port="$2"; shift 2;; + -L) o_redir_udp_port="$2"; shift 2;; + -s) o_remote_servers="$2"; shift 2;; + --ifnames) o_ifnames="$2"; shift 2;; + --ipt-extra) o_ipt_extra="$2"; shift 2;; + --src-default) o_src_default="$2"; shift 2;; + --dst-default) o_dst_default="$2"; shift 2;; + --local-default) o_local_default="$2"; shift 2;; + --src-bypass) o_src_bypass="$2"; shift 2;; + --src-forward) o_src_forward="$2"; shift 2;; + --src-checkdst) o_src_checkdst="$2"; shift 2;; + --dst-bypass) o_dst_bypass="$2"; shift 2;; + --dst-bypass_all) o_dst_bypass_all="$2"; shift 2;; + --dst-forward) o_dst_forward="$2"; shift 2;; + --dst-forward-recentrst) o_dst_forward_recentrst=1; shift 1;; + --dst-bypass-file) o_dst_bypass_file="$2"; shift 2;; + --dst-forward-file) o_dst_forward_file="$2"; shift 2;; + --rule-name) rule="$2"; shift 2;; + *) __errmsg "unknown option $1"; return 1;; + esac + done + + if [ -z "$o_redir_tcp_port" -a -z "$o_redir_udp_port" ]; then + __errmsg "Requires at least -l or -L option" + return 1 + fi + if [ -n "$o_dst_forward_recentrst" ] && ! $IPTABLES -w -m recent -h >/dev/null; then + __errmsg "Please install iptables-mod-conntrack-extra with opkg" + return 1 + fi + o_remote_servers="$(for s in $o_remote_servers; do resolveip -4 "$s"; done)" +} + +xr_rules_flush() { + local setname + + $IPTABLESSAVE --counters 2>/dev/null | grep -v xr_ | $IPTABLESRESTORE --counters + while ip rule del fwmark 1 lookup 100 2>/dev/null; do true; done + ip route flush table 100 || true + for setname in $(ipset -n list | grep "ssr_${rule}"); do + ipset destroy "$setname" 2>/dev/null || true + done +} + +xr_rules_ipset_init() { + ipset --exist restore <<-EOF + create ssr_${rule}_src_bypass hash:net hashsize 64 + create ssr_${rule}_src_forward hash:net hashsize 64 + create ssr_${rule}_src_checkdst hash:net hashsize 64 + create ss_rules_dst_bypass_all hash:net hashsize 64 + create ssr_${rule}_dst_bypass hash:net hashsize 64 + create ssr_${rule}_dst_bypass_ hash:net hashsize 64 + create ssr_${rule}_dst_forward hash:net hashsize 64 + create ss_rules_dst_forward_recentrst_ hash:ip hashsize 64 timeout 3600 + $(xr_rules_ipset_mkadd ssr_${rule}_dst_bypass_ "$o_dst_bypass_ $o_remote_servers") + $(xr_rules_ipset_mkadd ss_rules_dst_bypass_all "$o_dst_bypass_all") + $(xr_rules_ipset_mkadd ssr_${rule}_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')") + $(xr_rules_ipset_mkadd ssr_${rule}_src_bypass "$o_src_bypass") + $(xr_rules_ipset_mkadd ssr_${rule}_src_forward "$o_src_forward") + $(xr_rules_ipset_mkadd ssr_${rule}_src_checkdst "$o_src_checkdst") + $(xr_rules_ipset_mkadd ssr_${rule}_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')") + EOF +} + +xr_rules_ipset_mkadd() { + local setname="$1"; shift + local i + + for i in $*; do + echo "add $setname $i" + done +} + +xr_rules_iptchains_init() { + xr_rules_iptchains_init_mark + xr_rules_iptchains_init_tcp + xr_rules_iptchains_init_udp +} + +xr_rules_iptchains_init_mark() { + if [ "$($IPTABLES -w -t mangle -L PREROUTING | grep ss_rules_dst_bypass_all)" = "" ]; then + $IPTABLESRESTORE --noflush <<-EOF + *mangle + -A PREROUTING -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 + COMMIT + EOF + fi +} + +xr_rules_iptchains_init_tcp() { + local local_target + + [ -n "$o_redir_tcp_port" ] || return 0 + + xr_rules_iptchains_init_ nat tcp + + case "$o_local_default" in + checkdst) local_target=xr_${rule}_dst ;; + forward) local_target=xr_${rule}_forward ;; + bypass|*) return 0;; + esac + + $IPTABLESRESTORE --noflush <<-EOF + *nat + :xr_${rule}_local_out - + -I OUTPUT 1 -p tcp -j xr_${rule}_local_out + -A xr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A xr_${rule}_local_out -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A xr_${rule}_local_out -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN + -A xr_${rule}_local_out -m mark --mark 0x539 -j RETURN + -A xr_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" + COMMIT + EOF +} + +xr_rules_iptchains_init_udp() { + [ -n "$o_redir_udp_port" ] || return 0 + xr_rules_iptchains_init_ mangle udp +} + +xr_rules_iptchains_init_() { + local table="$1" + local proto="$2" + local forward_rules + local src_default_target dst_default_target + local recentrst_mangle_rules recentrst_addset_rules + + case "$proto" in + tcp) + forward_rules="-A xr_${rule}_forward -p tcp -j REDIRECT --to-ports $o_redir_tcp_port" + if [ -n "$o_dst_forward_recentrst" ]; then + recentrst_mangle_rules=" + *mangle + -I PREROUTING 1 -p tcp -m tcp --tcp-flags RST RST -m recent --name xr_recentrst --set --rsource + COMMIT + " + recentrst_addset_rules=" + -A xr_${rule}_dst -m recent --name xr_recentrst --rcheck --rdest --seconds 3 --hitcount 3 -j SET --add-set ss_rules_dst_forward_recentrst_ dst --exist + -A xr_${rule}_dst -m set --match-set ss_rules_dst_forward_recentrst_ dst -j xr_${rule}_forward + " + fi + ;; + udp) + ip rule add fwmark 1 lookup 100 || true + ip route add local default dev lo table 100 || true + forward_rules="-A xr_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01" + ;; + esac + case "$o_src_default" in + forward) src_default_target=xr_${rule}_forward ;; + checkdst) src_default_target=xr_${rule}_dst ;; + bypass|*) src_default_target=RETURN ;; + esac + case "$o_dst_default" in + forward) dst_default_target=xr_${rule}_forward ;; + bypass|*) dst_default_target=RETURN ;; + esac + sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IPTABLESRESTORE --noflush + *$table + :xr_${rule}_pre_src - + :xr_${rule}_src - + :xr_${rule}_dst - + :xr_${rule}_forward - + $(xr_rules_iptchains_mkprerules "$proto") + -A xr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass_ dst -j RETURN + -A xr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j MARK --set-mark 0x539 + -A xr_${rule}_pre_src -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A xr_${rule}_pre_src -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A xr_${rule}_pre_src -m mark --mark 0x539 -j RETURN + -A xr_${rule}_dst -m set --match-set ss_rules_dst_bypass_all dst -j RETURN + -A xr_${rule}_dst -m set --match-set ssr_${rule}_dst_bypass dst -j RETURN + -A xr_${rule}_pre_src -p $proto $o_ipt_extra -j xr_${rule}_src + -A xr_${rule}_src -m set --match-set ssr_${rule}_src_bypass src -j RETURN + -A xr_${rule}_src -m set --match-set ssr_${rule}_src_forward src -j xr_${rule}_forward + -A xr_${rule}_src -m set --match-set ssr_${rule}_src_checkdst src -j xr_${rule}_dst + -A xr_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default" + -A xr_${rule}_dst -m set --match-set ssr_${rule}_dst_forward dst -j xr_${rule}_forward + $recentrst_addset_rules + -A xr_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default" + $forward_rules + COMMIT + $recentrst_mangle_rules + EOF +} + +xr_rules_iptchains_mkprerules() { + local proto="$1" + + if [ -z "$o_ifnames" ]; then + echo "-A PREROUTING -p $proto -j xr_${rule}_pre_src" + else + echo $o_ifnames \ + | tr ' ' '\n' \ + | sed "s/.*/-I PREROUTING 1 -i \\0 -p $proto -j xr_${rule}_pre_src/" + fi +} + +xr_rules_fw_drop() { + fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + while IFS=$"\n" read -r c; do + fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') + if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then + eval "$IPTABLES -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + fi + done + fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j drop/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + while IFS=$"\n" read -r c; do + fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/') + if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then + eval "$IPTABLES -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + fi + done +} + +xr_rules_parse_args "$@" +#xr_rules_flush +xr_rules_ipset_init +xr_rules_iptchains_init +xr_rules_fw_drop \ No newline at end of file diff --git a/xray-core/files/usr/bin/xray-rules6 b/xray-core/files/usr/bin/xray-rules6 new file mode 100755 index 000000000..accbc7d0f --- /dev/null +++ b/xray-core/files/usr/bin/xray-rules6 @@ -0,0 +1,310 @@ +#!/bin/sh -e +# +# Copyright (C) 2017 Yousong Zhou +# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) +# +# The design idea was derived from ss-rules by Jian Chang +# +# This is free software, licensed under the GNU General Public License v3. +# See /LICENSE for more information. +# + +if [ -f /usr/sbin/iptables-legacy ]; then + IP6TABLES="/usr/sbin/ip6tables-legacy" + IP6TABLESRESTORE="/usr/sbin/ip6tables-legacy-restore" + IP6TABLESSAVE="/usr/sbin/ip6tables-legacy-save" +else + IP6TABLES="/usr/sbin/ip6tables" + IP6TABLESRESTORE="/usr/sbin/ip6tables-restore" + IP6TABLESSAVE="/usr/sbin/ip6tables-save" +fi + + + +xray_rules6_usage() { + cat >&2 < Local port number of ss-redir with TCP mode + -L Local port number of ss-redir with UDP mode + -s List of ip addresses of remote shadowsocks server + --ifnames Only apply rules on packets from these ifnames + --src-bypass + --src-forward + --src-checkdst + --src-default + Packets will have their src ip checked in order against + bypass, forward, checkdst list and will bypass, forward + through, or continue to have their dst ip checked + respectively on the first match. Otherwise, --src-default + decide the default action + --dst-bypass + --dst-forward + --dst-bypass-file + --dst-forward-file + --dst-default + Same as with their --src-xx equivalent + --dst-forward-recentrst + Forward those packets whose destinations have recently + sent to us multiple tcp-rst packets + --local-default + Default action for local out TCP traffic + +The following ipsets will be created by xray-rules. They are also intended to be +populated by other programs like dnsmasq with ipset support + + xray_rules6_src_bypass + xray_rules6_src_forward + xray_rules6_src_checkdst + xray_rules6_dst_bypass + xray_rules6_dst_forward +EOF +} + +o_dst_bypass_=" + fe80::/10 + fd00::/8 + ::1 +" +o_src_default=bypass +o_dst_default=bypass +o_local_default=bypass + +__errmsg() { + echo "xray-rules6: $*" >&2 +} + +xray_rules6_parse_args() { + while [ "$#" -gt 0 ]; do + case "$1" in + -h|--help) xray_rules6_usage; exit 0;; + -f|--flush) xray_rules6_flush; exit 0;; + -l) o_redir_tcp_port="$2"; shift 2;; + -L) o_redir_udp_port="$2"; shift 2;; + -s) o_remote_servers="$2"; shift 2;; + --ifnames) o_ifnames="$2"; shift 2;; + --ipt-extra) o_ipt_extra="$2"; shift 2;; + --src-default) o_src_default="$2"; shift 2;; + --dst-default) o_dst_default="$2"; shift 2;; + --local-default) o_local_default="$2"; shift 2;; + --src-bypass) o_src_bypass="$2"; shift 2;; + --src-forward) o_src_forward="$2"; shift 2;; + --src-checkdst) o_src_checkdst="$2"; shift 2;; + --dst-bypass) o_dst_bypass="$2"; shift 2;; + --dst-bypass_all) o_dst_bypass_all="$2"; shift 2;; + --dst-forward) o_dst_forward="$2"; shift 2;; + --dst-forward-recentrst) o_dst_forward_recentrst=1; shift 1;; + --dst-bypass-file) o_dst_bypass_file="$2"; shift 2;; + --dst-forward-file) o_dst_forward_file="$2"; shift 2;; + --rule-name) rule="$2"; shift 2;; + *) __errmsg "unknown option $1"; return 1;; + esac + done + + if [ -z "$o_redir_tcp_port" -a -z "$o_redir_udp_port" ]; then + __errmsg "Requires at least -l or -L option" + return 1 + fi + if [ -n "$o_dst_forward_recentrst" ] && ! $IP6TABLES -w -m recent -h >/dev/null; then + __errmsg "Please install ip6tables-mod-conntrack-extra with opkg" + return 1 + fi + o_remote_servers="$(for s in $o_remote_servers; do resolveip -6 "$s"; done)" +} + +xray_rules6_flush() { + local setname + + $IP6TABLESSAVE --counters 2>/dev/null | grep -v xr6_ | $IP6TABLESRESTORE --counters + while ip -f inet6 rule del fwmark 1 lookup 100 2>/dev/null; do true; done + ip -f inet6 route flush table 100 || true + for setname in $(ipset -n list | grep "ssr6_${rule}"); do + ipset destroy "$setname" 2>/dev/null || true + done +} + +xray_rules6_ipset_init() { + ipset --exist restore <<-EOF + create ssr6_${rule}_src_bypass hash:net family inet6 hashsize 64 + create ssr6_${rule}_src_forward hash:net family inet6 hashsize 64 + create ssr6_${rule}_src_checkdst hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_bypass hash:net family inet6 hashsize 64 + create ss_rules6_dst_bypass_all hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_bypass_ hash:net family inet6 hashsize 64 + create ssr6_${rule}_dst_forward hash:net family inet6 hashsize 64 + create ss_rules6_dst_forward_recrst_ hash:ip family inet6 hashsize 64 timeout 3600 + $(xray_rules6_ipset_mkadd ssr6_${rule}_dst_bypass_ "$o_dst_bypass_ $o_remote_servers") + $(xray_rules6_ipset_mkadd ss_rules6_dst_bypass_all "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + $(xray_rules6_ipset_mkadd ssr6_${rule}_dst_bypass "$o_dst_bypass $(cat "$o_dst_bypass_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + $(xray_rules6_ipset_mkadd ssr6_${rule}_src_bypass "$o_src_bypass") + $(xray_rules6_ipset_mkadd ssr6_${rule}_src_forward "$o_src_forward") + $(xray_rules6_ipset_mkadd ssr6_${rule}_src_checkdst "$o_src_checkdst") + $(xray_rules6_ipset_mkadd ssr6_${rule}_dst_forward "$o_dst_forward $(cat "$o_dst_forward_file" 2>/dev/null | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}')") + EOF +} + +xray_rules6_ipset_mkadd() { + local setname="$1"; shift + local i + + for i in $*; do + echo "add $setname $i" + done +} + +xray_rules6_iptchains_init() { + xray_rules6_iptchains_init_mark + xray_rules6_iptchains_init_tcp + xray_rules6_iptchains_init_udp +} + +xray_rules6_iptchains_init_mark() { + $IP6TABLESRESTORE --noflush <<-EOF + *mangle + -A PREROUTING -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539 + COMMIT + EOF +} + + +xray_rules6_iptchains_init_tcp() { + local local_target + + [ -n "$o_redir_tcp_port" ] || return 0 + + #xray_rules6_iptchains_init_ nat tcp + xray_rules6_iptchains_init_ mangle tcp + + case "$o_local_default" in + checkdst) local_target=xr6_${rule}_dst ;; + forward) local_target=xr6_${rule}_forward ;; + bypass|*) return 0;; + esac + +# echo "tcp mangle" +# $IP6TABLESRESTORE --noflush <<-EOF +# *mangle +# :xr6_${rule}_local_out - +# -I OUTPUT 1 -p tcp -j xr6_${rule}_local_out +# -A xr6_${rule}_local_out -m set --match-set ss_rules6_dst_bypass dst -j RETURN +# -A xr6_${rule}_local_out -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN +# -A xr6_${rule}_local_out -m set --match-set ss_rules6_dst_bypass_ dst -j RETURN +# -A xr6_${rule}_local_out -m mark --mark 0x6539 -j RETURN +# -A xr6_${rule}_local_out -p tcp $o_ipt_extra -j $local_target -m comment --comment "local_default: $o_local_default" +# COMMIT +# EOF +# echo "done" +} + +xray_rules6_iptchains_init_udp() { + [ -n "$o_redir_udp_port" ] || return 0 + xray_rules6_iptchains_init_ mangle udp +} + +xray_rules6_iptchains_init_() { + local table="$1" + local proto="$2" + local forward_rules + local src_default_target dst_default_target + local recentrst_mangle_rules recentrst_addset_rules + + case "$proto" in + tcp) + #forward_rules="-A xr6_${rule}_forward -p tcp -j REDIRECT --to-ports $o_redir_tcp_port" + forward_rules="-A xr6_${rule}_forward -p tcp -j TPROXY --on-port $o_redir_tcp_port --tproxy-mark 0x01/0x01" + if [ -n "$o_dst_forward_recentrst" ]; then + recentrst_mangle_rules=" + *mangle + -I PREROUTING 1 -p tcp -m tcp --tcp-flags RST RST -m recent --name ss_rules6_recentrst --set --rsource + COMMIT + " + recentrst_addset_rules=" + -A xr6_${rule}_dst -m recent --name ss_rules6_recentrst --rcheck --rdest --seconds 3 --hitcount 3 -j SET --add-set ss_rules6_dst_forward_recrst_ dst --exist + -A xr6_${rule}_dst -m set --match-set ss_rules6_dst_forward_recrst_ dst -j xr6_${rule}_forward + " + fi + ;; + udp) + ip -f inet6 rule add fwmark 1 lookup 100 || true + ip -f inet6 route add local default dev lo table 100 || true + forward_rules=" + -A xr6_${rule}_forward -p udp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 + -A xr6_${rule}_forward -p tcp -j TPROXY --on-port "$o_redir_udp_port" --tproxy-mark 0x01/0x01 + " + ;; + esac + case "$o_src_default" in + forward) src_default_target=xr6_${rule}_forward ;; + checkdst) src_default_target=xr6_${rule}_dst ;; + bypass|*) src_default_target=RETURN ;; + esac + case "$o_dst_default" in + forward) dst_default_target=xr6_${rule}_forward ;; + bypass|*) dst_default_target=RETURN ;; + esac + sed -e '/^\s*$/d' -e 's/^\s\+//' <<-EOF | $IP6TABLESRESTORE --noflush + *$table + :xr6_${rule}_pre_src - + :xr6_${rule}_src - + :xr6_${rule}_dst - + :xr6_${rule}_forward - + $(xray_rules6_iptchains_mkprerules "udp") + $(xray_rules6_iptchains_mkprerules "tcp") + -A xr6_${rule}_pre_src -m set --match-set ssr6_${rule}_dst_bypass_ dst -j RETURN + -A xr6_${rule}_pre_src -m set --match-set ss_rules6_dst_bypass_all dst -j MARK --set-mark 0x6539 + -A xr6_${rule}_pre_src -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN + -A xr6_${rule}_pre_src -m set --match-set ssr6_${rule}_dst_bypass dst -j RETURN + -A xr6_${rule}_pre_src -m mark --mark 0x6539 -j RETURN + -A xr6_${rule}_dst -m set --match-set ss_rules6_dst_bypass_all dst -j RETURN + -A xr6_${rule}_dst -m set --match-set ssr6_${rule}_dst_bypass dst -j RETURN + -A xr6_${rule}_pre_src -p tcp $o_ipt_extra -j xr6_${rule}_src + -A xr6_${rule}_pre_src -p udp $o_ipt_extra -j xr6_${rule}_src + -A xr6_${rule}_src -m set --match-set ssr6_${rule}_src_bypass src -j RETURN + -A xr6_${rule}_src -m set --match-set ssr6_${rule}_src_forward src -j xr6_${rule}_forward + -A xr6_${rule}_src -m set --match-set ssr6_${rule}_src_checkdst src -j xr6_${rule}_dst + -A xr6_${rule}_src -j $src_default_target -m comment --comment "src_default: $o_src_default" + -A xr6_${rule}_dst -m set --match-set ssr6_${rule}_dst_forward dst -j xr6_${rule}_forward + $recentrst_addset_rules + -A xr6_${rule}_dst -j $dst_default_target -m comment --comment "dst_default: $o_dst_default" + $forward_rules + COMMIT + $recentrst_mangle_rules + EOF +} + +xray_rules6_iptchains_mkprerules() { + local proto="$1" + + if [ -z "$o_ifnames" ]; then + echo "-A PREROUTING -p $proto -j xr6_${rule}_pre_src" + else + echo $o_ifnames \ + | tr ' ' '\n' \ + | sed "s/.*/-I PREROUTING 1 -i \\0 -p $proto -j xr6_${rule}_pre_src/" + fi +} + +xray_rules6_fw_drop() { + fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + while IFS=$"\n" read -r c; do + fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') + if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then + eval "$IP6TABLES -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + fi + done + fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j drop/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + while IFS=$"\n" read -r c; do + fwrule=$(echo "$c" | sed 's/drop/REDIRECT --to-ports 65535/') + if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then + eval "$IP6TABLES -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + fi + done +} + +xray_rules6_parse_args "$@" +xray_rules6_flush +xray_rules6_ipset_init +xray_rules6_iptchains_init +xray_rules6_fw_drop \ No newline at end of file diff --git a/xray-core/patches/001-fix-wireguard-go.patch b/xray-core/patches/001-fix-wireguard-go.patch new file mode 100644 index 000000000..421febce6 --- /dev/null +++ b/xray-core/patches/001-fix-wireguard-go.patch @@ -0,0 +1,97 @@ +diff -aurN xray-core-1.8.5.old/go.mod xray-core-1.8.5/go.mod +--- a/go.mod 2023-09-18 16:14:12.554956393 +0200 ++++ b/go.mod 2023-09-18 16:16:56.304259547 +0200 +@@ -12,13 +12,13 @@ + github.com/pires/go-proxyproto v0.7.0 + github.com/quic-go/quic-go v0.38.1 + github.com/refraction-networking/utls v1.4.3 +- github.com/sagernet/sing v0.2.9 ++ github.com/sagernet/sing v0.2.10-0.20230807080248-4db0062caa0a + github.com/sagernet/sing-shadowsocks v0.2.4 +- github.com/sagernet/wireguard-go v0.0.0-20221116151939-c99467f53f2c + github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb + github.com/stretchr/testify v1.8.4 + github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e + github.com/xtls/reality v0.0.0-20230828171259-e426190d57f6 ++ github.com/xtls/wireguard-go v0.0.0-20230303120718-56f003b3a66e + go4.org/netipx v0.0.0-20230824141953-6213f710f925 + golang.org/x/crypto v0.12.0 + golang.org/x/net v0.14.0 +@@ -47,7 +47,7 @@ + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/quic-go/qtls-go1-20 v0.3.3 // indirect + github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect +- go.uber.org/atomic v1.11.0 // indirect ++ go.uber.org/atomic v1.10.0 // indirect + golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/text v0.12.0 // indirect +diff -aurN xray-core-1.8.5.old/go.sum xray-core-1.8.5/go.sum +--- a/go.sum 2023-09-18 16:14:12.554956393 +0200 ++++ b/go.sum 2023-09-18 16:16:56.304259547 +0200 +@@ -123,12 +123,10 @@ + github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg= + github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s= + github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +-github.com/sagernet/sing v0.2.9 h1:3wsTz+JG5Wzy65eZnh6AuCrD2QqcRF6Iq6f7ttmJsAo= +-github.com/sagernet/sing v0.2.9/go.mod h1:Ta8nHnDLAwqySzKhGoKk4ZIB+vJ3GTKj7UPrWYvM+4w= ++github.com/sagernet/sing v0.2.10-0.20230807080248-4db0062caa0a h1:b89t6Mjgk4rJ5lrNMnCzy1/J116XkhgdB3YNd9FHyF4= ++github.com/sagernet/sing v0.2.10-0.20230807080248-4db0062caa0a/go.mod h1:9uOZwWkhT2Z2WldolLxX34s+1svAX4i4vvz5hy8u1MA= + github.com/sagernet/sing-shadowsocks v0.2.4 h1:s/CqXlvFAZhlIoHWUwPw5CoNnQ9Ibki9pckjuugtVfY= + github.com/sagernet/sing-shadowsocks v0.2.4/go.mod h1:80fNKP0wnqlu85GZXV1H1vDPC/2t+dQbFggOw4XuFUM= +-github.com/sagernet/wireguard-go v0.0.0-20221116151939-c99467f53f2c h1:vK2wyt9aWYHHvNLWniwijBu/n4pySypiKRhN32u/JGo= +-github.com/sagernet/wireguard-go v0.0.0-20221116151939-c99467f53f2c/go.mod h1:euOmN6O5kk9dQmgSS8Df4psAl3TCjxOz0NW60EWkSaI= + github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb h1:XfLJSPIOUX+osiMraVgIrMR27uMXnRJWGm1+GL8/63U= + github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb/go.mod h1:bR6DqgcAl1zTcOX8/pE2Qkj9XO00eCNqmKb7lXP8EAg= + github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +@@ -168,10 +166,12 @@ + github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= + github.com/xtls/reality v0.0.0-20230828171259-e426190d57f6 h1:T+YCYGfFdzyaKTDCdZn/hEiKvsw6yUfd+e4hze0rCUw= + github.com/xtls/reality v0.0.0-20230828171259-e426190d57f6/go.mod h1:rkuAY1S9F8eI8gDiPDYvACE8e2uwkyg8qoOTuwWov7Y= ++github.com/xtls/wireguard-go v0.0.0-20230303120718-56f003b3a66e h1:Y0CxNt+TeOhFUS2J/EF6osq9RukduvGYUNk2xPdKW60= ++github.com/xtls/wireguard-go v0.0.0-20230303120718-56f003b3a66e/go.mod h1:XFvPXP1gUqy/12j+KbdShku+YWiZJjaYLEAn4ZXaRGU= + github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= + go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +-go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +-go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= ++go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= ++go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= + go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= + go4.org/netipx v0.0.0-20230824141953-6213f710f925 h1:eeQDDVKFkx0g4Hyy8pHgmZaK0EqB4SD6rvKbUdN3ziQ= + go4.org/netipx v0.0.0-20230824141953-6213f710f925/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= +diff -aurN xray-core-1.8.5.old/proxy/wireguard/bind.go xray-core-1.8.5/proxy/wireguard/bind.go +--- a/proxy/wireguard/bind.go 2023-09-18 16:14:12.562956262 +0200 ++++ b/proxy/wireguard/bind.go 2023-09-18 16:15:43.597456179 +0200 +@@ -9,7 +9,7 @@ + "strconv" + "sync" + +- "github.com/sagernet/wireguard-go/conn" ++ "github.com/xtls/wireguard-go/conn" + xnet "github.com/xtls/xray-core/common/net" + "github.com/xtls/xray-core/features/dns" + "github.com/xtls/xray-core/transport/internet" +diff -aurN xray-core-1.8.5.old/proxy/wireguard/tun.go xray-core-1.8.5/proxy/wireguard/tun.go +--- a/proxy/wireguard/tun.go 2023-09-18 16:14:12.562956262 +0200 ++++ b/proxy/wireguard/tun.go 2023-09-18 16:15:52.413310983 +0200 +@@ -12,7 +12,7 @@ + "net/netip" + "os" + +- "github.com/sagernet/wireguard-go/tun" ++ "github.com/xtls/wireguard-go/tun" + "github.com/xtls/xray-core/features/dns" + "gvisor.dev/gvisor/pkg/buffer" + "gvisor.dev/gvisor/pkg/tcpip" +diff -aurN xray-core-1.8.5.old/proxy/wireguard/wireguard.go xray-core-1.8.5/proxy/wireguard/wireguard.go +--- a/proxy/wireguard/wireguard.go 2023-09-18 16:14:12.562956262 +0200 ++++ b/proxy/wireguard/wireguard.go 2023-09-18 16:16:01.109167878 +0200 +@@ -27,7 +27,7 @@ + "net/netip" + "strings" + +- "github.com/sagernet/wireguard-go/device" ++ "github.com/xtls/wireguard-go/device" + "github.com/xtls/xray-core/common" + "github.com/xtls/xray-core/common/buf" + "github.com/xtls/xray-core/common/log"