// Engineering Log
Прокси-серверы: Часть 4 — Dante
Опубликовано 21.09.2026
Dante — свободный SOCKS-прокси-сервер компании Inferno Nettverk. Он реализует протоколы SOCKS4, SOCKS4a и SOCKS5 (RFC 1928) и распространяется под лицензией BSD/CMU. Последняя версия — 1.4.4, выпущенная в декабре 2024 года. В Debian и Ubuntu сервер устанавливается из пакета dante-server, сама служба называется danted.
Чем SOCKS отличается от HTTP-прокси
HTTP-прокси разбирает запросы протокола HTTP: видит адрес страницы, заголовки, может кешировать ответы и фильтровать содержимое. SOCKS-прокси работает ниже: клиент просит его соединиться с указанным адресом и портом, после чего прокси просто передаёт байты в обе стороны, не вникая в их смысл. Поэтому через SOCKS можно пропустить любой TCP-трафик — SSH, почтовые протоколы, базы данных, мессенджеры, — а SOCKS5 поддерживает ещё и UDP.
Версии протокола различаются возможностями:
- SOCKS4 — только TCP, без аутентификации по паролю, адрес назначения передаётся IP-адресом;
- SOCKS4a — то же, но позволяет передать имя узла, чтобы его разрешил прокси;
- SOCKS5 — TCP и UDP, IPv6, аутентификация по имени пользователя и паролю.
Для чего используют Dante
- Единая точка выхода. Трафик приложений из внутренней сети выходит в интернет через один сервер, с одного адреса и по одним правилам.
- Доступ к ресурсам с белым списком IP-адресов. Если внешний сервис пускает только с определённого адреса, достаточно поставить Dante на машину с этим адресом.
- Выход через другой сервер или другую страну. Целевой сервер видит адрес прокси, а не клиента. Это используется для проверки региональных версий сайтов и работы с сервисами, доступными только из определённых стран.
- Контроль доступа. Правила Dante определяют, с каких адресов можно подключаться к прокси и куда через него разрешено ходить.
- Проксирование всего трафика системы или контейнера. Приложения, которые сами не умеют работать с SOCKS, можно направить в прокси через tun2socks — это разобрано в статьях для контейнера и для всей системы.
Установка
В Debian и Ubuntu:
sudo apt update
sudo apt install dante-serverКонфигурация находится в файле /etc/danted.conf. Сразу после установки служба может не запуститься — в стандартном файле не указаны интерфейсы. Это нормально: сначала нужно написать конфигурацию.
Рабочая конфигурация с паролем
Ниже — конфигурация SOCKS5-прокси, который принимает подключения на порту 1080 и пускает только пользователей с паролем. Имя внешнего интерфейса (eth0) замените на своё — его показывает команда ip -br addr.
logoutput: syslog
internal: eth0 port = 1080
external: eth0
clientmethod: none
socksmethod: username
user.privileged: root
user.notprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error connect disconnect
}Что здесь происходит:
internal— адрес и порт, на которых Dante принимает подключения клиентов;external— интерфейс, с которого прокси устанавливает соединения с целевыми серверами;clientmethod— проверка на уровне TCP-подключения, до начала SOCKS-сеанса;noneозначает, что на этом этапе ничего не проверяется;socksmethod: username— проверка имени и пароля в рамках SOCKS5. Dante сверяет их с системной базой пользователей, поэтому для чтения паролей ему нужны права root при запуске (user.privileged), а основную работу он выполняет от непривилегированного пользователя (user.notprivileged);client pass— кому разрешено подключаться к прокси;socks pass— какие SOCKS-команды и куда разрешены:connect— обычное TCP-соединение,bind— входящие соединения (нужны, например, активному режиму FTP),udpassociate— передача UDP.
Правила проверяются сверху вниз, срабатывает первое подходящее. Если ни одно не подошло, доступ запрещён.
Пользователь для прокси создаётся как обычная системная учётная запись без права входа в систему:
sudo useradd -r -M -s /usr/sbin/nologin proxyuser
sudo passwd proxyuserЗапуск и проверка:
sudo systemctl restart danted
sudo systemctl status danted
curl -x socks5h://proxyuser:ПАРОЛЬ@192.0.2.10:1080 https://ifconfig.meПрефикс socks5h означает, что имя сайта разрешает прокси, а не клиент. Команда должна вывести внешний адрес сервера с Dante.
Подключение клиентов
- Браузер. В Firefox SOCKS-прокси задаётся в настройках сети: хост, порт 1080, тип SOCKS v5 и флажок «Отправлять DNS-запросы через прокси». Chromium и основанные на нём браузеры берут системные настройки или параметр запуска
--proxy-server="socks5://192.0.2.10:1080"; пароль для SOCKS они не поддерживают, поэтому для них прокси обычно ограничивают по адресам. - Консольные программы. Многие утилиты, включая curl, понимают переменную окружения
ALL_PROXY=socks5h://proxyuser:ПАРОЛЬ@192.0.2.10:1080. - SSH. Подключение к серверу через SOCKS-прокси задаётся в
~/.ssh/configпараметромProxyCommand nc -X 5 -x 192.0.2.10:1080 %h %p(нужен netcat из OpenBSD). Пароль этот способ не передаёт, поэтому он подходит для прокси, ограниченного по адресам. - Приложения без поддержки прокси направляются в SOCKS через tun2socks или proxychains.
Ограничение доступа по адресам
Если прокси нужен только сотрудникам офиса или только другим вашим серверам, ограничьте источник в client pass:
client pass {
from: 198.51.100.0/24 to: 0.0.0.0/0
log: error
}Так же в socks pass можно запретить обращения к внутренним сетям, чтобы через прокси нельзя было попасть в вашу локальную инфраструктуру. Запрещающее правило ставится выше разрешающего:
socks block {
from: 0.0.0.0/0 to: 10.0.0.0/8
log: connect error
}Типичные ошибки
- Открытый прокси. Конфигурация без пароля и с
from: 0.0.0.0/0быстро находится сканерами и используется для рассылки спама и атак от вашего адреса. Либо включайтеsocksmethod: username, либо ограничивайте источники по адресам, лучше — и то и другое. - Пароль передаётся открытым текстом. Так устроен SOCKS5: имя и пароль идут по сети незашифрованными. Документация Dante прямо об этом предупреждает. Если клиенты подключаются через интернет, пропускайте SOCKS внутри SSH-туннеля или WireGuard.
- Не тот внешний интерфейс. Если в
externalуказан интерфейс без выхода в интернет, клиент подключается к прокси, но дальше соединения не устанавливаются. - Закрыт порт в межсетевом экране. Нужно открыть TCP-порт 1080, а для
udpassociate— ещё и UDP-порты, через которые Dante передаёт датаграммы. - Клиент использует SOCKS4. В SOCKS4 нет аутентификации по паролю, поэтому при
socksmethod: usernameтакие клиенты получат отказ. - Ошибки в конфигурации. После правки полезно посмотреть журнал:
journalctl -u danted -n 50. Dante сообщает номер строки с ошибкой.
Достоинства и ограничения
Достоинства:
- проксирует любой TCP- и UDP-трафик, а не только веб;
- мало потребляет ресурсов и работает даже на самом маленьком VPS;
- гибкие правила доступа по адресам, пользователям и командам SOCKS;
- долгая история и стабильная работа;
- свободная лицензия, пакеты в основных дистрибутивах.
Ограничения:
- нет функций HTTP-прокси: кеширования, фильтрации по адресам страниц, TLS-терминации — для этого нужны Squid или Nginx;
- пароль в SOCKS5 не шифруется, защищать канал нужно отдельно;
- настройка только через текстовый файл, графического интерфейса нет;
- нет встроенного учёта трафика по пользователям — только журнал соединений.
Когда выбирать Dante
Dante подходит, когда нужен надёжный SOCKS5-прокси с аутентификацией и понятными правилами доступа — для приложений, которым нужен выход через определённый адрес, для доступа к сервисам с белым списком IP или для направления трафика контейнеров через tun2socks. Если же нужны HTTP-прокси, учёт трафика и лимиты по пользователям в одной программе, удобнее 3proxy; если важны фильтрация веб-трафика и отчёты о посещённых сайтах — Squid.
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related