Магистраль для трафика: Полное руководство по TCP/UDP переадресации в Linux

Перенаправление трафика между серверами — это классическая задача при масштабировании инфраструктуры, создании прокси-узлов или миграции сервисов без простоя. В этой статье мы разберем, как превратить обычный сервер на Debian 12 в высокопроизводительный транзитный шлюз, используя стандартный стек iptables.

Зачем это нужно?

Представьте ситуацию: у вас есть «входной» сервер (точка А), на который приходят запросы клиентов, и «целевой» сервер (точка Б), где работает само приложение. Задача — сделать так, чтобы сервер А незаметно для клиента перебрасывал все пакеты на сервер Б и возвращал ответы обратно. Мы будем настраивать транзит на уровне ядра, что обеспечит минимальные задержки и высокую пропускную способность.


Этап 1. Подготовка фундамента (Ядро)

По умолчанию ядро Linux работает как конечная точка: если пакет пришел не на его IP, он уничтожается. Нам нужно активировать режим маршрутизатора (IP Forwarding).

Проверяем текущее состояние:

sysctl net.ipv4.ip_forward

Если результат 0, активируем пересылку пакетов в реальном времени и фиксируем её в конфигурации, чтобы настройка пережила перезагрузку:

sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/60-forwarding.conf

Этап 2. Архитектура правил IPTables

Для корректной работы нам понадобится механизм NAT (Network Address Translation). Пересылка будет состоять из двух этапов: DNAT (подмена адреса назначения) и MASQUERADE (подмена адреса источника).

1. Цепочка PREROUTING (Вход в систему)

Здесь мы ловим пакеты, пришедшие на определенный порт, и говорим им: «Твой новый пункт назначения — другой IP».

# Для TCP
sudo iptables -t nat -A PREROUTING -p tcp --dport ПОРТ -j DNAT --to-destination IP_ПОЛУЧАТЕЛЯ:ПОРТ

# Для UDP
sudo iptables -t nat -A PREROUTING -p udp --dport ПОРТ -j DNAT --to-destination IP_ПОЛУЧАТЕЛЯ:ПОРТ

2. Цепочка POSTROUTING (Выход из системы)

Это критический шаг. Нам нужно заставить целевой сервер ответить нашему шлюзу, а не клиенту напрямую. Для этого мы маскируем IP клиента под IP нашего сервера.

sudo iptables -t nat -A POSTROUTING -d IP_ПОЛУЧАТЕЛЯ -p tcp --dport ПОРТ -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -d IP_ПОЛУЧАТЕЛЯ -p udp --dport ПОРТ -j MASQUERADE

Этап 3. Стены и фильтры: Решаем конфликт с Docker

Если на вашем сервере установлен Docker, он автоматически переводит цепочку FORWARD в режим DROP. В этом случае пакеты будут успешно переадресованы внутри таблиц NAT, но не покинут сервер, так как их заблокирует фильтр.

Чтобы решить эту проблему, не нарушая логику Docker, мы добавляем разрешающие правила в цепочку DOCKER-USER:

sudo iptables -I DOCKER-USER 1 -p tcp -d IP_ПОЛУЧАТЕЛЯ --dport ПОРТ -j ACCEPT
sudo iptables -I DOCKER-USER 1 -p udp -d IP_ПОЛУЧАТЕЛЯ --dport ПОРТ -j ACCEPT

Ключ -I ... 1 гарантирует, что наши правила станут в самый верх списка и сработают раньше блокирующих инструкций.


Этап 4. Глубокая диагностика трафика

Как понять, что всё работает правильно? Мы будем использовать «рентген» для пакетов — утилиту tcpdump. Запустите её на шлюзе, чтобы увидеть движение байтов в реальном времени:

sudo tcpdump -i any port ПОРТ -n

Что искать в выводе?

  • In: Пакет от клиента пришел на шлюз.
  • Out: Пакет улетел со шлюза на целевой сервер.
  • In (обратно): Целевой сервер прислал ответ на шлюз.
  • Out (обратно): Шлюз переслал ответ клиенту.

Если вы видите только исходящие пакеты, но нет ответов — проблема на стороне целевого сервера (проверьте его Firewall или настройки приложения).


Этап 5. Сохранение конфигурации

Все правила iptables хранятся в оперативной памяти и исчезнут после ребута. Чтобы этого не случилось, установим утилиту для сохранения правил:

sudo apt update && sudo apt install iptables-persistent

Во время установки система предложит сохранить текущие правила. В будущем, после внесения правок, не забывайте выполнять команду:

sudo netfilter-persistent save

Заключение

Мы создали надежную систему транзита трафика. Прелесть этого метода в том, что он работает на уровне ядра Linux, практически не создавая нагрузки на процессор. Теперь ваш сервер — это полноценный сетевой мост, готовый к любым объемам данных.

Главное — всегда следите за цепочками FORWARD и вовремя делайте бэкап правил в /etc/iptables/rules.v4.

👁️ 22

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

девять + 11 =

root@phoenix901:~# connect
[×]

Получай дайджест раз в неделю.
Без спама.