Spaces:
Running
Running
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:[email protected]/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
|