Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 55 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,58 @@

Профиль https://www.codewars.com/users/krotname

Для запуска в IntelliJ IDEA нажать правой кнопкой на src/main/java и Run 'All Tests'
Для запуска в IntelliJ IDEA нажать правой кнопкой на src/main/java и Run 'All Tests'

## Amnezia WireGuard proxy in Docker Compose

Добавлен `docker-compose.yml`, который поднимает:
- WireGuard-клиент с подключением к существующему серверу Amnezia.
- Proxy-сервис (3proxy), работающий через VPN-туннель.
- Опционально `v2ray-server` (профиль `v2ray`) в том же network namespace, что и WireGuard.

Логи отключены для контейнеров через `logging.driver: "none"`.

### Конфиги сервера
- `wireguard/wg_confs/wg0.conf` — WireGuard-конфигурация клиента.
- `proxy/3proxy.cfg` — прокси с авторизацией.
- `v2ray/server-config.json` — конфиг V2Ray-сервера (VMess + WS).

### Сгенерированные доступы
- Proxy user: `proxy_9b93b2`
- Proxy password: `DTvWPDSk6UeD3HGXiji7`
- V2Ray UUID #1: `229545ae-a4b5-4fd6-8146-77c3f3267bce`
- V2Ray UUID #2: `ad1ead97-6a7c-433d-9b53-03d7d881f510`

### Доступ к сервисам
- SOCKS5 (3proxy): `127.0.0.1:1080`
- HTTP (3proxy): `127.0.0.1:3128`
- V2Ray VMess+WS: `127.0.0.1:10000`

Перед запуском обязательно замените шаблонные значения:
- `REPLACE_WITH_*` в `wireguard/wg_confs/wg0.conf`
- `YOUR_SERVER_IP` в клиентских файлах

### Конфиги клиента для подключения к этому серверу
- `client/proxy.env.example` — переменные окружения для `curl`, `wget`, CLI и приложений, которые читают `HTTP_PROXY/HTTPS_PROXY/ALL_PROXY`.
- `client/proxychains.conf` — готовый конфиг для `proxychains` (SOCKS5 + логин/пароль).
- `client/v2ray-client.example.json` — пример клиента для V2Ray UUID #1.
- `client/v2ray-client-2.example.json` — пример клиента для V2Ray UUID #2.

Перед использованием замените `YOUR_SERVER_IP` на реальный IP/домен сервера.

### Проверка конфигов
```bash
./scripts/validate.sh
```

Скрипт проверяет YAML/JSON синтаксис, наличие обязательных файлов и запускает `docker compose config`, если Docker доступен в системе.

### Запуск
```bash
docker compose up -d
```

### Запуск с V2Ray сервером
```bash
docker compose --profile v2ray up -d
```
11 changes: 11 additions & 0 deletions client/proxy.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Замените PROXY_HOST на IP/домен хоста, где запущен docker-compose
PROXY_HOST=YOUR_SERVER_IP
PROXY_USER=proxy_9b93b2
PROXY_PASS=DTvWPDSk6UeD3HGXiji7

# HTTP/HTTPS через 3proxy
HTTP_PROXY=http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:3128
HTTPS_PROXY=http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:3128

# SOCKS5 через 3proxy
ALL_PROXY=socks5://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:1080
9 changes: 9 additions & 0 deletions client/proxychains.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
# type host port user pass
socks5 YOUR_SERVER_IP 1080 proxy_9b93b2 DTvWPDSk6UeD3HGXiji7
43 changes: 43 additions & 0 deletions client/v2ray-client-2.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"log": {
"access": "none",
"error": "none",
"loglevel": "warning"
},
"inbounds": [
{
"port": 10808,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "YOUR_SERVER_IP",
"port": 10000,
"users": [
{
"id": "ad1ead97-6a7c-433d-9b53-03d7d881f510",
"alterId": 0,
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/ray"
}
}
}
]
}
43 changes: 43 additions & 0 deletions client/v2ray-client.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"log": {
"access": "none",
"error": "none",
"loglevel": "warning"
},
"inbounds": [
{
"port": 10808,
"listen": "127.0.0.1",
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "YOUR_SERVER_IP",
"port": 10000,
"users": [
{
"id": "229545ae-a4b5-4fd6-8146-77c3f3267bce",
"alterId": 0,
"security": "auto"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/ray"
}
}
}
]
}
51 changes: 51 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
version: "3.9"

