Новая схема работы IP-адресов проекта
По сравнению с предыдущей реализацией, с 19 сентября 2022 года в проекте CLO изменилась схема использования внешних IP-адресов, подключенных к серверам и балансировщикам.
Предыдущая схема
В ранее существовавшей схеме внешние IP-адреса делились на статичные и плавающие.
- Статичный IP — это публичный адрес, который подключается непосредственно на сетевой интерфейс сервера
- Плавающий IP (FIP) — это адрес который работает через SNAT
Новая схема
В новой схеме нет разделения на статичные и плавающие IP-адреса. Теперь любые внешние IP-адреса можно отключать и подключать к серверу и другим услугам. Для сервера каждый IP-адрес теперь работает через отдельный интерфейс. Кроме того, серверу может быть назначен основной IP-адрес.
Основной адрес — это адрес, через который по умолчанию идут все исходящие запросы в интернет по инициативе сервера. Основной адрес работает как IP-адрес сервера для всех приложений и служб, не указывающих сетевой интерфейс или IP-адрес явно.
Все плавающие IP-адреса, подключенные к серверам, после перехода на новую схему помечаются как устаревшие. Выполнять операции с серверами, подключенными к устаревшим адресам, нельзя. Пользователю необходимо сконвертировать плавающий IP-адрес в новый внешний IP-адрес (основной или дополнительный). Для этого достаточно отключить плавающий адрес от сервера. При отключении адрес будет автоматически конвертирован в новую схему.
Внимание! Все старые IP-адреса сервиса CLO будут последовательно сконвертированы в новый формат:
- Все статичные IP-адреса будут одномоментно автоматически переведены на новую схему. Никакие дополнительные действия не потребуются.
- Внешние IP-адреса, отключенные от сервера (балансировщика), также будут сконвертированы в новую схему
- Впоследствии будет выполнен обязательный перевод всех IP-адресов на новую схему
Таблица изменений в схеме использования IP-адресов:
Разные типы внешних адресов — «Статичный IP» и «Плавающий IP» | Теперь все внешние IP-адреса работают как плавающие. Внешние IP-адреса также можно переносить. |
К серверу можно подключить только два внешних IP-адреса | Можно подключить до 10 внешних IP-адресов |
Для плавающих адресов работает SNAT | SNAT более не используется для серверов |
Плавающие IP не видны для ОС сервера | Все IP-адреса, подключенные к серверу, являются отдельными сетевыми интерфейсами. Уже подключенные к серверам плавающие IP-адреса продолжат работать, но при этом будут помечены как устаревшие. Необходимо конвертировать старые плавающие IP-адреса во внешние IP-адреса новой модели, чтобы эти IP-адреса появились на сервере как отдельные сетевые интерфейсы. |
Настройка внешних адресов по новой схеме
Настройка внешних адресов осуществляется с помощью сетевого скрипта-конфигуратора, запускаемого как служба.
Скрипт при необходимости можно запустить на сервере самостоятельно с помощью команды:
systemctl start netconfig
Исполняемый файл конфигуратора находится в одном из следующих каталогов:
Для CentOS 7, AlmaLinux 8
/etc/sysconfig/network-scripts/netconfig*
Для Ubuntu 20, Ubuntu 22, Debian 10, Debian 11
/etc/network/netconfig*
Внимание! Настоятельно не рекомендуется вносить изменения в следующие файлы, так как внесённые изменения будет потеряны при вызове скрипта-конфигуратора:
Для CentOS 7, AlmaLinux 8:
/etc/sysconfig/network-scripts/ifcfg-* /etc/iproute2/rt_tables /etc/systemd/system/netconfig.service /etc/resolve.conf
- таблицы маршрутизации с индексами, начиная с 10
Для Ubuntu 20, Ubuntu 22 , Debian 10, Debian 11:
/etc/netplan/netconfig.yaml /etc/iproute2/rt_tables /etc/systemd/system/netconfig.service /etc/resolve.conf
- таблицы маршрутизации с индексами, начиная с 10
- утилита netplan в качестве менеджера сети
- утилита systemd-resolved в качестве резолвера
Конфигуратор вызывается при следующих действиях:
- Перезагрузка сервера
- Отключение IP-адреса
- Подключение IP-адреса
- Смена основного IP-адреса
Внимание! Шлюз по умолчанию всегда переопределяется скриптом-конфигуратором, на его выбор повлиять нельзя. На практике это означает, что при каждом перезапуске сервера или отключении/подключении внешнего IP-адреса пользовательские настройки шлюза по умолчанию будут утеряны и заменены настройками, предоставляемыми скриптом-конфигуратором.
Если пользователю нужно создать свою таблицу маршрутизации, ее можно указать в /etc/iproute2/rt_tables.orig, где под нужды пользователя зарезервированы индексы с 1 по 9.
Взаимодействие с Docker
При использовании режима сети bridge доступ к контейнеру можно получить только через основной IP-адрес. Поэтому для работы с контейнерами рекомендуется использовать один из следующих подходов:
- использовать режим сети host
- организовать доступ к контейнерам через прокси-сервер (например, nginx)
Если требуется использовать режим bridge без прокси-сервера, необходимо настроить маркировку пакетов и направить трафик сетевой в таблицу маршрутизации, созданную для конкретного интерфейса.
Внимание! Данная настройка не совместима с работой скрипта-конфигуратора netconfig. Для её использования необходимо удалить netconfig, поскольку при запуске скрипта таблицы маршрутизации могут быть перезаписаны.
Чтобы настроить маркировку пакетов для каждого сетевого интерфейса, выполните следующие команды:
iptables -t mangle -A PREROUTING -i [название интерфейса] -j MARK --set-mark [маркировка]
iptables -t mangle -A PREROUTING -i [название интерфейса] -j CONNMARK --save-mark
Восстановите маркировку при передаче соединения в bridge докера:
iptables -t mangle -A PREROUTING -i docker0 -j CONNMARK --restore-mark
Добавьте маршрут к сети docker в таблицы маршрутизации:
ip r a 172.17.0.0/16 dev docker0 table [таблица маршрутизации, соответствующая выбранному интерфейсу]
Создайте правила маршрутизации:
ip rule add from all fwmark [маркировка] lookup [таблица маршрутизации, соответствующая выбранному интерфейсу]