Skip to content

3inker/warp-dante-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Настройка WireGuard + Dante (SOCKS5) для выхода через Cloudflare WARP

Полная инструкция по настройке WireGuard с выходом через Cloudflare WARP и Dante SOCKS5 прокси. Решение идеально подходит для использования с Xray (VLESS+Reality) для полной поддержки UDP (Discord Voice, WebRTC) и скрытия реального IP сервера.

📋 Оглавление

  1. Архитектура решения
  2. Подготовка сервера
  3. Установка WireGuard и wgcf
  4. Настройка WireGuard
  5. Запуск WireGuard
  6. Настройка Dante (SOCKS5 прокси)
  7. Настройка маршрутизации для nobody
  8. Настройка автозапуска
  9. Проверка работоспособности
  10. Полный скрипт для быстрой настройки
  11. Устранение неполадок

Архитектура решения

[Клиент] → VLESS+Reality → [Сервер Xray] → Dante (SOCKS5) → WireGuard (warp) → Cloudflare WARP
                                              ↓
                                         Весь трафик выходит через WARP
                                         IP сервера скрыт, UDP работает

Почему именно так:

  • WireGuard даёт нативную поддержку UDP (необходимо для Discord Voice)
  • Dante выступает мостом между Xray и WireGuard
  • Маршрутизация не затрагивает системные таблицы (SSH не отваливается)
  • Полная поддержка UDP для голосовых звонков и WebRTC

Подготовка сервера

# Обновление системы
sudo apt-get update && sudo apt-get upgrade -y

# Установка базовых утилит
sudo apt-get install curl wget gnupg2 net-tools resolvconf -y

Установка WireGuard и wgcf

# Установка WireGuard
sudo apt-get install wireguard-tools wireguard -y

# Установка wgcf (утилита для получения конфига WARP)
curl -LJO https://github.com/ViRb3/wgcf/releases/download/v2.2.23/wgcf_2.2.23_linux_amd64
chmod +x wgcf_2.2.23_linux_amd64
sudo mv wgcf_2.2.23_linux_amd64 /usr/local/bin/wgcf

Настройка WireGuard

# Регистрация аккаунта WARP и генерация конфига
wgcf register --accept-tos
wgcf generate

# Создание директории и копирование конфига
sudo mkdir -p /etc/wireguard
sudo cp wgcf-profile.conf /etc/wireguard/warp.conf

# Редактирование конфига
sudo sed -i '/^\[Interface\]/a Table = off' /etc/wireguard/warp.conf
sudo sed -i 's/engage.cloudflareclient.com/162.159.192.1/g' /etc/wireguard/warp.conf

Ключевые параметры конфига:

  • Table = off — запрещает WireGuard изменять глобальную таблицу маршрутизации
  • Endpoint = 162.159.192.1:2408 — IP-адрес сервера WARP (избегаем проблем с DNS)

Пример готового конфига /etc/wireguard/warp.conf:

[Interface]
PrivateKey = ваш_приватный_ключ
Address = 172.16.0.2/32, 2606:4700:110:xxxx:xxxx:xxxx:xxxx:xxxx/128
DNS = 1.1.1.1, 1.0.0.1
MTU = 1280
Table = off

