Полная инструкция по настройке WireGuard с выходом через Cloudflare WARP и Dante SOCKS5 прокси. Решение идеально подходит для использования с Xray (VLESS+Reality) для полной поддержки UDP (Discord Voice, WebRTC) и скрытия реального IP сервера.
- Архитектура решения
- Подготовка сервера
- Установка WireGuard и wgcf
- Настройка WireGuard
- Запуск WireGuard
- Настройка Dante (SOCKS5 прокси)
- Настройка маршрутизации для nobody
- Настройка автозапуска
- Проверка работоспособности
- Полный скрипт для быстрой настройки
- Устранение неполадок
[Клиент] → 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
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# Регистрация аккаунта 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# Запуск интерфейса
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
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:*
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Если 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# Проверка 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# Просмотр ошибок
sudo journalctl -u danted -n 30 --no-pager
# Проверка синтаксиса конфига
danted -t -f /etc/danted.conf
# Проверка, что порт не занят
sudo lsof -i :1080# Проверка порта 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После успешной настройки 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