Проксирование TCP-соединений с HAProxy: Руководство для начинающих
Опубликовано 03.10.2025
Проксирование TCP-соединений с HAProxy: Руководство для начинающих
Введение
Если вы начинающий системный администратор или разработчик, наверняка сталкивались с задачей управления сетевым трафиком.
Один из мощных инструментов для этого — HAProxy, высокопроизводительный балансировщик нагрузки для TCP и HTTP.
В этой статье мы разберём:
- что такое TCP-проксирование,
- зачем использовать HAProxy,
- пример конфигурации для новичков,
- советы по безопасности и мониторингу.
Что такое проксирование TCP?
Проксирование TCP — это пересылка TCP-соединений от клиента к серверу (или группе серверов) через посредника.
В отличие от HTTP-прокси, который работает на прикладном уровне, TCP-проксирование происходит на транспортном, что делает его универсальным для любых TCP-протоколов: от баз данных до почтовых сервисов.
Зачем использовать HAProxy?
HAProxy — это лёгкий и гибкий инструмент, который позволяет:
- 🔄 распределять нагрузку между несколькими серверами;
- ✅ проверять доступность серверов;
- 📊 предоставлять удобную статистику и мониторинг;
- 🔒 обрабатывать SSL-трафик (терминация или сквозная передача).
Пример конфигурации HAProxy для TCP-проксирования
Ниже конфигурация, которая слушает соединения на порту 4444
и перенаправляет их на тестовый сервер.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend tcp-frontend
bind *:4444
mode tcp
default_backend tcp-backend
backend tcp-backend
mode tcp
balance roundrobin
option tcp-check
server server1 192.168.1.100:443 weight 1
Разбор конфигурации
- global — задаёт базовые параметры (логирование, chroot, пользователя, режим демона).
- defaults — дефолтные опции, включая таймауты. По умолчанию
mode http
, но вfrontend
иbackend
переопределяем наtcp
. - frontend tcp-frontend — слушает порт
4444
и пересылает запросы вbackend
. - backend tcp-backend — балансирует соединения, проверяет их доступность (
tcp-check
), определяет список серверов.
Настройка HAProxy пошагово
Установите HAProxy:
# Ubuntu/Debian sudo apt update && sudo apt install haproxy # CentOS/RHEL sudo yum install haproxy
Сохраните конфигурацию в
/etc/haproxy/haproxy.cfg
.Проверьте синтаксис:
haproxy -c -f /etc/haproxy/haproxy.cfg
Перезапустите сервис:
sudo systemctl restart haproxy sudo systemctl enable haproxy
Протестируйте подключение:
telnet <haproxy-ip> 4444
Мониторинг: страница статистики
Чтобы отслеживать состояние серверов и соединений, добавьте секцию:
frontend stats
bind *:3308
mode http
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth admin:securepassword123
stats admin if TRUE
Откройте в браузере:
http://<haproxy-ip>:3308/haproxy?stats
Советы для новичков
🔐 Безопасность — используйте сложные пароли и ограничивайте доступ к статистике по IP.
🩺 Здоровье серверов —
tcp-check
базовый, можно расширить проверками для конкретного протокола.⚡ Масштабирование — добавьте больше серверов:
server server2 192.168.1.101:443 weight 1 server server3 192.168.1.102:443 weight 1
📝 Логирование — проверьте
/var/log/haproxy.log
(при необходимости настройтеrsyslog
).
Примеры использования
- Балансировка баз данных (MySQL, PostgreSQL).
- Проксирование почтовых сервисов (SMTP, IMAP).
- Сквозное SSL-проксирование.
- Единая точка входа для микросервисов.
Заключение
HAProxy делает TCP-проксирование простым даже для новичков.
Достаточно настроить frontend
и backend
, добавить проверки доступности и мониторинг — и у вас готов надёжный прокси.
С ростом опыта можно переходить к продвинутым сценариям: SSL-терминация, ACL, кастомные health-check-и.
Успехов в настройке и балансировке! 🚀