services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: amnezia-wireguard-client
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=UTC
volumes:
- ./wireguard:/config
- /lib/modules:/lib/modules:ro
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
ports:
- "1080:1080" # SOCKS5 proxy (with auth)
- "3128:3128" # HTTP proxy (with auth)
- "10000:10000" # V2Ray VMess + WS
logging:
driver: "none"

proxy:
image: ghcr.io/tarampampam/3proxy:latest
container_name: amnezia-proxy
depends_on:
- wireguard
network_mode: "service:wireguard"
restart: unless-stopped
volumes:
- ./proxy/3proxy.cfg:/etc/3proxy/3proxy.cfg:ro
logging:
driver: "none"

v2ray-server:
image: v2fly/v2fly-core:latest
container_name: v2ray-server
command: ["run", "-c", "/etc/v2ray/config.json"]
depends_on:
- wireguard
network_mode: "service:wireguard"
restart: unless-stopped
profiles: ["v2ray"]
volumes:
- ./v2ray/server-config.json:/etc/v2ray/config.json:ro
logging:
driver: "none"
13 changes: 13 additions & 0 deletions proxy/3proxy.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
log /dev/null D
nserver 1.1.1.1
nserver 1.0.0.1
nscache 65536
timeouts 1 5 30 60 180 1800 15 60

users proxy_9b93b2:CL:DTvWPDSk6UeD3HGXiji7
auth strong
allow proxy_9b93b2

socks -p1080
proxy -p3128
flush
54 changes: 54 additions & 0 deletions scripts/validate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"

echo "[1/4] Validate docker-compose YAML syntax"
ruby -e 'require "yaml"; YAML.load_file("docker-compose.yml"); puts "docker-compose.yml: OK"'

echo "[2/4] Validate JSON configs"
python - <<'PY'
import json
from pathlib import Path

files = [
'v2ray/server-config.json',
'client/v2ray-client.example.json',
'client/v2ray-client-2.example.json',
]

for f in files:
json.loads(Path(f).read_text(encoding='utf-8'))
print(f"{f}: OK")
PY

echo "[3/4] Check required config files exist"
required=(
"docker-compose.yml"
"wireguard/wg_confs/wg0.conf"
"proxy/3proxy.cfg"
"v2ray/server-config.json"
"client/proxy.env.example"
"client/proxychains.conf"
"client/v2ray-client.example.json"
"client/v2ray-client-2.example.json"
)

for file in "${required[@]}"; do
if [[ ! -f "$file" ]]; then
echo "Missing file: $file" >&2
exit 1
fi
echo "$file: OK"
done

echo "[4/4] Docker Compose semantic validation (if docker exists)"
if command -v docker >/dev/null 2>&1; then
docker compose config >/dev/null
echo "docker compose config: OK"
else
echo "docker not found: skip docker compose config"
fi

echo "Validation completed"
37 changes: 37 additions & 0 deletions v2ray/server-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"log": {
"access": "none",
"error": "none",
"loglevel": "warning"
},
"inbounds": [
{
"port": 10000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "229545ae-a4b5-4fd6-8146-77c3f3267bce",
"alterId": 0
},
{
"id": "ad1ead97-6a7c-433d-9b53-03d7d881f510",
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/ray"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
11 changes: 11 additions & 0 deletions wireguard/wg_confs/wg0.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Interface]
Address = 10.8.1.20/32
DNS = 172.29.172.254, 1.0.0.1
PrivateKey = REPLACE_WITH_PRIVATE_KEY

[Peer]
PublicKey = REPLACE_WITH_SERVER_PUBLIC_KEY
PresharedKey = REPLACE_WITH_PRESHARED_KEY
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = REPLACE_WITH_ENDPOINT_HOST:REPLACE_WITH_ENDPOINT_PORT
PersistentKeepalive = 25
Loading