[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 162.159.192.1:2408
PersistentKeepalive = 25

Запуск WireGuard

# Запуск интерфейса
sudo wg-quick up warp

# Проверка, что интерфейс создался и имеет IP
ip link show warp
ip addr show warp

# Проверка пинга через интерфейс
ping -I warp 8.8.8.8 -c 4

# Включение автозапуска
sudo systemctl enable wg-quick@warp

Ожидаемый результат пинга:

PING 8.8.8.8 (8.8.8.8) from 172.16.0.2 warp: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=3.53 ms

Настройка Dante (SOCKS5 прокси)

# Установка Dante
sudo apt-get install dante-server -y

# Создание конфигурации
sudo tee /etc/danted.conf > /dev/null << 'EOF'
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

internal: 127.0.0.1 port = 1080
external: warp

method: none
clientmethod: none

client pass {
    from: 127.0.0.0/8 to: 0.0.0.0/0
    log: error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    protocol: tcp udp
    log: error
}
EOF

# Запуск Dante
sudo systemctl restart danted
sudo systemctl enable danted

# Проверка, что порт слушается
ss -tuln | grep 1080

Ожидаемый результат:

tcp   LISTEN 0      511        127.0.0.1:1080       0.0.0.0:*

Настройка маршрутизации для nobody

Dante работает от пользователя nobody (UID 65534). Нужно добавить для него отдельный маршрут через интерфейс warp.

# Добавление правила и маршрута
sudo ip rule add from all uidrange 65534-65534 lookup 200
sudo ip route add default dev warp table 200

# Проверка
ip rule show | grep 65534
ip route show table 200

Ожидаемый результат:

32765:  from all uidrange 65534-65534 lookup 200
default dev warp scope link

Настройка автозапуска

Создаём systemd сервис для автоматического восстановления маршрута после перезагрузки:

sudo tee /etc/systemd/system/warp-route.service > /dev/null << 'EOF'
[Unit]
Description=Add route for nobody to use warp interface
After=wg-quick@warp.service
Requires=wg-quick@warp.service
Before=danted.service

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 2
ExecStart=/bin/sh -c 'ip rule add from all uidrange 65534-65534 lookup 200 2>/dev/null || true; ip route add default dev warp table 200 2>/dev/null || true'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable warp-route.service
sudo systemctl start warp-route.service

Создание скрипта ожидания IP (опционально)

Если Dante запускается до того, как интерфейс warp получил IP-адрес:

sudo tee /usr/local/bin/wait-for-warp-ip.sh > /dev/null << 'EOF'
#!/bin/bash
MAX_WAIT=30
INTERVAL=1
ELAPSED=0

has_ip() {
    ip addr show warp 2>/dev/null | grep -q "inet "
    return $?
}

echo "Waiting for warp interface to get IP address..."

while [ $ELAPSED -lt $MAX_WAIT ]; do
    if has_ip; then
        echo "warp interface has IP address"
        exit 0
    fi
    sleep $INTERVAL
    ELAPSED=$((ELAPSED + INTERVAL))
done

echo "Timeout: warp interface still has no IP address"
exit 1
EOF

sudo chmod +x /usr/local/bin/wait-for-warp-ip.sh

# Добавляем зависимость в Dante
sudo mkdir -p /etc/systemd/system/danted.service.d
sudo tee /etc/systemd/system/danted.service.d/override.conf > /dev/null << 'EOF'
[Unit]
After=wg-quick@warp.service network.target
Requires=wg-quick@warp.service

[Service]
ExecStartPre=/usr/local/bin/wait-for-warp-ip.sh
ExecStartPre=/bin/sleep 1
EOF

sudo systemctl daemon-reload

Проверка работоспособности

Проверка на сервере

# 1. Проверка WireGuard
ping -I warp 8.8.8.8 -c 4

# 2. Проверка Dante
sudo systemctl status danted

# 3. Проверка порта
ss -tuln | grep 1080

# 4. Проверка прокси (клиент резолвит DNS)
curl --socks5 127.0.0.1:1080 https://1.1.1.1

# 5. Проверка с доменом (если работает)
curl --socks5 127.0.0.1:1080 https://ifconfig.me

# 6. Проверка через socks5h (резолвинг на стороне прокси)
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me

Ожидаемый результат curl: IP-адрес из сети Cloudflare WARP (например, 104.28.xxx.xxx)

Проверка автозапуска

# Статусы сервисов
sudo systemctl is-enabled wg-quick@warp
sudo systemctl is-enabled danted
sudo systemctl is-enabled warp-route.service

# Проверка после перезагрузки
sudo reboot
# ... после перезагрузки ...
curl --socks5 127.0.0.1:1080 https://ifconfig.me

Полный скрипт для быстрой настройки

Сохраните как setup-warp-dante.sh и выполните на сервере:

#!/bin/bash

set -e

echo "=== Настройка WARP + Dante ==="

# 1. Установка пакетов
sudo apt-get update
sudo apt-get install wireguard-tools wireguard dante-server curl -y

# 2. Установка wgcf
curl -LJO https://github.com/ViRb3/wgcf/releases/download/v2.2.23/wgcf_2.2.23_linux_amd64
chmod +x wgcf_2.2.23_linux_amd64
sudo mv wgcf_2.2.23_linux_amd64 /usr/local/bin/wgcf

# 3. Настройка WireGuard
wgcf register --accept-tos
wgcf generate
sudo mkdir -p /etc/wireguard
sudo cp wgcf-profile.conf /etc/wireguard/warp.conf
sudo sed -i '/^\[Interface\]/a Table = off' /etc/wireguard/warp.conf
sudo sed -i 's/engage.cloudflareclient.com/162.159.192.1/g' /etc/wireguard/warp.conf

# 4. Запуск WireGuard
sudo systemctl enable wg-quick@warp
sudo systemctl start wg-quick@warp

# 5. Настройка Dante
sudo tee /etc/danted.conf > /dev/null << 'EOF'
logoutput: syslog
user.privileged: root
user.unprivileged: nobody

internal: 127.0.0.1 port = 1080
external: warp

socksmethod: none
clientmethod: none

client pass {
    from: 127.0.0.0/8 to: 0.0.0.0/0
    log: error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    protocol: tcp udp
    log: error
}
EOF

# 6. Запуск Dante
sudo systemctl enable danted
sudo systemctl restart danted

# 7. Маршрут для nobody
sudo ip rule add from all uidrange 65534-65534 lookup 200 2>/dev/null || true
sudo ip route add default dev warp table 200 2>/dev/null || true

# 8. Автозагрузка маршрута
sudo tee /etc/systemd/system/warp-route.service > /dev/null << 'EOF'
[Unit]
Description=Add route for nobody to use warp interface
After=wg-quick@warp.service
Requires=wg-quick@warp.service
Before=danted.service

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 2
ExecStart=/bin/sh -c 'ip rule add from all uidrange 65534-65534 lookup 200 2>/dev/null || true; ip route add default dev warp table 200 2>/dev/null || true'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable warp-route.service
sudo systemctl start warp-route.service

# 9. Проверка
echo ""
echo "=== Проверка ==="
sleep 3
ping -I warp 8.8.8.8 -c 2
echo ""
curl --socks5 127.0.0.1:1080 https://ifconfig.me

echo ""
echo "=== Установка завершена! ==="

Запуск:

chmod +x setup-warp-dante.sh
sudo ./setup-warp-dante.sh

Устранение неполадок

Пинг через warp не идёт (100% loss)

# Проверка Endpoint
sudo sed -i 's/engage.cloudflareclient.com/162.159.192.1/g' /etc/wireguard/warp.conf
sudo systemctl restart wg-quick@warp

# Проверка connectivity
nc -vzu 162.159.192.1 2408

Dante не запускается

# Просмотр ошибок
sudo journalctl -u danted -n 30 --no-pager

# Проверка синтаксиса конфига
danted -t -f /etc/danted.conf

# Проверка, что порт не занят
sudo lsof -i :1080

curl через прокси не работает

# Проверка порта Dante
ss -tuln | grep 1080

# Проверка маршрута для nobody
ip rule show | grep 65534
ip route show table 200

# Перезапуск Dante
sudo systemctl restart danted

После перезагрузки сервера не работает

# Проверка статусов
sudo systemctl status wg-quick@warp
sudo systemctl status warp-route.service
sudo systemctl status danted

# Проверка маршрута после перезагрузки
ip rule show | grep 65534
ip route show table 200

Настройка Xray в панели Remnawave

После успешной настройки WireGuard и Dante, добавьте в конфиг Xray:

Outbounds:

[
  {
    "tag": "direct",
    "protocol": "freedom"
  },
  {
    "tag": "blocked",
    "protocol": "blackhole"
  },
  {
    "tag": "warp-socks5",
    "protocol": "socks",
    "settings": {
      "servers": [
        {
          "address": "127.0.0.1",
          "port": 1080
        }
      ]
    }
  }
]

Routing:

{
  "rules": [
    {
      "ip": ["geoip:private"],
      "outboundTag": "blocked"
    },
    {
      "protocol": ["bittorrent"],
      "outboundTag": "blocked"
    },
    {
      "domain": ["geosite:category-ads-all"],
      "outboundTag": "blocked"
    },
    {
      "inboundTag": ["vless-xhttp-server", "vless-tcp-server"],
      "outboundTag": "warp-socks5"
    }
  ],
  "domainStrategy": "IPIfNonMatch"
}

Лицензия

MIT

About

Настройка WireGuard + Dante SOCKS5 для выхода через Cloudflare WARP. Полная поддержка UDP (Discord Voice, WebRTC) и скрытие реального IP сервера.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors