Spaces:
Paused
Paused
eikarna commited on
Commit ·
ba2b0bb
0
Parent(s):
rebase commit
Browse files- .gitattributes +2 -0
- .github/workflows/sync-hf.yml +18 -0
- Dockerfile +103 -0
- Dockerfile-example +93 -0
- README.md +13 -0
- other/udp-tunnel.service +17 -0
- scripts/generate-port.sh +7 -0
- scripts/manager.sh +309 -0
- scripts/optimize.sh +42 -0
- scripts/port-forward-universal.sh +55 -0
- scripts/port-forward.sh +73 -0
- setup.sh +13 -0
- start.sh +81 -0
- udp_custom/config.json +8 -0
- udp_custom/udp-custom +3 -0
- udp_custom/udp-custom-config.json +8 -0
- udp_custom/udp-custom.service +15 -0
- udpgw/badvpn-udpgw +3 -0
- udpgw/badvpn.service +15 -0
- zivpn/config.json +16 -0
- zivpn/zivpn-config.json +17 -0
- zivpn/zivpn.crt +32 -0
- zivpn/zivpn.key +52 -0
- zivpn/zivpn.service +20 -0
.gitattributes
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
udpgw/badvpn-udpgw filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
udp_custom/udp-custom filter=lfs diff=lfs merge=lfs -text
|
.github/workflows/sync-hf.yml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: Sync to Hugging Face space
|
| 2 |
+
on:
|
| 3 |
+
push:
|
| 4 |
+
# to run this workflow manually from the Actions tab
|
| 5 |
+
workflow_dispatch:
|
| 6 |
+
|
| 7 |
+
jobs:
|
| 8 |
+
sync-to-space:
|
| 9 |
+
runs-on: ubuntu-latest
|
| 10 |
+
steps:
|
| 11 |
+
- uses: actions/checkout@v4
|
| 12 |
+
with:
|
| 13 |
+
fetch-depth: 0
|
| 14 |
+
- name: Push to Hugging Face Hub
|
| 15 |
+
env:
|
| 16 |
+
HF_TOKEN: ${{ secrets.HF_TOKEN }}
|
| 17 |
+
run: |
|
| 18 |
+
git push --force https://eikarna:$HF_TOKEN@huggingface.co/spaces/eikarna/myvpnserver main:main
|
Dockerfile
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ==================================================================================================
|
| 2 |
+
# Dockerfile untuk VPN Server (UDP Custom, ZIVPN, BadVPN)
|
| 3 |
+
# Target: Hugging Face Spaces
|
| 4 |
+
# ==================================================================================================
|
| 5 |
+
|
| 6 |
+
# Gunakan base image Ubuntu 22.04 dengan build tools, mirip dengan contoh
|
| 7 |
+
FROM buildpack-deps:22.04-curl
|
| 8 |
+
|
| 9 |
+
# Set variabel lingkungan
|
| 10 |
+
ENV DEBIAN_FRONTEND=noninteractive \
|
| 11 |
+
TZ=Asia/Jakarta \
|
| 12 |
+
# Tentukan direktori kerja aplikasi
|
| 13 |
+
APP_HOME=/app
|
| 14 |
+
|
| 15 |
+
# Buat direktori aplikasi
|
| 16 |
+
WORKDIR ${APP_HOME}
|
| 17 |
+
|
| 18 |
+
# Instal dependensi yang diperlukan untuk skrip jaringan dan server
|
| 19 |
+
# - iptables: Untuk firewall dan NAT
|
| 20 |
+
# - iproute2: Menyediakan command 'ip' untuk routing
|
| 21 |
+
# - ethtool: Untuk optimasi network interface card (NIC)
|
| 22 |
+
# - procps: Menyediakan 'pgrep', 'pkill' (berguna untuk debugging)
|
| 23 |
+
# - taskset: Untuk mengikat proses ke core CPU (opsional, tapi ada di service asli)
|
| 24 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
| 25 |
+
iptables \
|
| 26 |
+
iproute2 \
|
| 27 |
+
ethtool \
|
| 28 |
+
procps \
|
| 29 |
+
util-linux \
|
| 30 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 31 |
+
|
| 32 |
+
# Salin semua file dari proyek ke dalam direktori kerja di container
|
| 33 |
+
COPY . .
|
| 34 |
+
|
| 35 |
+
# Berikan izin eksekusi ke semua biner dan skrip yang relevan
|
| 36 |
+
RUN chmod +x \
|
| 37 |
+
${APP_HOME}/scripts/*.sh \
|
| 38 |
+
${APP_HOME}/udpgw/badvpn-udpgw \
|
| 39 |
+
${APP_HOME}/udp_custom/udp-custom \
|
| 40 |
+
${APP_HOME}/zivpn/udp-zivpn-linux-amd64 \
|
| 41 |
+
${APP_HOME}/start.sh
|
| 42 |
+
|
| 43 |
+
# ==================================================================================================
|
| 44 |
+
# Port Exposure
|
| 45 |
+
# --------------------------------------------------------------------------------------------------
|
| 46 |
+
# Port-port berikut diekspos berdasarkan aturan iptables di 'port-forward.sh'.
|
| 47 |
+
# Karena Hugging Face Spaces mungkin memiliki batasan jumlah port,
|
| 48 |
+
# Anda mungkin perlu menyesuaikan ini. Namun, untuk fungsionalitas penuh,
|
| 49 |
+
|
| 50 |
+
# Port untuk UDP-Custom
|
| 51 |
+
EXPOSE 3671/udp
|
| 52 |
+
# Port untuk ZIVPN
|
| 53 |
+
EXPOSE 5667/udp
|
| 54 |
+
# Port untuk ZIVPN Legacy
|
| 55 |
+
EXPOSE 5666/udp
|
| 56 |
+
# Port untuk Prometheus Metrics dari ZIVPN
|
| 57 |
+
EXPOSE 8080/tcp
|
| 58 |
+
|
| 59 |
+
# Port Ranges (jika platform mendukung atau untuk penggunaan di luar HF Spaces)
|
| 60 |
+
# Sebaiknya definisikan port utama di atas, dan jika memungkinkan, gunakan range.
|
| 61 |
+
# Docker tidak secara teknis "mengekspos" range dengan cara ini, ini lebih untuk dokumentasi.
|
| 62 |
+
# Aturan iptables di dalam kontainer yang akan menangani traffic ini.
|
| 63 |
+
EXPOSE 1-5999/udp
|
| 64 |
+
EXPOSE 6000-19999/udp
|
| 65 |
+
EXPOSE 20000-65535/udp
|
| 66 |
+
# ==================================================================================================
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
# Tentukan entrypoint yang akan menjalankan skrip startup
|
| 70 |
+
ENTRYPOINT ["/app/start.sh"]
|
| 71 |
+
|
| 72 |
+
# ==================================================================================================
|
| 73 |
+
# CATATAN PENTING UNTUK DEPLOYMENT (Hugging Face Spaces & Docker)
|
| 74 |
+
# --------------------------------------------------------------------------------------------------
|
| 75 |
+
# Untuk menjalankan kontainer ini dengan benar, Anda HARUS memberikan kapabilitas kernel
|
| 76 |
+
# dan mengatur parameter sysctl.
|
| 77 |
+
#
|
| 78 |
+
# Contoh Perintah 'docker run':
|
| 79 |
+
# docker run -d --name my-vpn-server \
|
| 80 |
+
# --cap-add=NET_ADMIN \
|
| 81 |
+
# --cap-add=SYS_NICE \
|
| 82 |
+
# --sysctl net.ipv4.ip_forward=1 \
|
| 83 |
+
# --sysctl net.core.rmem_max=16777216 \
|
| 84 |
+
# --sysctl net.core.wmem_max=16777216 \
|
| 85 |
+
# -p 8080:8080/tcp \
|
| 86 |
+
# -p 1000-5000:1000-5000/udp \
|
| 87 |
+
# <nama-image-anda>
|
| 88 |
+
#
|
| 89 |
+
# Di Hugging Face Spaces, Anda perlu mengkonfigurasi ini di `README.md` (metadata).
|
| 90 |
+
# Contoh metadata di README.md:
|
| 91 |
+
# ---
|
| 92 |
+
# title: My VPN Server
|
| 93 |
+
# emoji: 🚀
|
| 94 |
+
# colorFrom: blue
|
| 95 |
+
# colorTo: green
|
| 96 |
+
# sdk: docker
|
| 97 |
+
# app_port: 8080
|
| 98 |
+
# docker_args: "--cap-add=NET_ADMIN --cap-add=SYS_NICE"
|
| 99 |
+
# ---
|
| 100 |
+
#
|
| 101 |
+
# Catatan: Hugging Face Spaces mungkin tidak mendukung semua flag --sysctl.
|
| 102 |
+
# Skrip start.sh mencoba mengaturnya, tetapi --cap-add=NET_ADMIN adalah yang paling krusial.
|
| 103 |
+
# ==================================================================================================
|
Dockerfile-example
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM buildpack-deps:22.04-curl
|
| 2 |
+
|
| 3 |
+
# Set arguments that will be populated by Hugging Face secrets
|
| 4 |
+
ARG DB_TYPE
|
| 5 |
+
ARG DB_POSTGRESDB_DATABASE
|
| 6 |
+
ARG DB_POSTGRESDB_HOST
|
| 7 |
+
ARG DB_POSTGRESDB_PORT
|
| 8 |
+
ARG DB_POSTGRESDB_USER
|
| 9 |
+
ARG DB_POSTGRESDB_PASSWORD
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
# DB_TYPE Available option:
|
| 13 |
+
# 'sqlite' | 'mariadb' | 'mysqldb' | 'postgresdb'
|
| 14 |
+
|
| 15 |
+
# Set static and dynamic environment variables
|
| 16 |
+
ENV DEBIAN_FRONTEND=noninteractive \
|
| 17 |
+
TZ=Asia/Jakarta \
|
| 18 |
+
N8N_PORT=7860 \
|
| 19 |
+
N8N_HOST=eikarna-n8n.hf.space \
|
| 20 |
+
WEBHOOK_URL=https://eikarna-n8n.hf.space \
|
| 21 |
+
USER=eikarna \
|
| 22 |
+
HOME=/home/eikarna \
|
| 23 |
+
# Set runtime environment variables from the build arguments
|
| 24 |
+
DB_TYPE=${DB_TYPE} \
|
| 25 |
+
DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE} \
|
| 26 |
+
DB_POSTGRESDB_HOST=${DB_POSTGRESDB_HOST} \
|
| 27 |
+
DB_POSTGRESDB_PORT=${DB_POSTGRESDB_PORT} \
|
| 28 |
+
DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER} \
|
| 29 |
+
DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD} \
|
| 30 |
+
DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false \
|
| 31 |
+
N8N_ENCRYPTION_KEY=7124bcedb3c8d535c3dc99036a1a49c7bc3e33fb372e90c8e8a8c8311804bf0f \
|
| 32 |
+
# Recommended setting to avoid permission warnings
|
| 33 |
+
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
|
| 34 |
+
|
| 35 |
+
USER root
|
| 36 |
+
|
| 37 |
+
RUN useradd -m -u 1000 ${USER}
|
| 38 |
+
|
| 39 |
+
# Install dependencies with quiet flags to reduce build logs
|
| 40 |
+
RUN apt-get -qq update && apt-get -qq install -y --no-install-recommends \
|
| 41 |
+
bash \
|
| 42 |
+
unzip \
|
| 43 |
+
git \
|
| 44 |
+
git-lfs \
|
| 45 |
+
curl \
|
| 46 |
+
sudo \
|
| 47 |
+
wget \
|
| 48 |
+
ffmpeg \
|
| 49 |
+
psmisc \
|
| 50 |
+
aria2 \
|
| 51 |
+
build-essential \
|
| 52 |
+
libnss3-dev \
|
| 53 |
+
libgdk-pixbuf2.0-dev \
|
| 54 |
+
libgtk-3-dev \
|
| 55 |
+
libxss-dev \
|
| 56 |
+
zlib1g-dev \
|
| 57 |
+
libncurses5-dev \
|
| 58 |
+
libssl-dev \
|
| 59 |
+
libreadline-dev \
|
| 60 |
+
libffi-dev \
|
| 61 |
+
libasound2 \
|
| 62 |
+
make \
|
| 63 |
+
libnss3 \
|
| 64 |
+
software-properties-common > /dev/null 2>&1 && \
|
| 65 |
+
rm -rf /var/lib/apt/lists/*
|
| 66 |
+
|
| 67 |
+
# Install Node.js and proxy with quiet flags
|
| 68 |
+
RUN curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash - > /dev/null 2>&1 && \
|
| 69 |
+
apt-get -qq install -y nodejs > /dev/null 2>&1 && \
|
| 70 |
+
npm install -g configurable-http-proxy --silent
|
| 71 |
+
|
| 72 |
+
# Install Python from source with output redirected to /dev/null to silence it
|
| 73 |
+
RUN cd /tmp && \
|
| 74 |
+
wget -q https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz && \
|
| 75 |
+
tar -xf Python-3.10.12.tgz && \
|
| 76 |
+
cd Python-3.10.12 && \
|
| 77 |
+
./configure --enable-optimizations > /dev/null 2>&1 && \
|
| 78 |
+
make -j8 install > /dev/null 2>&1 && \
|
| 79 |
+
cd / && \
|
| 80 |
+
rm -rf /tmp/Python-3.10.12 /tmp/Python-3.10.12.tgz
|
| 81 |
+
|
| 82 |
+
WORKDIR ${HOME}
|
| 83 |
+
|
| 84 |
+
# Install n8n with silent flag
|
| 85 |
+
RUN npm install n8n -g --silent
|
| 86 |
+
# Create the .n8n directory and set permissions so n8n doesn't have to do it at runtime
|
| 87 |
+
RUN mkdir -p ${HOME}/.n8n && chown -R ${USER}:${USER} ${HOME}
|
| 88 |
+
|
| 89 |
+
USER ${USER}
|
| 90 |
+
|
| 91 |
+
EXPOSE ${N8N_PORT}
|
| 92 |
+
|
| 93 |
+
CMD ["n8n", "start"]
|
README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: My VPN Server
|
| 3 |
+
emoji: 🚀
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: green
|
| 6 |
+
sdk: docker
|
| 7 |
+
app_port: 7860
|
| 8 |
+
docker_args: "--cap-add=NET_ADMIN --cap-add=SYS_NICE"
|
| 9 |
+
---
|
| 10 |
+
Mereka memanggil ku seorang pahlawan, karena aku menyelamatkan
|
| 11 |
+
mereka dari kehancuran.
|
| 12 |
+
|
| 13 |
+
Saturday, 12 July 2025
|
other/udp-tunnel.service
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Unit]
|
| 2 |
+
Description=Tunnel server auto-setup script service
|
| 3 |
+
Wants=network-online.target
|
| 4 |
+
After=network-online.target
|
| 5 |
+
|
| 6 |
+
[Service]
|
| 7 |
+
LimitAS=infinity
|
| 8 |
+
LimitRSS=infinity
|
| 9 |
+
Type=simple
|
| 10 |
+
User=root
|
| 11 |
+
WorkingDirectory=/root/udp-custom/scripts
|
| 12 |
+
# Tunda 5 detik setelah network-online.target terpenuhi
|
| 13 |
+
ExecStartPre=/bin/sleep 5
|
| 14 |
+
ExecStart=/bin/bash port-forward.sh
|
| 15 |
+
|
| 16 |
+
[Install]
|
| 17 |
+
WantedBy=default.target
|
scripts/generate-port.sh
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Menghasilkan nomor port dari 6000 hingga 19999, dipisahkan dengan koma
|
| 4 |
+
ports=$(seq -s, 6000 19999)
|
| 5 |
+
|
| 6 |
+
# Menampilkan hasil
|
| 7 |
+
echo $ports | termux-clipboard-set
|
scripts/manager.sh
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# firewall_manager.sh - Manajemen firewall rules terpadu dengan iptables, ufw, dan firewalld
|
| 3 |
+
#
|
| 4 |
+
# Fitur:
|
| 5 |
+
# - Validasi input yang lebih kompleks untuk aturan
|
| 6 |
+
# - Logging setiap aksi ke /var/log/firewall_manager.log
|
| 7 |
+
# - Integrasi dengan firewalld (jika aktif) secara langsung
|
| 8 |
+
#
|
| 9 |
+
# Usage:
|
| 10 |
+
# sudo ./firewall_manager.sh {start|stop|status|list|add-rule|del-rule|backup|restore}
|
| 11 |
+
#
|
| 12 |
+
# Contoh:
|
| 13 |
+
# sudo ./firewall_manager.sh start
|
| 14 |
+
# sudo ./firewall_manager.sh add-rule udp 1000:2000 9999
|
| 15 |
+
|
| 16 |
+
set -euo pipefail
|
| 17 |
+
LOG_FILE="/var/log/firewall_manager.log"
|
| 18 |
+
|
| 19 |
+
# === Fungsi Logging ===
|
| 20 |
+
log_msg() {
|
| 21 |
+
local level="$1"
|
| 22 |
+
shift
|
| 23 |
+
local message="$*"
|
| 24 |
+
local timestamp
|
| 25 |
+
timestamp=$(date +'%Y-%m-%d %H:%M:%S')
|
| 26 |
+
echo "${timestamp} [${level}] ${message}" | tee -a "${LOG_FILE}"
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
# === Fungsi Validasi ===
|
| 30 |
+
validate_protocol() {
|
| 31 |
+
local protocol="$1"
|
| 32 |
+
if [[ "$protocol" != "udp" && "$protocol" != "tcp" ]]; then
|
| 33 |
+
log_msg "ERROR" "Protocol harus 'udp' atau 'tcp'. Diberikan: ${protocol}"
|
| 34 |
+
exit 1
|
| 35 |
+
fi
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
validate_port_range() {
|
| 39 |
+
local port_range="$1"
|
| 40 |
+
if ! [[ "$port_range" =~ ^[0-9]{1,5}(:[0-9]{1,5})?$ ]]; then
|
| 41 |
+
log_msg "ERROR" "Format port range tidak valid: ${port_range}"
|
| 42 |
+
exit 1
|
| 43 |
+
fi
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
validate_port() {
|
| 47 |
+
local port="$1"
|
| 48 |
+
if ! [[ "$port" =~ ^[0-9]{1,5}$ ]]; then
|
| 49 |
+
log_msg "ERROR" "Format port tidak valid: ${port}"
|
| 50 |
+
exit 1
|
| 51 |
+
fi
|
| 52 |
+
if (( port < 1 || port > 65535 )); then
|
| 53 |
+
log_msg "ERROR" "Port harus berada di antara 1 dan 65535: ${port}"
|
| 54 |
+
exit 1
|
| 55 |
+
fi
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
# === Fungsi Helper ===
|
| 59 |
+
usage() {
|
| 60 |
+
cat << EOF
|
| 61 |
+
Usage: $0 {start|stop|status|list|add-rule|del-rule|backup|restore}
|
| 62 |
+
|
| 63 |
+
Commands:
|
| 64 |
+
start : Enable IP forwarding dan pasang aturan default.
|
| 65 |
+
(Default: UDP CUSTOM (1:5999->3671) dan ZIVPN (6000:19999->5667) + aturan ufw dan firewalld jika aktif)
|
| 66 |
+
stop : Flush aturan NAT dan disable IP forwarding.
|
| 67 |
+
status : Tampilkan status IP forwarding dan aturan firewall saat ini.
|
| 68 |
+
list : List aturan iptables (tabel NAT) dan status ufw.
|
| 69 |
+
add-rule : Tambah aturan kustom.
|
| 70 |
+
Sintaks: $0 add-rule <protocol> <port_range> <destination_port>
|
| 71 |
+
Contoh: $0 add-rule udp 1000:2000 9999
|
| 72 |
+
del-rule : Hapus aturan kustom.
|
| 73 |
+
Sintaks: $0 del-rule <chain> <protocol> <port_range> <destination_port>
|
| 74 |
+
Contoh: $0 del-rule PREROUTING udp 1000:2000 9999
|
| 75 |
+
backup : Backup aturan iptables NAT ke file backup.
|
| 76 |
+
restore : Restore aturan iptables NAT dari file backup.
|
| 77 |
+
|
| 78 |
+
EOF
|
| 79 |
+
exit 1
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
check_root() {
|
| 83 |
+
if [ "$EUID" -ne 0 ]; then
|
| 84 |
+
echo "Jalankan script ini sebagai root." >&2
|
| 85 |
+
exit 1
|
| 86 |
+
fi
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
enable_ip_forwarding() {
|
| 90 |
+
log_msg "INFO" "Mengaktifkan IP forwarding"
|
| 91 |
+
sysctl -w net.ipv4.ip_forward=1 >/dev/null
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
disable_ip_forwarding() {
|
| 95 |
+
log_msg "INFO" "Menonaktifkan IP forwarding"
|
| 96 |
+
sysctl -w net.ipv4.ip_forward=0 >/dev/null
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
get_default_interface() {
|
| 100 |
+
local iface
|
| 101 |
+
iface=$(ip route | awk '/default/ {print $5; exit}')
|
| 102 |
+
echo "$iface"
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
is_firewalld_active() {
|
| 106 |
+
if systemctl is-active --quiet firewalld; then
|
| 107 |
+
return 0
|
| 108 |
+
else
|
| 109 |
+
return 1
|
| 110 |
+
fi
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
# === Integrasi Firewalld ===
|
| 114 |
+
apply_firewalld_rule() {
|
| 115 |
+
local action="$1" # add or remove
|
| 116 |
+
local rule="$2"
|
| 117 |
+
# Contoh penggunaan:
|
| 118 |
+
# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -i ${interface} -p udp --dport 1:7299 -j DNAT --to-destination :3671
|
| 119 |
+
firewall-cmd --permanent --direct --"${action}"-rule ipv4 nat PREROUTING 0 ${rule}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
reload_firewalld() {
|
| 123 |
+
firewall-cmd --reload
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
# === Fungsi Aturan Default ===
|
| 127 |
+
apply_default_rules() {
|
| 128 |
+
local interface
|
| 129 |
+
interface=$(get_default_interface)
|
| 130 |
+
if [[ -z "$interface" ]]; then
|
| 131 |
+
log_msg "ERROR" "Interface default tidak ditemukan."
|
| 132 |
+
exit 1
|
| 133 |
+
fi
|
| 134 |
+
log_msg "INFO" "Menggunakan interface: ${interface}"
|
| 135 |
+
|
| 136 |
+
./port-forward.sh
|
| 137 |
+
|
| 138 |
+
# Udp Custom: izinkan port untuk Udp Custom
|
| 139 |
+
ufw allow 1:5999/udp && ufw allow 3671/udp
|
| 140 |
+
log_msg "INFO" "Aturan UFW diterapkan untuk port 1:5999/udp dan 3671/udp"
|
| 141 |
+
|
| 142 |
+
# UFW: izinkan port untuk ZIVPN
|
| 143 |
+
ufw allow 6000:19999/udp && ufw allow 5667/udp
|
| 144 |
+
log_msg "INFO" "Aturan UFW diterapkan untuk port 6000:19999/udp dan 5667/udp"
|
| 145 |
+
|
| 146 |
+
# Integrasi firewalld jika aktif
|
| 147 |
+
if is_firewalld_active; then
|
| 148 |
+
log_msg "INFO" "firewalld terdeteksi. Menerapkan aturan ke firewalld..."
|
| 149 |
+
# Aturan untuk UDP CUSTOM
|
| 150 |
+
apply_firewalld_rule "add" "-i ${interface} -p udp --dport 1:7299 -j DNAT --to-destination :3671"
|
| 151 |
+
# Aturan untuk ZIVPN
|
| 152 |
+
apply_firewalld_rule "add" "-i ${interface} -p udp --dport 6000:19999 -j DNAT --to-destination :5667"
|
| 153 |
+
reload_firewalld
|
| 154 |
+
log_msg "INFO" "Aturan firewalld diterapkan dan reload"
|
| 155 |
+
fi
|
| 156 |
+
|
| 157 |
+
log_msg "INFO" "Aturan default berhasil diterapkan."
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
flush_firewall_rules() {
|
| 161 |
+
log_msg "INFO" "Menghapus semua aturan di NAT table iptables..."
|
| 162 |
+
iptables -t nat -F
|
| 163 |
+
log_msg "INFO" "Aturan NAT table iptables telah dihapus."
|
| 164 |
+
|
| 165 |
+
# Integrasi firewalld: Hapus aturan default jika firewalld aktif
|
| 166 |
+
if is_firewalld_active; then
|
| 167 |
+
local interface
|
| 168 |
+
interface=$(get_default_interface)
|
| 169 |
+
log_msg "INFO" "Menghapus aturan firewalld..."
|
| 170 |
+
apply_firewalld_rule "remove" "-i ${interface} -p udp --dport 1:7299 -j DNAT --to-destination :3671"
|
| 171 |
+
apply_firewalld_rule "remove" "-i ${interface} -p udp --dport 6000:19999 -j DNAT --to-destination :5667"
|
| 172 |
+
reload_firewalld
|
| 173 |
+
log_msg "INFO" "Aturan firewalld default dihapus."
|
| 174 |
+
fi
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
list_firewall_rules() {
|
| 178 |
+
echo "Aturan iptables (NAT table):"
|
| 179 |
+
iptables -t nat -L -n -v
|
| 180 |
+
echo
|
| 181 |
+
echo "Status UFW:"
|
| 182 |
+
ufw status verbose
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
backup_firewall_rules() {
|
| 186 |
+
local backup_file="/root/iptables_nat_backup_$(date +%F).txt"
|
| 187 |
+
iptables-save -t nat > "${backup_file}"
|
| 188 |
+
log_msg "INFO" "Backup aturan NAT table iptables telah disimpan ke ${backup_file}"
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
restore_firewall_rules() {
|
| 192 |
+
local backup_file="/root/iptables_nat_backup_$(date +%F).txt"
|
| 193 |
+
if [ ! -f "${backup_file}" ]; then
|
| 194 |
+
log_msg "ERROR" "File backup ${backup_file} tidak ditemukan."
|
| 195 |
+
exit 1
|
| 196 |
+
fi
|
| 197 |
+
iptables-restore < "${backup_file}"
|
| 198 |
+
log_msg "INFO" "Aturan NAT table iptables direstore dari ${backup_file}"
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
add_custom_rule() {
|
| 202 |
+
# Ekspektasi: protocol, port_range, destination_port
|
| 203 |
+
if [ $# -ne 3 ]; then
|
| 204 |
+
echo "Usage: $0 add-rule <protocol> <port_range> <destination_port>"
|
| 205 |
+
exit 1
|
| 206 |
+
fi
|
| 207 |
+
local protocol="$1"
|
| 208 |
+
local port_range="$2"
|
| 209 |
+
local dest_port="$3"
|
| 210 |
+
|
| 211 |
+
validate_protocol "${protocol}"
|
| 212 |
+
validate_port_range "${port_range}"
|
| 213 |
+
validate_port "${dest_port}"
|
| 214 |
+
|
| 215 |
+
local interface
|
| 216 |
+
interface=$(get_default_interface)
|
| 217 |
+
if [[ -z "$interface" ]]; then
|
| 218 |
+
log_msg "ERROR" "Interface default tidak ditemukan."
|
| 219 |
+
exit 1
|
| 220 |
+
fi
|
| 221 |
+
|
| 222 |
+
iptables -t nat -A PREROUTING -i "${interface}" -p "${protocol}" --dport "${port_range}" -j DNAT --to-destination :${dest_port}
|
| 223 |
+
log_msg "INFO" "Aturan kustom iptables ditambahkan: ${protocol} ${port_range} -> ${dest_port} pada interface ${interface}"
|
| 224 |
+
|
| 225 |
+
# Integrasi firewalld jika aktif
|
| 226 |
+
if is_firewalld_active; then
|
| 227 |
+
apply_firewalld_rule "add" "-i ${interface} -p ${protocol} --dport ${port_range} -j DNAT --to-destination :${dest_port}"
|
| 228 |
+
reload_firewalld
|
| 229 |
+
log_msg "INFO" "Aturan kustom firewalld ditambahkan: ${protocol} ${port_range} -> ${dest_port}"
|
| 230 |
+
fi
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
delete_custom_rule() {
|
| 234 |
+
# Ekspektasi: chain, protocol, port_range, destination_port
|
| 235 |
+
if [ $# -ne 4 ]; then
|
| 236 |
+
echo "Usage: $0 del-rule <chain> <protocol> <port_range> <destination_port>"
|
| 237 |
+
exit 1
|
| 238 |
+
fi
|
| 239 |
+
local chain="$1"
|
| 240 |
+
local protocol="$2"
|
| 241 |
+
local port_range="$3"
|
| 242 |
+
local dest_port="$4"
|
| 243 |
+
|
| 244 |
+
validate_protocol "${protocol}"
|
| 245 |
+
validate_port_range "${port_range}"
|
| 246 |
+
validate_port "${dest_port}"
|
| 247 |
+
|
| 248 |
+
local interface
|
| 249 |
+
interface=$(get_default_interface)
|
| 250 |
+
if [[ -z "$interface" ]]; then
|
| 251 |
+
log_msg "ERROR" "Interface default tidak ditemukan."
|
| 252 |
+
exit 1
|
| 253 |
+
fi
|
| 254 |
+
|
| 255 |
+
iptables -t nat -D "${chain}" -i "${interface}" -p "${protocol}" --dport "${port_range}" -j DNAT --to-destination :${dest_port}
|
| 256 |
+
log_msg "INFO" "Aturan kustom iptables dihapus: ${chain} ${protocol} ${port_range} -> ${dest_port}"
|
| 257 |
+
|
| 258 |
+
# Integrasi firewalld jika aktif
|
| 259 |
+
if is_firewalld_active; then
|
| 260 |
+
apply_firewalld_rule "remove" "-i ${interface} -p ${protocol} --dport ${port_range} -j DNAT --to-destination :${dest_port}"
|
| 261 |
+
reload_firewalld
|
| 262 |
+
log_msg "INFO" "Aturan kustom firewalld dihapus: ${chain} ${protocol} ${port_range} -> ${dest_port}"
|
| 263 |
+
fi
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
# === Main Program ===
|
| 267 |
+
check_root
|
| 268 |
+
|
| 269 |
+
if [ $# -eq 0 ]; then
|
| 270 |
+
usage
|
| 271 |
+
fi
|
| 272 |
+
|
| 273 |
+
COMMAND=$1
|
| 274 |
+
shift
|
| 275 |
+
|
| 276 |
+
case "${COMMAND}" in
|
| 277 |
+
start)
|
| 278 |
+
enable_ip_forwarding
|
| 279 |
+
apply_default_rules
|
| 280 |
+
;;
|
| 281 |
+
stop)
|
| 282 |
+
flush_firewall_rules
|
| 283 |
+
disable_ip_forwarding
|
| 284 |
+
;;
|
| 285 |
+
status)
|
| 286 |
+
echo "Status IP forwarding:"
|
| 287 |
+
sysctl net.ipv4.ip_forward
|
| 288 |
+
echo
|
| 289 |
+
list_firewall_rules
|
| 290 |
+
;;
|
| 291 |
+
list)
|
| 292 |
+
list_firewall_rules
|
| 293 |
+
;;
|
| 294 |
+
add-rule)
|
| 295 |
+
add_custom_rule "$@"
|
| 296 |
+
;;
|
| 297 |
+
del-rule)
|
| 298 |
+
delete_custom_rule "$@"
|
| 299 |
+
;;
|
| 300 |
+
backup)
|
| 301 |
+
backup_firewall_rules
|
| 302 |
+
;;
|
| 303 |
+
restore)
|
| 304 |
+
restore_firewall_rules
|
| 305 |
+
;;
|
| 306 |
+
*)
|
| 307 |
+
usage
|
| 308 |
+
;;
|
| 309 |
+
esac
|
scripts/optimize.sh
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Optimasi buffer jaringan
|
| 4 |
+
echo "Mengatur buffer jaringan..."
|
| 5 |
+
sysctl -w net.core.rmem_max=16777216 # Maximum receive buffer
|
| 6 |
+
sysctl -w net.core.wmem_max=16777216 # Maximum send buffer
|
| 7 |
+
sysctl -w net.ipv4.udp_rmem_min=8192 # Minimum UDP receive buffer
|
| 8 |
+
sysctl -w net.ipv4.udp_wmem_min=8192 # Minimum UDP send buffer
|
| 9 |
+
|
| 10 |
+
# Mengatur backlog queue untuk UDP
|
| 11 |
+
echo "Mengatur backlog queue..."
|
| 12 |
+
sysctl -w net.core.netdev_max_backlog=5000 # Buffering pada NIC
|
| 13 |
+
|
| 14 |
+
# Mengatur MTU (Maximum Transmission Unit)
|
| 15 |
+
echo "Mengatur MTU untuk menghindari fragmentasi..."
|
| 16 |
+
ip link set dev eth0 mtu 9000 # Sesuaikan dengan interface yang digunakan
|
| 17 |
+
|
| 18 |
+
# Mengoptimalkan penggunaan TCP dan UDP buffers
|
| 19 |
+
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" # Buffer TCP untuk receive
|
| 20 |
+
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216" # Buffer TCP untuk send
|
| 21 |
+
|
| 22 |
+
# Meningkatkan performa interrupt handling
|
| 23 |
+
echo "Meningkatkan performa interrupt handling..."
|
| 24 |
+
sysctl -w net.core.somaxconn=65535 # Meningkatkan kapasitas koneksi maksimal
|
| 25 |
+
|
| 26 |
+
# Mengaktifkan TCP offloading jika mendukung hardware
|
| 27 |
+
ethtool -K eth0 tso on # Ganti eth0 dengan interface yang sesuai
|
| 28 |
+
ethtool -K eth0 gro on # Ganti eth0 dengan interface yang sesuai
|
| 29 |
+
|
| 30 |
+
# Mengoptimalkan parameter system lainnya untuk latensi rendah
|
| 31 |
+
sysctl -w vm.swappiness=1 # Kurangi swap dan prioritaskan RAM
|
| 32 |
+
sysctl -w net.ipv4.tcp_fin_timeout=10 # Mempercepat penutupan koneksi TCP yang lama
|
| 33 |
+
sysctl -w net.ipv4.tcp_keepalive_time=60 # Percepat waktu keepalive
|
| 34 |
+
|
| 35 |
+
# Menerapkan konfigurasi
|
| 36 |
+
sysctl -p
|
| 37 |
+
|
| 38 |
+
# Mengatur prioritas untuk proses tunneling
|
| 39 |
+
# Atur agar aplikasi server tunneling berjalan dengan prioritas tinggi
|
| 40 |
+
renice -n -10 -p $(pgrep udp-custom) # Ganti dengan PID server UDP
|
| 41 |
+
renice -n -10 -p $(pgrep badvpn-udpgw) # Ganti dengan PID Server BadVPN
|
| 42 |
+
renice -n -10 -p $(pgrep zivpn) # Ganti dengan PID Server ZIVPN
|
scripts/port-forward-universal.sh
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Pastikan dijalankan sebagai root
|
| 4 |
+
if [ "$(id -u)" -ne 0 ]; then
|
| 5 |
+
echo "Skrip ini harus dijalankan sebagai root. Coba 'su -c \"$0\"'."
|
| 6 |
+
exit 1
|
| 7 |
+
fi
|
| 8 |
+
|
| 9 |
+
# Flush aturan lama untuk memulai dari awal
|
| 10 |
+
iptables -F
|
| 11 |
+
iptables -t nat -F
|
| 12 |
+
|
| 13 |
+
# Set policy default
|
| 14 |
+
iptables -P INPUT ACCEPT
|
| 15 |
+
iptables -P FORWARD ACCEPT
|
| 16 |
+
iptables -P OUTPUT ACCEPT
|
| 17 |
+
|
| 18 |
+
# Aktifkan IP forwarding (penting untuk beberapa skenario)
|
| 19 |
+
echo 1 > /proc/sys/net/ipv4/ip_forward
|
| 20 |
+
|
| 21 |
+
# Deteksi interface utama yang aktif
|
| 22 |
+
interface=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
|
| 23 |
+
|
| 24 |
+
# =================================================================
|
| 25 |
+
# ATURAN UNTUK TRAFFIC DARI LUAR (INTERNET -> SERVER ANDROID)
|
| 26 |
+
# Menggunakan chain PREROUTING
|
| 27 |
+
# =================================================================
|
| 28 |
+
echo "Menerapkan aturan untuk traffic dari LUAR (PREROUTING)..."
|
| 29 |
+
# ZIVPN: Port 6000-19999 -> 5667
|
| 30 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 6000:19999 -j DNAT --to-destination :5667
|
| 31 |
+
|
| 32 |
+
# Aturan lain jika diperlukan (contoh dari skrip asli Anda)
|
| 33 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 1:5999 -j DNAT --to-destination :3671
|
| 34 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 20000:65535 -j DNAT --to-destination :5666
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
# =================================================================
|
| 38 |
+
# ATURAN UNTUK TRAFFIC DARI DALAM (CLIENT ANDROID -> SERVER ANDROID)
|
| 39 |
+
# Menggunakan chain OUTPUT
|
| 40 |
+
# =================================================================
|
| 41 |
+
echo "Menerapkan aturan untuk traffic dari DALAM (OUTPUT)..."
|
| 42 |
+
# ZIVPN: Port 6000-19999 -> 5667
|
| 43 |
+
iptables -t nat -A OUTPUT -p udp --dport 6000:19999 -j DNAT --to-destination :5667
|
| 44 |
+
|
| 45 |
+
# Aturan lain jika diperlukan (harus sama dengan yang di PREROUTING)
|
| 46 |
+
iptables -t nat -A OUTPUT -p udp --dport 1:5999 -j DNAT --to-destination :3671
|
| 47 |
+
iptables -t nat -A OUTPUT -p udp --dport 20000:65535 -j DNAT --to-destination :5666
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
echo "Aturan iptables universal telah berhasil diterapkan."
|
| 51 |
+
|
| 52 |
+
# Jalankan skrip optimasi jika ada
|
| 53 |
+
if [ -f "optimize.sh" ]; then
|
| 54 |
+
bash optimize.sh
|
| 55 |
+
fi
|
scripts/port-forward.sh
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Get the directory where the script is located
|
| 4 |
+
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
|
| 5 |
+
PROJECT_ROOT=$(cd -- "$SCRIPT_DIR/.." &> /dev/null && pwd)
|
| 6 |
+
|
| 7 |
+
# Path to the ZIVPN binary
|
| 8 |
+
ZIVPN_BINARY="$PROJECT_ROOT/zivpn/udp-zivpn-linux-amd64"
|
| 9 |
+
ZIVPN_URL="https://github.com/zahidbd2/udp-zivpn/releases/download/udp-zivpn_1.4.9/udp-zivpn-linux-amd64"
|
| 10 |
+
ZIVPN_DIR=$(dirname "$ZIVPN_BINARY")
|
| 11 |
+
|
| 12 |
+
# Check if the ZIVPN binary exists, and download if it does not
|
| 13 |
+
if [ ! -f "$ZIVPN_BINARY" ]; then
|
| 14 |
+
echo "ZIVPN binary not found. Downloading..."
|
| 15 |
+
# Ensure the directory exists
|
| 16 |
+
mkdir -p "$ZIVPN_DIR"
|
| 17 |
+
# Download the binary using wget or curl
|
| 18 |
+
if command -v wget >/dev/null 2>&1; then
|
| 19 |
+
wget -O "$ZIVPN_BINARY" "$ZIVPN_URL"
|
| 20 |
+
elif command -v curl >/dev/null 2>&1; then
|
| 21 |
+
curl -L -o "$ZIVPN_BINARY" "$ZIVPN_URL"
|
| 22 |
+
else
|
| 23 |
+
echo "Error: Neither wget nor curl is available to download the ZIVPN binary."
|
| 24 |
+
exit 1
|
| 25 |
+
fi
|
| 26 |
+
# Make the binary executable
|
| 27 |
+
if [ -f "$ZIVPN_BINARY" ]; then
|
| 28 |
+
chmod +x "$ZIVPN_BINARY"
|
| 29 |
+
echo "ZIVPN binary downloaded and made executable."
|
| 30 |
+
else
|
| 31 |
+
echo "Error: Failed to download ZIVPN binary."
|
| 32 |
+
exit 1
|
| 33 |
+
fi
|
| 34 |
+
else
|
| 35 |
+
echo "ZIVPN binary already exists. Skipping download."
|
| 36 |
+
fi
|
| 37 |
+
|
| 38 |
+
# Flush all
|
| 39 |
+
iptables -F
|
| 40 |
+
iptables -t nat -F
|
| 41 |
+
|
| 42 |
+
# Set policy default untuk masing-masing chain
|
| 43 |
+
iptables -P INPUT ACCEPT
|
| 44 |
+
iptables -P FORWARD ACCEPT
|
| 45 |
+
iptables -P OUTPUT ACCEPT
|
| 46 |
+
|
| 47 |
+
# Pastikan IP forwarding diaktifkan
|
| 48 |
+
echo 1 > /proc/sys/net/ipv4/ip_forward
|
| 49 |
+
|
| 50 |
+
interface=$(ip -4 route ls|grep default|grep -Po '(?<=dev )(\S+)'|head -1)
|
| 51 |
+
|
| 52 |
+
# Tambahkan rule untuk mengizinkan paket UDP dengan destination port 50000 pada chain INPUT
|
| 53 |
+
iptables -A INPUT -p udp --dport 3671 -j ACCEPT
|
| 54 |
+
|
| 55 |
+
# UDP CUSTOM: Tambahkan aturan iptables untuk melakukan port forwarding UDP ke port 3671
|
| 56 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 1:21 -j DNAT --to-destination :3671 # 22: (SSH Port)
|
| 57 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 23:52 -j DNAT --to-destination :3671 # 53: (DNS Port)
|
| 58 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 54:3670 -j DNAT --to-destination :3671 # 3671: (Itself/UDP CUSTOM)
|
| 59 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 3672:5665 -j DNAT --to-destination :3671 # 5666 & 5667: (UDP ZIVPN)
|
| 60 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 5668:5999 -j DNAT --to-destination :3671
|
| 61 |
+
|
| 62 |
+
# ZIVPN: Tambahkan aturan iptables untuk melakukan port forwarding UDP ke port 5667
|
| 63 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 6000:7299 -j DNAT --to-destination :5667 # 7300: (BadVPN UDPGW)
|
| 64 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 7301:19131 -j DNAT --to-destination :5667 # 19132: (Minecraft Server)
|
| 65 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 19133:19999 -j DNAT --to-destination :5667 # End
|
| 66 |
+
|
| 67 |
+
# ZIVPN Legacy (Old): Tambahkan aturan iptables untuk melakukan port forwarding UDP ke port 5666
|
| 68 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 20000:25564 -j DNAT --to-destination :5666 # 25565: (Minecraft Server)
|
| 69 |
+
iptables -t nat -A PREROUTING -i ${interface} -p udp --dport 25566:65535 -j DNAT --to-destination :5666 # End
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
# Chain
|
| 73 |
+
bash optimize.sh
|
setup.sh
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
set -euo pipefail
|
| 4 |
+
|
| 5 |
+
currentDir=`pwd`
|
| 6 |
+
|
| 7 |
+
echo "Force linking all *.service files to /etc/systemd/system"
|
| 8 |
+
ln -sf $currentDir/*/**.service /etc/systemd/system
|
| 9 |
+
echo "Reloading systemctl daemon.."
|
| 10 |
+
systemctl daemon-reload
|
| 11 |
+
echo "Enabling service.."
|
| 12 |
+
systemctl enable --now $(find $currentDir -type f -name "*.service" -print0 | xargs -0 -n1 -P8 basename)
|
| 13 |
+
# reboot
|
start.sh
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
set -m
|
| 3 |
+
|
| 4 |
+
echo "=== Memulai Konfigurasi Server VPN ==="
|
| 5 |
+
|
| 6 |
+
# 1. Mengaktifkan IP Forwarding & Optimasi Kernel (sysctl)
|
| 7 |
+
# Opsi ini sebaiknya diatur saat menjalankan kontainer dengan flag --sysctl
|
| 8 |
+
# Namun, kita tetap menjalankannya di sini untuk memastikan.
|
| 9 |
+
echo "Mengaktifkan IP forwarding dan optimasi kernel..."
|
| 10 |
+
sysctl -w net.ipv4.ip_forward=1
|
| 11 |
+
sysctl -w net.core.rmem_max=16777216
|
| 12 |
+
sysctl -w net.core.wmem_max=16777216
|
| 13 |
+
sysctl -w net.core.netdev_max_backlog=5000
|
| 14 |
+
sysctl -w net.core.somaxconn=65535
|
| 15 |
+
sysctl -w vm.swappiness=1
|
| 16 |
+
# Nonaktifkan pesan error jika file tidak ada
|
| 17 |
+
sysctl -w -e net.ipv4.tcp_fin_timeout=10
|
| 18 |
+
sysctl -w -e net.ipv4.tcp_keepalive_time=60
|
| 19 |
+
|
| 20 |
+
# 2. Menemukan interface jaringan utama
|
| 21 |
+
INTERFACE=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
|
| 22 |
+
if [ -z "$INTERFACE" ]; then
|
| 23 |
+
echo "ERROR: Tidak dapat menemukan interface jaringan default. Menggunakan 'eth0'."
|
| 24 |
+
INTERFACE="eth0"
|
| 25 |
+
fi
|
| 26 |
+
echo "Menggunakan interface: $INTERFACE"
|
| 27 |
+
|
| 28 |
+
# 3. Mengatur MTU & Offloading
|
| 29 |
+
# Memerlukan ethtool
|
| 30 |
+
echo "Mengatur MTU dan offloading pada interface $INTERFACE..."
|
| 31 |
+
ip link set dev "$INTERFACE" mtu 9000
|
| 32 |
+
ethtool -K "$INTERFACE" tso on gso on gro on || echo "Peringatan: ethtool tidak dapat mengatur offloading."
|
| 33 |
+
|
| 34 |
+
# 4. Mengatur Aturan Firewall (iptables)
|
| 35 |
+
echo "Membersihkan aturan iptables sebelumnya..."
|
| 36 |
+
iptables -F
|
| 37 |
+
iptables -t nat -F
|
| 38 |
+
|
| 39 |
+
echo "Menerapkan aturan port forwarding..."
|
| 40 |
+
# UDP CUSTOM -> :3671
|
| 41 |
+
iptables -t nat -A PREROUTING -i "$INTERFACE" -p udp --dport 1:5999 -j DNAT --to-destination :3671
|
| 42 |
+
# ZIVPN -> :5667
|
| 43 |
+
iptables -t nat -A PREROUTING -i "$INTERFACE" -p udp --dport 6000:19999 -j DNAT --to-destination :5667
|
| 44 |
+
# ZIVPN Legacy -> :5666 (Asumsi port ini masih diperlukan)
|
| 45 |
+
iptables -t nat -A PREROUTING -i "$INTERFACE" -p udp --dport 20000:65535 -j DNAT --to-destination :5666
|
| 46 |
+
|
| 47 |
+
echo "Aturan iptables berhasil diterapkan."
|
| 48 |
+
iptables -t nat -L -n
|
| 49 |
+
|
| 50 |
+
# 5. Menjalankan Layanan VPN di Background
|
| 51 |
+
|
| 52 |
+
# badvpn-udpgw
|
| 53 |
+
echo "Menjalankan badvpn-udpgw..."
|
| 54 |
+
cd /app/udpgw
|
| 55 |
+
./badvpn-udpgw --listen-addr 127.0.0.1:7300 --udp-mtu 9000 &
|
| 56 |
+
BADVPN_PID=$!
|
| 57 |
+
|
| 58 |
+
# udp-custom
|
| 59 |
+
echo "Menjalankan udp-custom..."
|
| 60 |
+
cd /app/udp_custom
|
| 61 |
+
./udp-custom server &
|
| 62 |
+
UDP_CUSTOM_PID=$!
|
| 63 |
+
|
| 64 |
+
# zivpn
|
| 65 |
+
echo "Menjalankan zivpn..."
|
| 66 |
+
cd /app/zivpn
|
| 67 |
+
./udp-zivpn-linux-amd64 server -c config.json &
|
| 68 |
+
ZIVPN_PID=$!
|
| 69 |
+
|
| 70 |
+
echo "=== Semua layanan telah dimulai ==="
|
| 71 |
+
echo "PID: badvpn=$BADVPN_PID, udp-custom=$UDP_CUSTOM_PID, zivpn=$ZIVPN_PID"
|
| 72 |
+
|
| 73 |
+
# 6. Tunggu sinyal keluar dan bersihkan
|
| 74 |
+
trap "echo 'Menutup layanan...'; kill $BADVPN_PID $UDP_CUSTOM_PID $ZIVPN_PID; exit 0" SIGINT SIGTERM
|
| 75 |
+
|
| 76 |
+
# Tunggu semua proses background selesai
|
| 77 |
+
# fg %1 akan membawa proses pertama ke foreground, menjaga kontainer tetap berjalan
|
| 78 |
+
# dan memungkinkan trap untuk menangani sinyal dengan benar.
|
| 79 |
+
wait $BADVPN_PID
|
| 80 |
+
wait $UDP_CUSTOM_PID
|
| 81 |
+
wait $ZIVPN_PID
|
udp_custom/config.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"listen": ":3671",
|
| 3 |
+
"stream_buffer": 16777216,
|
| 4 |
+
"receive_buffer": 33554432,
|
| 5 |
+
"auth": {
|
| 6 |
+
"mode": "passwords"
|
| 7 |
+
}
|
| 8 |
+
}
|
udp_custom/udp-custom
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2a1b5584c7947feb5a02e847e09795751024f63ce7137a353c2b9c2a4282d636
|
| 3 |
+
size 4782592
|
udp_custom/udp-custom-config.json
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"listen": ":3671",
|
| 3 |
+
"stream_buffer": 16777216,
|
| 4 |
+
"receive_buffer": 33554432,
|
| 5 |
+
"auth": {
|
| 6 |
+
"mode": "passwords"
|
| 7 |
+
}
|
| 8 |
+
}
|
udp_custom/udp-custom.service
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Unit]
|
| 2 |
+
Description=UDP Custom by ePro Dev. Team
|
| 3 |
+
|
| 4 |
+
[Service]
|
| 5 |
+
LimitAS=infinity
|
| 6 |
+
LimitRSS=infinity
|
| 7 |
+
User=root
|
| 8 |
+
Type=simple
|
| 9 |
+
ExecStart=/usr/bin/taskset -c 0 /root/udp-custom/udp_custom/udp-custom server
|
| 10 |
+
WorkingDirectory=/root/udp-custom/udp_custom
|
| 11 |
+
Restart=always
|
| 12 |
+
RestartSec=2s
|
| 13 |
+
|
| 14 |
+
[Install]
|
| 15 |
+
WantedBy=default.target
|
udpgw/badvpn-udpgw
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b6fb43cec26a890b821cd00668b36d9d967edbf936259b0deae7971c9db9074e
|
| 3 |
+
size 508160
|
udpgw/badvpn.service
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Unit]
|
| 2 |
+
Description=UDP forwarding for badvpn-tun2socks
|
| 3 |
+
After=nss-lookup.target
|
| 4 |
+
|
| 5 |
+
[Service]
|
| 6 |
+
LimitAS=infinity
|
| 7 |
+
LimitRSS=infinity
|
| 8 |
+
Restart=always
|
| 9 |
+
Type=simple
|
| 10 |
+
ExecStart=/usr/bin/taskset -c 0 /root/udp-custom/udpgw/badvpn-udpgw --loglevel 0 --channel-loglevel 0 --listen-addr 127.0.0.1:7300 --udp-mtu 9000
|
| 11 |
+
WorkingDirectory=/root/udp-custom/udpgw
|
| 12 |
+
RestartSec=2s
|
| 13 |
+
|
| 14 |
+
[Install]
|
| 15 |
+
WantedBy=multi-user.target
|
zivpn/config.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"listen": ":5667",
|
| 3 |
+
"cert": "zivpn.crt",
|
| 4 |
+
"key": "zivpn.key",
|
| 5 |
+
"obfs": "",
|
| 6 |
+
"up_mbps": 100,
|
| 7 |
+
"down_mbps": 250,
|
| 8 |
+
"max_conn_client": 65535,
|
| 9 |
+
"disable_mtu_discovery": true,
|
| 10 |
+
"recv_window_conn": 1024576000,
|
| 11 |
+
"recv_window_client": 262144000,
|
| 12 |
+
"auth": {
|
| 13 |
+
"mode": "passwords",
|
| 14 |
+
"config": ["1"]
|
| 15 |
+
}
|
| 16 |
+
}
|
zivpn/zivpn-config.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"listen": ":5667",
|
| 3 |
+
"cert": "zivpn/zivpn.crt",
|
| 4 |
+
"key": "zivpn/zivpn.key",
|
| 5 |
+
"obfs": "",
|
| 6 |
+
"up_mbps": 100,
|
| 7 |
+
"down_mbps": 250,
|
| 8 |
+
"promotheus_listen": ":8080",
|
| 9 |
+
"max_conn_client": 65535,
|
| 10 |
+
"disable_mtu_discovery": true,
|
| 11 |
+
"recv_window_conn": 1024576000,
|
| 12 |
+
"recv_window_client": 262144000,
|
| 13 |
+
"auth": {
|
| 14 |
+
"mode": "passwords",
|
| 15 |
+
"config": ["adn123"]
|
| 16 |
+
}
|
| 17 |
+
}
|
zivpn/zivpn.crt
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN CERTIFICATE-----
|
| 2 |
+
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
|
| 31 |
+
5A==
|
| 32 |
+
-----END CERTIFICATE-----
|
zivpn/zivpn.key
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN PRIVATE KEY-----
|
| 2 |
+
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
|
| 51 |
+
fOSL8C4UCwtv5QpYQVz5lxafJrc29PON
|
| 52 |
+
-----END PRIVATE KEY-----
|
zivpn/zivpn.service
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[Unit]
|
| 2 |
+
Description=zivpn VPN Server
|
| 3 |
+
After=network.target
|
| 4 |
+
|
| 5 |
+
[Service]
|
| 6 |
+
LimitAS=infinity
|
| 7 |
+
LimitRSS=infinity
|
| 8 |
+
Type=simple
|
| 9 |
+
User=root
|
| 10 |
+
WorkingDirectory=/root/udp-custom/zivpn
|
| 11 |
+
ExecStart=/root/udp-custom/zivpn/udp-zivpn-linux-amd64 server -c config.json
|
| 12 |
+
Restart=always
|
| 13 |
+
RestartSec=3
|
| 14 |
+
Environment=ZIVPN_LOG_LEVEL=info
|
| 15 |
+
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
|
| 16 |
+
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
|
| 17 |
+
NoNewPrivileges=true
|
| 18 |
+
|
| 19 |
+
[Install]
|
| 20 |
+
WantedBy=multi-user.target
|