From d3e95d6d74c7e8f45535b320c4d6d94949695109 Mon Sep 17 00:00:00 2001 From: okxlin Date: Sun, 30 Jun 2024 23:37:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0softethervpn=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8#1351?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/softethervpn/README.md | 26 ++++++ apps/softethervpn/data.yml | 21 +++++ apps/softethervpn/latest/.env.sample | 13 +++ apps/softethervpn/latest/data.yml | 94 ++++++++++++++++++++ apps/softethervpn/latest/docker-compose.yml | 30 +++++++ apps/softethervpn/logo.png | Bin 0 -> 10372 bytes 6 files changed, 184 insertions(+) create mode 100644 apps/softethervpn/README.md create mode 100644 apps/softethervpn/data.yml create mode 100644 apps/softethervpn/latest/.env.sample create mode 100644 apps/softethervpn/latest/data.yml create mode 100644 apps/softethervpn/latest/docker-compose.yml create mode 100644 apps/softethervpn/logo.png diff --git a/apps/softethervpn/README.md b/apps/softethervpn/README.md new file mode 100644 index 00000000..353cb4d6 --- /dev/null +++ b/apps/softethervpn/README.md @@ -0,0 +1,26 @@ +# SoftEther VPN + +||徽章| +|---|---| +|GitLab CI|[![GitLab CI 构建状态](https://gitlab.com/SoftEther/SoftEtherVPN/badges/master/pipeline.svg)](https://gitlab.com/SoftEther/SoftEtherVPN/pipelines)| +|Coverity Scan|[![Coverity Scan 构建状态](https://scan.coverity.com/projects/16304/badge.svg)](https://scan.coverity.com/projects/softethervpn-softethervpn)| +|Cirrus CI|[![Cirrus CI 构建状态](https://api.cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN.svg)](https://cirrus-ci.com/github/SoftEtherVPN/SoftEtherVPN)| + +SoftEther VPN (开发者版主存储库) +- 一个开源的跨平台多协议 VPN 程序 +https://www.softether.org/ + +此存储库包含实验性代码。欢迎提交拉取请求。 + +稳定版可在以下网址获取: +https://github.com/SoftEtherVPN/SoftEtherVPN_Stable +非开发者用户可以稳定使用。 + +请注意,一些功能,在稳定版中不可用。 + +源代码包 (.zip 和 .tar.gz) 以及稳定版的二进制文件也可以在以下网址获取: +https://www.softether-download.com/ + +版权所有 (c) 所有 GitHub 上 SoftEther VPN 项目中的贡献者。 +版权所有 (c) Daiyuu Nobori、筑波大学 SoftEther 项目和 SoftEther 公司。 + diff --git a/apps/softethervpn/data.yml b/apps/softethervpn/data.yml new file mode 100644 index 00000000..3174a549 --- /dev/null +++ b/apps/softethervpn/data.yml @@ -0,0 +1,21 @@ +name: SoftEtherVPN +tags: + - 实用工具 + - 安全 +title: 开源多协议 VPN 软件 +description: 开源多协议 VPN 软件 +additionalProperties: + key: softethervpn + name: SoftEtherVPN + tags: + - Tool + - Security + shortDescZh: 开源多协议 VPN 软件 + shortDescEn: Open-source multi-protocol VPN software + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://www.softether.org + github: https://github.com/SoftEtherVPN/SoftEtherVPN + document: https://www.softether.org/4-docs diff --git a/apps/softethervpn/latest/.env.sample b/apps/softethervpn/latest/.env.sample new file mode 100644 index 00000000..3a425da9 --- /dev/null +++ b/apps/softethervpn/latest/.env.sample @@ -0,0 +1,13 @@ +CONTAINER_NAME="softethervpn" +SOFTETHER_DATA_PATH="./data/softether_data" +SOFTETHER_LOG_PATH="./data/softether_log" +SOFTETHER_PACKETLOG_PATH="./data/softether_packetlog" +SOFTETHER_SECURITYLOG_PATH="./data/softether_securitylog" +VPN_PORT_1194_UDP=1194 +VPN_PORT_1701_UDP=1701 +VPN_PORT_443=444 +VPN_PORT_4500_UDP=4500 +VPN_PORT_500_UDP=500 +VPN_PORT_53=53 +VPN_PORT_5555=5555 +VPN_PORT_992=992 diff --git a/apps/softethervpn/latest/data.yml b/apps/softethervpn/latest/data.yml new file mode 100644 index 00000000..6563b33d --- /dev/null +++ b/apps/softethervpn/latest/data.yml @@ -0,0 +1,94 @@ +additionalProperties: + formFields: + - default: "53" + edit: true + envKey: VPN_PORT_53 + labelEn: VPN Port 53 + labelZh: VPN 端口 53 + required: true + rule: paramPort + type: number + - default: "444" + edit: true + envKey: VPN_PORT_443 + labelEn: VPN Port 443 + labelZh: VPN 端口 443 + required: true + rule: paramPort + type: number + - default: "992" + edit: true + envKey: VPN_PORT_992 + labelEn: VPN Port 992 + labelZh: VPN 端口 992 + required: true + rule: paramPort + type: number + - default: "1194" + edit: true + envKey: VPN_PORT_1194_UDP + labelEn: VPN Port 1194 (UDP) + labelZh: VPN 端口 1194 (UDP) + required: true + rule: paramPort + type: number + - default: "5555" + edit: true + envKey: VPN_PORT_5555 + labelEn: VPN Port 5555 + labelZh: VPN 端口 5555 + required: true + rule: paramPort + type: number + - default: "500" + edit: true + envKey: VPN_PORT_500_UDP + labelEn: VPN Port 500 (UDP) + labelZh: VPN 端口 500 (UDP) + required: true + rule: paramPort + type: number + - default: "4500" + edit: true + envKey: VPN_PORT_4500_UDP + labelEn: VPN Port 4500 (UDP) + labelZh: VPN 端口 4500 (UDP) + required: true + rule: paramPort + type: number + - default: "1701" + edit: true + envKey: VPN_PORT_1701_UDP + labelEn: VPN Port 1701 (UDP) + labelZh: VPN 端口 1701 (UDP) + required: true + rule: paramPort + type: number + - default: "./data/softether_data" + disabled: true + envKey: SOFTETHER_DATA_PATH + labelEn: SoftEther Data Path + labelZh: SoftEther 数据路径 + required: true + type: text + - default: "./data/softether_log" + disabled: true + envKey: SOFTETHER_LOG_PATH + labelEn: SoftEther Log Path + labelZh: SoftEther 日志路径 + required: true + type: text + - default: "./data/softether_packetlog" + disabled: true + envKey: SOFTETHER_PACKETLOG_PATH + labelEn: SoftEther Packet Log Path + labelZh: SoftEther 数据包日志路径 + required: true + type: text + - default: "./data/softether_securitylog" + disabled: true + envKey: SOFTETHER_SECURITYLOG_PATH + labelEn: SoftEther Security Log Path + labelZh: SoftEther 安全日志路径 + required: true + type: text diff --git a/apps/softethervpn/latest/docker-compose.yml b/apps/softethervpn/latest/docker-compose.yml new file mode 100644 index 00000000..3c76eee3 --- /dev/null +++ b/apps/softethervpn/latest/docker-compose.yml @@ -0,0 +1,30 @@ +services: + softether: + image: "softethervpn/vpnserver:latest" + cap_add: + - NET_ADMIN + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - ${VPN_PORT_53}:53 + - ${VPN_PORT_443}:443 + - ${VPN_PORT_992}:992 + - ${VPN_PORT_1194_UDP}:1194/udp + - ${VPN_PORT_5555}:5555 + - ${VPN_PORT_500_UDP}:500/udp + - ${VPN_PORT_4500_UDP}:4500/udp + - ${VPN_PORT_1701_UDP}:1701/udp + volumes: + - "/etc/localtime:/etc/localtime:ro" + - "/etc/timezone:/etc/timezone:ro" + - ${SOFTETHER_DATA_PATH}:/mnt + - ${SOFTETHER_LOG_PATH}:/root/server_log + - ${SOFTETHER_PACKETLOG_PATH}:/root/packet_log + - ${SOFTETHER_SECURITYLOG_PATH}:/root/security_log + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/softethervpn/logo.png b/apps/softethervpn/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef3ca8f53ccf53c77411c49085d75d9d1b08cff GIT binary patch literal 10372 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%0D|d^O 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