generator changes for only warp or proton modes
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Sing-Box WARP Project (Additional Proton out)
|
||||
> Author remark:
|
||||
> вы спросите - нахуя такие сложности? А потому что нативный warp не поддерживает amneziaWG ключи для обфускации WireGuard. А ебаться в саму амнезию нет желания. К тому же sing-box сразу может поднять локальный сокс что упрощает просовывание этого варпа во всякого рода панели.
|
||||
> UPD: Теперь в рф захотели блокировать github и появилась проблема установки панелей. Данное решение покрывает проблемы со скачиванием любых репозиториев или иного self-host софта с github и попутно покрывает ряд других блокнутых ресурсов при включении TUN во время установки.
|
||||
> Список ресурсов будет дополняться.
|
||||
>> вы спросите - нахуя такие сложности? А потому что нативный warp не поддерживает amneziaWG ключи для обфускации WireGuard. А ебаться в саму амнезию нет желания. К тому же sing-box сразу может поднять локальный сокс что упрощает просовывание этого варпа во всякого рода панели.
|
||||
>> UPD: Теперь в рф захотели блокировать github и появилась проблема установки панелей. Данное решение покрывает проблемы со скачиванием любых репозиториев или иного self-host софта с github и попутно покрывает ряд других блокнутых ресурсов при включении TUN во время установки.
|
||||
>> UPD: Добавлена поддержка ProtonVPN конфигураций совместно с warp или отдельно.
|
||||
|
||||
|
||||
Проект для запуска sing-box с WARP через systemd.
|
||||
@@ -10,27 +10,29 @@
|
||||
## Структура проекта
|
||||
|
||||
- `quick-install.sh` — установка и настройка systemd-сервиса
|
||||
- `generate-config.sh` — генератор `config.json` из WireGuard AWG3.0
|
||||
- `generate-config.sh` — генератор `config.json` из WireGuard AWG
|
||||
- `warp.conf.example` — пример WARP-конфигурации
|
||||
- `proton.conf.example` — пример второй (Proton) WireGuard-конфигурации
|
||||
|
||||
## Как это работает
|
||||
|
||||
1. При установке вводится WARP-конфиг (AWG 3.0) → сохраняется в `/etc/sing-box-warp/warp.conf`
|
||||
2. Опционально вводится второй конфиг (Proton VPN, обычный WireGuard или `wg://`) → `/etc/sing-box-warp/proton.conf`
|
||||
3. `generate-config.sh` парсит конфиги и пишет `/opt/sing-box-warp/config.json`
|
||||
4. SOCKS5 WARP доступен на порту `2080`; при добавлении Proton — второй SOCKS5 на `3080`
|
||||
1. При установке отдельно спрашивается добавление WARP и добавление Proton — каждый опционален
|
||||
2. WARP-конфиг (AWG 3.0) → `/etc/sing-box-warp/warp.conf`, Proton-конфиг (обычный WireGuard или `wg://`) → `/etc/sing-box-warp/proton.conf`
|
||||
3. `generate-config.sh` парсит доступные конфиги и пишет `/opt/sing-box-warp/config.json`
|
||||
4. SOCKS5 WARP доступен на порту `2080`, Proton — на `3080` (создаётся только тот, что добавлен)
|
||||
5. Опционально TUN для сплит-маршрутизации
|
||||
|
||||
### Схема маршрутизации
|
||||
|
||||
Скрипт работает в двух режимах: **только WARP** или **WARP + Proton**.
|
||||
Скрипт работает в трёх режимах: **только WARP**, **только Proton** или **WARP + Proton**.
|
||||
Нужно выбрать хотя бы один — если отказаться от обоих, установка завершается без действий.
|
||||
|
||||
- SOCKS-инпуты жёстко привязаны к своим выходам: `2080 → warp-out`, `3080 → proton-out`.
|
||||
Каждый инпут создаётся только если соответствующий конфиг добавлен.
|
||||
- Всё остальное (TUN-трафик, списки маршрутизации `.srs`, сайты проверки IP, proxy-DNS) идёт в
|
||||
«дефолтный» выход. Дефолт выбирается при установке: **WARP** или **Proton** (вопрос задаётся
|
||||
только если Proton добавлен).
|
||||
- Если Proton не добавлен — второй SOCKS-инпут (`3080`) и `proton-out` не создаются, дефолт всегда WARP.
|
||||
«дефолтный» выход.
|
||||
- Если добавлены **оба** — дефолт выбирается при установке: **WARP** или **Proton**.
|
||||
- Если добавлен **только один** — он и становится дефолтом автоматически, вопрос не задаётся.
|
||||
|
||||
## Установка
|
||||
|
||||
@@ -40,11 +42,17 @@
|
||||
curl -fsSL https://gitea.digitalforest.my/hesoyam/sing-warp-socks5/raw/branch/main/quick-install.sh | sudo bash
|
||||
```
|
||||
|
||||
Вставьте текстом всё содержимое сгенерированного AWG конфига в терминал. Enter затем ctrl+D
|
||||
Скрипт последовательно спросит про WARP и про Proton — можно добавить оба, только один или,
|
||||
если отказаться от обоих, установка завершится без изменений.
|
||||
|
||||
Затем скрипт спросит про Proton. Брать протон тут https://account.protonvpn.com/downloads (Нужен аккаунт)
|
||||
Ответьте `n`, чтобы оставить только WARP, или `y` и вставьте
|
||||
второй WireGuard-конфиг (формат `[Interface]`/`[Peer]` как у Proton VPN, либо `wg://`), завершив ввод Ctrl+D.
|
||||
Сначала — WARP. Ответьте `y` и вставьте текстом содержимое AWG-конфига (Enter, затем Ctrl+D), либо `n`, чтобы пропустить.
|
||||
|
||||
```
|
||||
Add WARP configuration? (y/n)
|
||||
```
|
||||
|
||||
Затем — Proton. Брать протон тут https://account.protonvpn.com/downloads (нужен аккаунт).
|
||||
Ответьте `y` и вставьте WireGuard-конфиг (формат `[Interface]`/`[Peer]` как у Proton VPN, либо `wg://`, Ctrl+D для завершения), либо `n`, чтобы пропустить.
|
||||
|
||||
```
|
||||
Add Proton configuration? (y/n)
|
||||
@@ -56,7 +64,8 @@ Add Proton configuration? (y/n)
|
||||
Enable TUN mode? (y/n)
|
||||
```
|
||||
|
||||
Если Proton добавлен — скрипт спросит, куда направлять весь не-SOCKS трафик (дефолтный выход).
|
||||
Если добавлены **оба** конфига — скрипт спросит, куда направлять весь не-SOCKS трафик (дефолтный выход).
|
||||
Если добавлен только один — он становится дефолтом автоматически, без вопроса.
|
||||
SOCKS-инпуты при этом всегда остаются: `2080 → WARP`, `3080 → Proton`.
|
||||
|
||||
```
|
||||
@@ -113,10 +122,10 @@ PersistentKeepalive = 25
|
||||
|
||||
## Использование
|
||||
|
||||
SOCKS5 без авторизации:
|
||||
SOCKS5 без авторизации (создаётся только тот инпут, чей конфиг добавлен):
|
||||
|
||||
- WARP — `localhost:2080`
|
||||
- Proton (если добавлен) — `0.0.0.0:3080`
|
||||
- Proton — `0.0.0.0:3080`
|
||||
|
||||
```bash
|
||||
curl --proxy socks5://localhost:2080 ip-api.com # через WARP
|
||||
@@ -141,12 +150,12 @@ sudo systemctl restart sing-box-warp
|
||||
|
||||
## Обновление конфигурации
|
||||
|
||||
Отредактируйте нужные файлы в `/etc/sing-box-warp/`:
|
||||
Отредактируйте нужные файлы в `/etc/sing-box-warp/` (нужен хотя бы один из `warp.conf` / `proton.conf`):
|
||||
|
||||
- `warp.conf` — конфиг WARP
|
||||
- `warp.conf` — конфиг WARP (удалите файл, чтобы отключить WARP)
|
||||
- `proton.conf` — конфиг Proton (удалите файл, чтобы отключить Proton)
|
||||
- `enable-tun` — `1`/`0` для TUN
|
||||
- `default-route` — `warp` или `proton` (куда идёт весь не-SOCKS трафик)
|
||||
- `default-route` — `warp` или `proton` (куда идёт весь не-SOCKS трафик; при одном эндпоинте берётся он)
|
||||
|
||||
затем:
|
||||
|
||||
|
||||
+162
-105
@@ -372,11 +372,44 @@ parse_proton_conf() {
|
||||
ENABLE_PROTON=1
|
||||
}
|
||||
|
||||
# Join non-empty JSON object strings with ",\n" separators (for arrays).
|
||||
join_objects() {
|
||||
local out=""
|
||||
local item
|
||||
for item in "$@"; do
|
||||
[ -z "$item" ] && continue
|
||||
if [ -z "$out" ]; then
|
||||
out="$item"
|
||||
else
|
||||
out="$out,
|
||||
$item"
|
||||
fi
|
||||
done
|
||||
printf '%s' "$out"
|
||||
}
|
||||
|
||||
write_config() {
|
||||
LOG_LEVEL="${LOG_LEVEL:-error}"
|
||||
|
||||
# SOCKS inbound tag for WARP. Kept as "mixed-in" in WARP-only mode for
|
||||
# backwards compatibility, "warp-in" when Proton is present too.
|
||||
if [ "$ENABLE_PROTON" = "1" ]; then
|
||||
WARP_IN_TAG="warp-in"
|
||||
else
|
||||
WARP_IN_TAG="mixed-in"
|
||||
fi
|
||||
|
||||
# Default outbound for everything that is not a hard SOCKS rule
|
||||
# (TUN rules, routing lists, IP-leak sites, proxy DNS).
|
||||
# Proton can only be the default when it is actually enabled.
|
||||
if [ "$DEFAULT_ROUTE" = "proton" ] && [ "$ENABLE_PROTON" = "1" ]; then
|
||||
# With both endpoints the user's choice wins; otherwise the only
|
||||
# available endpoint becomes the default.
|
||||
if [ "$ENABLE_WARP" = "1" ] && [ "$ENABLE_PROTON" = "1" ]; then
|
||||
if [ "$DEFAULT_ROUTE" = "proton" ]; then
|
||||
DEFAULT_OUTBOUND="proton-out"
|
||||
else
|
||||
DEFAULT_OUTBOUND="warp-out"
|
||||
fi
|
||||
elif [ "$ENABLE_PROTON" = "1" ]; then
|
||||
DEFAULT_OUTBOUND="proton-out"
|
||||
else
|
||||
DEFAULT_OUTBOUND="warp-out"
|
||||
@@ -389,8 +422,7 @@ write_config() {
|
||||
EXCLUDE_IFACE="eth0"
|
||||
}
|
||||
echo "TUN enabled, exclude_interface: $EXCLUDE_IFACE" >&2
|
||||
TUN_INBOUND_PART=$(cat <<TUNEOF
|
||||
,
|
||||
TUN_INBOUND_BODY=$(cat <<TUNEOF
|
||||
{
|
||||
"type": "tun",
|
||||
"tag": "tun-in",
|
||||
@@ -506,64 +538,13 @@ DEFSEOF
|
||||
)
|
||||
else
|
||||
echo "TUN disabled (SOCKS5 only)" >&2
|
||||
TUN_INBOUND_PART=""
|
||||
TUN_INBOUND_BODY=""
|
||||
TUN_ROUTE_RULE_PART=""
|
||||
RULE_SET_RULE_PART=""
|
||||
ROUTE_RULE_SET_SECTION=""
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_PROTON" = "1" ]; then
|
||||
echo "Proton enabled, adding proton-out endpoint and proton-in inbound (:3080)" >&2
|
||||
WARP_IN_TAG="warp-in"
|
||||
PROTON_ENDPOINT_PART=$(cat <<PROTONEOF
|
||||
,
|
||||
{
|
||||
"type": "wireguard",
|
||||
"tag": "proton-out",
|
||||
"mtu": $PROTON_MTU,
|
||||
"address": [
|
||||
"$PROTON_ADDRESS"
|
||||
],
|
||||
"private_key": "$PROTON_PRIVATE_KEY",
|
||||
"listen_port": 10004,
|
||||
"peers": [
|
||||
{
|
||||
"address": "$PROTON_SERVER",
|
||||
"port": $PROTON_PORT,
|
||||
"public_key": "$PROTON_PUBLIC_KEY",
|
||||
"allowed_ips": [$PROTON_ALLOWED_IPS]
|
||||
}
|
||||
],
|
||||
"udp_timeout": "5m0s"
|
||||
}
|
||||
PROTONEOF
|
||||
)
|
||||
PROTON_INBOUND_PART=$(cat <<'PROTONEOF'
|
||||
,
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "proton-in",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 3080
|
||||
}
|
||||
PROTONEOF
|
||||
)
|
||||
PROTON_ROUTE_RULE_PART=$(cat <<'PROTONEOF'
|
||||
|
||||
{
|
||||
"inbound": "proton-in",
|
||||
"outbound": "proton-out"
|
||||
},
|
||||
PROTONEOF
|
||||
)
|
||||
else
|
||||
echo "Proton disabled" >&2
|
||||
WARP_IN_TAG="mixed-in"
|
||||
PROTON_ENDPOINT_PART=""
|
||||
PROTON_INBOUND_PART=""
|
||||
PROTON_ROUTE_RULE_PART=""
|
||||
fi
|
||||
|
||||
# --- AmneziaWG i1/i2 lines (WARP only) ---
|
||||
if [ -n "$I1" ] || [ -n "$I2" ]; then
|
||||
H4_COMMA=","
|
||||
else
|
||||
@@ -584,34 +565,10 @@ PROTONEOF
|
||||
I2_LINE=""
|
||||
fi
|
||||
|
||||
cat > "$OUTPUT_CONFIG" <<EOF
|
||||
{
|
||||
"log": {
|
||||
"level": "$LOG_LEVEL"
|
||||
},
|
||||
"dns": {
|
||||
"servers": [
|
||||
{
|
||||
"tag": "default",
|
||||
"type": "udp",
|
||||
"server": "76.76.2.0",
|
||||
"detour": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "dns-proxy",
|
||||
"type": "tls",
|
||||
"server": "8.8.8.8",
|
||||
"detour": "$DEFAULT_OUTBOUND"
|
||||
},
|
||||
{
|
||||
"tag": "local",
|
||||
"type": "udp",
|
||||
"server": "127.0.0.1",
|
||||
"detour": "direct"
|
||||
}
|
||||
]
|
||||
},
|
||||
"endpoints": [
|
||||
# --- WARP endpoint / inbound / route rule ---
|
||||
if [ "$ENABLE_WARP" = "1" ]; then
|
||||
echo "WARP enabled, adding $TAG endpoint and $WARP_IN_TAG inbound (:2080)" >&2
|
||||
WARP_ENDPOINT_BODY=$(cat <<WARPEOF
|
||||
{
|
||||
"type": "wireguard",
|
||||
"tag": "$TAG",
|
||||
@@ -642,14 +599,116 @@ PROTONEOF
|
||||
$I1_LINE
|
||||
$I2_LINE
|
||||
}
|
||||
}$PROTON_ENDPOINT_PART
|
||||
],
|
||||
"inbounds": [
|
||||
}
|
||||
WARPEOF
|
||||
)
|
||||
WARP_INBOUND_BODY=$(cat <<WARPEOF
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "$WARP_IN_TAG",
|
||||
"listen_port": 2080
|
||||
}$PROTON_INBOUND_PART$TUN_INBOUND_PART
|
||||
}
|
||||
WARPEOF
|
||||
)
|
||||
WARP_ROUTE_RULE=$(cat <<WARPEOF
|
||||
{
|
||||
"inbound": "$WARP_IN_TAG",
|
||||
"outbound": "warp-out"
|
||||
}
|
||||
WARPEOF
|
||||
)
|
||||
else
|
||||
echo "WARP disabled" >&2
|
||||
WARP_ENDPOINT_BODY=""
|
||||
WARP_INBOUND_BODY=""
|
||||
WARP_ROUTE_RULE=""
|
||||
fi
|
||||
|
||||
# --- Proton endpoint / inbound / route rule ---
|
||||
if [ "$ENABLE_PROTON" = "1" ]; then
|
||||
echo "Proton enabled, adding proton-out endpoint and proton-in inbound (:3080)" >&2
|
||||
PROTON_ENDPOINT_BODY=$(cat <<PROTONEOF
|
||||
{
|
||||
"type": "wireguard",
|
||||
"tag": "proton-out",
|
||||
"mtu": $PROTON_MTU,
|
||||
"address": [
|
||||
"$PROTON_ADDRESS"
|
||||
],
|
||||
"private_key": "$PROTON_PRIVATE_KEY",
|
||||
"listen_port": 10004,
|
||||
"peers": [
|
||||
{
|
||||
"address": "$PROTON_SERVER",
|
||||
"port": $PROTON_PORT,
|
||||
"public_key": "$PROTON_PUBLIC_KEY",
|
||||
"allowed_ips": [$PROTON_ALLOWED_IPS]
|
||||
}
|
||||
],
|
||||
"udp_timeout": "5m0s"
|
||||
}
|
||||
PROTONEOF
|
||||
)
|
||||
PROTON_INBOUND_BODY=$(cat <<'PROTONEOF'
|
||||
{
|
||||
"type": "mixed",
|
||||
"tag": "proton-in",
|
||||
"listen": "0.0.0.0",
|
||||
"listen_port": 3080
|
||||
}
|
||||
PROTONEOF
|
||||
)
|
||||
PROTON_ROUTE_RULE=$(cat <<'PROTONEOF'
|
||||
{
|
||||
"inbound": "proton-in",
|
||||
"outbound": "proton-out"
|
||||
}
|
||||
PROTONEOF
|
||||
)
|
||||
else
|
||||
echo "Proton disabled" >&2
|
||||
PROTON_ENDPOINT_BODY=""
|
||||
PROTON_INBOUND_BODY=""
|
||||
PROTON_ROUTE_RULE=""
|
||||
fi
|
||||
|
||||
# --- Assemble dynamic arrays ---
|
||||
ENDPOINTS_BODY=$(join_objects "$WARP_ENDPOINT_BODY" "$PROTON_ENDPOINT_BODY")
|
||||
INBOUNDS_BODY=$(join_objects "$WARP_INBOUND_BODY" "$PROTON_INBOUND_BODY" "$TUN_INBOUND_BODY")
|
||||
SOCKS_ROUTE_RULES=$(join_objects "$WARP_ROUTE_RULE" "$PROTON_ROUTE_RULE")
|
||||
|
||||
cat > "$OUTPUT_CONFIG" <<EOF
|
||||
{
|
||||
"log": {
|
||||
"level": "$LOG_LEVEL"
|
||||
},
|
||||
"dns": {
|
||||
"servers": [
|
||||
{
|
||||
"tag": "default",
|
||||
"type": "udp",
|
||||
"server": "76.76.2.0",
|
||||
"detour": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "dns-proxy",
|
||||
"type": "tls",
|
||||
"server": "8.8.8.8",
|
||||
"detour": "$DEFAULT_OUTBOUND"
|
||||
},
|
||||
{
|
||||
"tag": "local",
|
||||
"type": "udp",
|
||||
"server": "127.0.0.1",
|
||||
"detour": "direct"
|
||||
}
|
||||
]
|
||||
},
|
||||
"endpoints": [
|
||||
$ENDPOINTS_BODY
|
||||
],
|
||||
"inbounds": [
|
||||
$INBOUNDS_BODY
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
@@ -666,10 +725,7 @@ $I2_LINE
|
||||
"ip_is_private": true,
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"inbound": "$WARP_IN_TAG",
|
||||
"outbound": "warp-out"
|
||||
},$PROTON_ROUTE_RULE_PART
|
||||
$SOCKS_ROUTE_RULES,
|
||||
{
|
||||
"protocol": "dns",
|
||||
"action": "hijack-dns"
|
||||
@@ -715,26 +771,27 @@ parse_warp_conf() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
load_enable_tun
|
||||
|
||||
if [ -f "$PROTON_CONF" ] && [ -s "$PROTON_CONF" ]; then
|
||||
parse_proton_conf
|
||||
fi
|
||||
|
||||
load_default_route
|
||||
|
||||
write_config
|
||||
ENABLE_WARP=1
|
||||
}
|
||||
|
||||
# Main
|
||||
ENABLE_WARP=0
|
||||
ENABLE_PROTON=0
|
||||
load_enable_tun
|
||||
load_default_route
|
||||
|
||||
if [ ! -f "$WARP_CONF" ]; then
|
||||
echo "Error: $WARP_CONF not found!"
|
||||
if [ -f "$WARP_CONF" ] && [ -s "$WARP_CONF" ]; then
|
||||
parse_warp_conf
|
||||
fi
|
||||
|
||||
if [ -f "$PROTON_CONF" ] && [ -s "$PROTON_CONF" ]; then
|
||||
parse_proton_conf
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_WARP" != "1" ] && [ "$ENABLE_PROTON" != "1" ]; then
|
||||
echo "Error: neither WARP ($WARP_CONF) nor Proton ($PROTON_CONF) config provided, nothing to generate"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
parse_warp_conf
|
||||
write_config
|
||||
echo "Config generated successfully at $OUTPUT_CONFIG"
|
||||
|
||||
+71
-37
@@ -102,6 +102,53 @@ if [ "$EUID" -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== WARP Configuration (optional) ==="
|
||||
echo "goto ->> https://warp-generator.github.io/ generater for AWG 3.0"
|
||||
echo "WARP exposes a SOCKS5 proxy on port 2080."
|
||||
read -p "Add WARP configuration? (y/n) " -n 1 -r < /dev/tty
|
||||
echo
|
||||
ENABLE_WARP=0
|
||||
WARP_INPUT=""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Paste your WARP config (wg://... or [Interface]/[Peer] INI)."
|
||||
echo "Finish input with Ctrl-D."
|
||||
WARP_INPUT=$(cat < /dev/tty)
|
||||
if [ -z "$WARP_INPUT" ]; then
|
||||
echo "WARP input is empty, skipping WARP configuration."
|
||||
else
|
||||
ENABLE_WARP=1
|
||||
fi
|
||||
else
|
||||
echo "Skipping WARP configuration."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Proton Configuration (optional) ==="
|
||||
echo "Proton (second WireGuard endpoint) exposes a SOCKS5 proxy on port 3080."
|
||||
read -p "Add Proton configuration? (y/n) " -n 1 -r < /dev/tty
|
||||
echo
|
||||
ENABLE_PROTON=0
|
||||
PROTON_INPUT=""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Paste your Proton config ([Interface]/[Peer] INI or wg://)."
|
||||
echo "Finish input with Ctrl-D."
|
||||
PROTON_INPUT=$(cat < /dev/tty)
|
||||
if [ -z "$PROTON_INPUT" ]; then
|
||||
echo "Proton input is empty, skipping Proton configuration."
|
||||
else
|
||||
ENABLE_PROTON=1
|
||||
fi
|
||||
else
|
||||
echo "Skipping Proton configuration."
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_WARP" -eq 0 ] && [ "$ENABLE_PROTON" -eq 0 ]; then
|
||||
echo ""
|
||||
echo "Neither WARP nor Proton selected. Nothing to do, exiting."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
prepare_reinstall
|
||||
|
||||
echo "Creating directories..."
|
||||
@@ -109,49 +156,24 @@ mkdir -p "$INSTALL_DIR"
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
mkdir -p "$CACHE_DIR"
|
||||
|
||||
echo ""
|
||||
echo "=== WARP Configuration ==="
|
||||
echo "goto ->> https://warp-generator.github.io/ generater for AWG 3.0"
|
||||
echo "Paste your WARP config (wg://... or [Interface]/[Peer] INI)."
|
||||
echo "Finish input with Ctrl-D."
|
||||
WARP_INPUT=$(cat < /dev/tty)
|
||||
|
||||
if [ -z "$WARP_INPUT" ]; then
|
||||
echo "Error: warp.conf input is empty!"
|
||||
exit 1
|
||||
if [ "$ENABLE_WARP" -eq 1 ]; then
|
||||
printf "%s\n" "$WARP_INPUT" > "$CONFIG_DIR/warp.conf"
|
||||
echo "WARP configuration saved to $CONFIG_DIR/warp.conf"
|
||||
else
|
||||
rm -f "$CONFIG_DIR/warp.conf"
|
||||
fi
|
||||
|
||||
printf "%s\n" "$WARP_INPUT" > "$CONFIG_DIR/warp.conf"
|
||||
|
||||
echo ""
|
||||
echo "Configuration saved to $CONFIG_DIR/warp.conf"
|
||||
|
||||
echo ""
|
||||
echo "=== Proton Configuration (optional) ==="
|
||||
echo "Adds a second WireGuard endpoint (e.g. Proton VPN) exposed as SOCKS5 on port 3080."
|
||||
echo "The main WARP proxy stays on port 2080."
|
||||
read -p "Add Proton configuration? (y/n) " -n 1 -r < /dev/tty
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Paste your Proton config ([Interface]/[Peer] INI or wg://)."
|
||||
echo "Finish input with Ctrl-D."
|
||||
PROTON_INPUT=$(cat < /dev/tty)
|
||||
if [ -z "$PROTON_INPUT" ]; then
|
||||
echo "Proton input is empty, skipping Proton configuration."
|
||||
rm -f "$CONFIG_DIR/proton.conf"
|
||||
else
|
||||
printf "%s\n" "$PROTON_INPUT" > "$CONFIG_DIR/proton.conf"
|
||||
echo "Proton configuration saved to $CONFIG_DIR/proton.conf"
|
||||
fi
|
||||
if [ "$ENABLE_PROTON" -eq 1 ]; then
|
||||
printf "%s\n" "$PROTON_INPUT" > "$CONFIG_DIR/proton.conf"
|
||||
echo "Proton configuration saved to $CONFIG_DIR/proton.conf"
|
||||
else
|
||||
rm -f "$CONFIG_DIR/proton.conf"
|
||||
echo "Skipping Proton configuration."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== TUN mode ==="
|
||||
echo "TUN routes system traffic through sing-box (needs CAP_NET_ADMIN)."
|
||||
echo "Without TUN, only SOCKS5 proxy on port 2080 is available."
|
||||
echo "Without TUN, only the SOCKS5 proxies are available."
|
||||
read -p "Enable TUN mode? (y/n) " -n 1 -r < /dev/tty
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
@@ -164,8 +186,7 @@ else
|
||||
echo "TUN mode disabled (SOCKS5 only)."
|
||||
fi
|
||||
|
||||
DEFAULT_ROUTE="warp"
|
||||
if [ -f "$CONFIG_DIR/proton.conf" ]; then
|
||||
if [ "$ENABLE_WARP" -eq 1 ] && [ "$ENABLE_PROTON" -eq 1 ]; then
|
||||
echo ""
|
||||
echo "=== Default route ==="
|
||||
echo "Choose where all non-SOCKS traffic goes (TUN rules, routing lists, IP-leak sites)."
|
||||
@@ -181,6 +202,12 @@ if [ -f "$CONFIG_DIR/proton.conf" ]; then
|
||||
DEFAULT_ROUTE="warp"
|
||||
echo "Default route: WARP (warp-out)."
|
||||
fi
|
||||
elif [ "$ENABLE_PROTON" -eq 1 ]; then
|
||||
DEFAULT_ROUTE="proton"
|
||||
echo "Default route: Proton (proton-out) — only endpoint."
|
||||
else
|
||||
DEFAULT_ROUTE="warp"
|
||||
echo "Default route: WARP (warp-out) — only endpoint."
|
||||
fi
|
||||
echo "$DEFAULT_ROUTE" > "$CONFIG_DIR/default-route"
|
||||
|
||||
@@ -310,7 +337,14 @@ echo " Start: sudo systemctl start sing-box-warp"
|
||||
echo " Status: sudo systemctl status sing-box-warp"
|
||||
echo " Logs: sudo journalctl -u sing-box-warp -f"
|
||||
echo ""
|
||||
echo "SOCKS5 proxy: localhost:2080"
|
||||
echo "SOCKS5 proxies:"
|
||||
if [ "$ENABLE_WARP" -eq 1 ]; then
|
||||
echo " WARP: localhost:2080"
|
||||
fi
|
||||
if [ "$ENABLE_PROTON" -eq 1 ]; then
|
||||
echo " Proton: 0.0.0.0:3080"
|
||||
fi
|
||||
echo " Default route for non-SOCKS traffic: $DEFAULT_ROUTE"
|
||||
echo ""
|
||||
|
||||
if [ "$REINSTALL" -eq 1 ]; then
|
||||
|
||||
Reference in New Issue
Block a user