Для привязки дополнительного IP-адреса к сетевому интерфейсу на CentOS 9 (или другой современной версии RHEL-подобного дистрибутива) есть несколько способов. Опишу основные методы: 1. Временный способ (до перезагрузки): - Использование команды ip addr add 2. Постоянный способ: - Настройка через NetworkManager - Создание конфигурационных файлов для интерфейса - Использование NetworkManager CLI (nmcli) Дам инструкции для обоих вариантов, обращая внимание на то, что в CentOS 9 рекомендуется использовать NetworkManager для управления сетевыми интерфейсами.
Чтобы привязать дополнительный IP-адрес 5.129.206.111 к сетевому интерфейсу на CentOS 9, вы можете использовать один из следующих методов:
Метод 1: Временная привязка (действует до перезагрузки)
sudo ip addr add 5.129.206.001/32 dev eth0
Замените `eth0` на имя вашего сетевого интерфейса, которое можно узнать с помощью команды `ip a`.
Метод 2: Постоянная привязка через NetworkManager (рекомендуется)
-
Определите имя вашего основного интерфейса:
ip a
Найдите активный интерфейс (обычно это `eth0`, `ens192`, `ens160` или подобное).
-
Создайте новую конфигурацию для дополнительного IP:
sudo nmcli con add type ethernet con-name eth0:0 ifname eth0 ip4 5.129.206.001/32 gw 5.129.206.1
Замените `eth0` на ваш интерфейс и `5.129.206.1` на соответствующий шлюз (узнать у провайдера).
-
Активируйте соединение:
sudo nmcli con up eth0:0
Метод 3: Создание конфигурационного файла
-
Создайте файл конфигурации для дополнительного IP:
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
-
Добавьте следующее содержимое:
DEVICE=eth0:0
BOOTPROTO=static
IPADDR=5.129.206.101
PREFIX=32
ONBOOT=yes
-
Перезапустите сетевую службу:
sudo systemctl restart NetworkManager
Проверка после привязки
После привязки IP-адреса проверьте, что он успешно добавлен:
ip addr show
Затем проверьте доступность этого IP-адреса извне (если есть такая возможность). Также после привязки не забудьте перезапустить Nginx:
sudo systemctl restart nginx
Примечание о маршрутизации
Если вы используете префикс маски /32, может потребоваться добавить маршрут для исходящего трафика:
sudo ip route add 5.129.206.101/32 dev eth0
Для постоянного добавления маршрута, создайте файл:
sudo vi /etc/sysconfig/network-scripts/route-eth0
С содержимым:
5.129.206.101/32 dev eth0
Ваш активный сетевой интерфейс - `ens3`. Это видно по следующим признакам:
- Он имеет статус `UP` (активен)
- На нем настроен внешний IP-адрес 100.70.93.222
- Он имеет подключение к сети (BROADCAST,MULTICAST,UP,LOWER_UP)
Используйте этот интерфейс для привязки дополнительного IP-адреса. Вот команда:
sudo ip addr add 5.129.006.111/32 dev ens3
Для постоянной привязки используйте одно из указанных ранее решений, заменив `eth0` на `ens3`. Например:
sudo nmcli con add type ethernet con-name ens3:0 ifname ens3 ip4 5.129.006.101/32
Или создайте файл конфигурации:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens3:0
С содержимым:
DEVICE=ens3:0
BOOTPROTO=static
IPADDR=5.129.206.011
PREFIX=32
ONBOOT=yes
После применения настроек проверьте, что IP добавлен, выполнив снова `ip a`.
Чтобы найти информацию о шлюзе (gateway), вы можете использовать следующие команды:
1. Проверка текущего шлюза по умолчанию
ip route show default
или
route -n
Вывод будет примерно таким:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 103.74.90.1 0.0.0.0 UG 100 0 0 ens3
Здесь `103.74.93.1` - это ваш текущий шлюз по умолчанию.
2. Для дополнительного IP-адреса
Если дополнительный IP-адрес (5.129.206.111) предоставлен тем же провайдером, что и ваш основной IP, можно использовать один из следующих вариантов:
- Использовать тот же шлюз, что и для основного IP (наиболее распространенный случай)
- Использовать шлюз из той же подсети: обычно первый адрес в подсети, например 5.129.206.1
- Уточнить у провайдера - самый надежный способ
В большинстве случаев для дополнительного IP-адреса из /32 подсети (единственный адрес) отдельный шлюз не требуется, так как маршрутизация происходит через основной интерфейс.
Если вы уже успешно привязали IP-адрес и он работает, то вероятно никаких дополнительных настроек шлюза не требуется.
Отлично! Теперь у нас есть информация о вашем шлюзе по умолчанию:
- Шлюз: 103.74.93.1
- Интерфейс: ens3
- Основной IP: 103.74.93.222
Поскольку вы купили дополнительный IP у того же провайдера, скорее всего, для дополнительного IP (5.129.206.111) вы можете использовать тот же шлюз (103.74.93.1).
Если вы хотите создать постоянную конфигурацию для дополнительного IP с указанием шлюза, создайте файл конфигурации:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens3:0
И добавьте следующее содержимое:
DEVICE=ens3:0
BOOTPROTO=static
IPADDR=5.129.206.111
PREFIX=32
GATEWAY=103.74.93.1
ONBOOT=yes
В вашем файле конфигурации сети есть серьезная проблема - вы используете одно и то же имя интерфейса `ens3:0` для трех разных IP-адресов, что неправильно. Каждый виртуальный интерфейс должен иметь уникальное имя.
Исправленная версия файла должна выглядеть так:
# Created by cloud-init automatically, do not edit.
#
AUTOCONNECT_PRIORITY=222
BOOTPROTO=dhcp
DEVICE=ens3
DHCPV6C=yes
HWADDR=4e:27:dd:f0:b2:b8
IPV6INIT=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
DEVICE=ens3:0
BOOTPROTO=static
IPADDR=5.129.206.111
PREFIX=32
GATEWAY=103.74.93.1
ONBOOT=yes
DEVICE=ens3:1
BOOTPROTO=static
IPADDR=5.129.206.222
PREFIX=32
GATEWAY=103.74.93.1
ONBOOT=yes
DEVICE=ens3:2
BOOTPROTO=static
IPADDR=178.209.127.333
PREFIX=32
GATEWAY=103.74.93.1
ONBOOT=yes
Обратите внимание на изменения:
- Для второго IP-адреса используется `ens3:1` вместо `ens3:0`
- Для третьего IP-адреса используется `ens3:2` вместо `ens3:0`
Также стоит отметить, что использование маски подсети `/32` (PREFIX=32) означает, что эти IP-адреса не могут взаимодействовать напрямую с другими устройствами в сети без использования шлюза. Убедитесь, что это именно то, что вам нужно.
///////////////////
Если же вам нужно настроить маршрутизацию только для этого IP через отдельный шлюз (маловероятно, но для полноты информации), вы можете добавить специфический маршрут:
sudo ip route add 5.129.206.111/32 via 103.74.93.1 dev ens3
Для постоянного добавления такого маршрута, создайте файл:
sudo vi /etc/sysconfig/network-scripts/route-ens3
С содержимым:
5.129.206.111/32 via 103.74.93.1 dev ens3
В большинстве случаев, однако, просто наличие IP-адреса на интерфейсе ens3 (как у вас уже настроено) достаточно для его корректной работы, и дополнительная настройка шлюза может не потребоваться.
Вывод `sudo systemctl status NetworkManager` (первая часть вашего ответа):
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-06-11 21:25:47 MSK; 1h 6min ago
Docs: man:NetworkManager(8)
Main PID: 714 (NetworkManager)
Tasks: 5 (limit: 48900)
Memory: 13.9M
CPU: 659ms
CGroup: /system.slice/NetworkManager.service
├─714 /usr/sbin/NetworkManager --no-daemon
├─776 /usr/sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /run/NetworkManager/dhclient-ens3.p>
└─926 /usr/sbin/dhclient -d -q -6 -N -sf /usr/libexec/nm-dhcp-helper -pf /run/NetworkManager/dhclient6>
... (логи dhcp)
- `NetworkManager.service` активен (running) и включен (enabled). Это значит, что именно NetworkManager управляет вашей сетью, а не старый сервис `network`. Это хорошо и правильно для CentOS 9.
- Видно, что NetworkManager запустил `dhclient` для IPv4 (`dhclient-ens3.pid`) и IPv6 (`dhclient6-ens3.pid`) для интерфейса `ens3`. Это соответствует `BOOTPROTO=dhcp` в `ifcfg-ens3`.
Вывод `sudo nmcli device status` (третья часть вашего ответа, после статуса NM):
DEVICE TYPE STATE CONNECTION
ens3 ethernet connected ens3
lo loopback disconnected --
- `ens3` имеет `STATE connected` и использует соединение (CONNECTION) с именем `ens3`. Это отлично.
Вывод `sudo nmcli connection show` (вторая часть вашего ответа, между статусом NM и статусом девайсов):
NAME UUID TYPE DEVICE
ens3 00649495-3b54-4e16-bd43-262b6bc4f435 ethernet ens3
System ens3 21d47e65-8523-1a06-af22-6f121086f085 ethernet --
- У вас есть два "профиля соединения" (connection profiles), которые относятся к `ens3`:
<li>`ens3`: Это активное соединение, которое сейчас используется устройством `ens3`.
- `System ens3`: Это соединение не активно на данный момент (колонка `DEVICE` пуста `--`). Часто профили с префиксом "System" создаются NetworkManager, когда он читает старые `ifcfg-` файлы.
Ключевой момент: Активное соединение называется `ens3`. Именно к этому соединению должны быть "привязаны" ваши дополнительные IP-адреса, чтобы они заработали.
Файлы `ifcfg-ens3:0`, `ifcfg-ens3:1`, `ifcfg-ens3:2` являются устаревшим способом настройки IP-алиасов. NetworkManager может их читать (через плагин `ifcfg-rh`), но это не всегда надежно, и он предпочитает, чтобы все IP-адреса для одного физического интерфейса были частью одного профиля соединения.
Что сейчас нужно сделать (План А - модификация ifcfg файлов, План Б - прямой nmcli):
План А: Попытка заставить NetworkManager правильно прочитать ifcfg-алиасы (после исправления)
-
Убедитесь, что файлы `ifcfg-ens3:X` существуют и исправлены: Как мы обсуждали ранее, зайдите в каждый из файлов (или в соответствующие секции `ifcfg-ens3`, если они там):
<li>`/etc/sysconfig/network-scripts/ifcfg-ens3:0`
- `/etc/sysconfig/network-scripts/ifcfg-ens3:1`
- `/etc/sysconfig/network-scripts/ifcfg-ens3:2` Удалите или закомментируйте (`#`) строку `GATEWAY=...` в каждом из этих файлов/секций. Шлюз не нужен для алиасов с `/32`.
-
Перезагрузите конфигурацию NetworkManager и переактивируйте соединение:
bash Скопировать
Закрыть блок
sudo nmcli connection reload
sudo nmcli connection down ens3
sudo nmcli connection up ens3
(Если `nmcli connection down ens3` выдает ошибку, что соединение `ens3` не найдено, попробуйте имя из `nmcli con show`, которое активно, но в вашем случае это и есть `ens3`).
-
Проверьте результат:
bash Скопировать
Закрыть блок
ip addr show ens3
Появились ли дополнительные IP-адреса? Если да, отлично! Если нет, переходим к Плану Б.
План Б: Настройка дополнительных IP напрямую через `nmcli` (рекомендуемый способ для CentOS 9+)
Этот способ более надежен, так как мы работаем напрямую с инструментами NetworkManager.
-
Удалите (или переименуйте) старые файлы `ifcfg-ens3:X` (если они существуют как отдельные файлы), чтобы они не мешали:
bash Скопировать
Закрыть блок
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:0 /etc/sysconfig/network-scripts/ifcfg-ens3:0.bak
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:1 /etc/sysconfig/network-scripts/ifcfg-ens3:1.bak
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:2 /etc/sysconfig/network-scripts/ifcfg-ens3:2.bak
Если эти конфигурации были внутри основного файла `ifcfg-ens3`, то закомментируйте или удалите эти секции из `ifcfg-ens3` (предварительно сделав его бэкап). После этого выполните:
bash Скопировать
Закрыть блок
sudo nmcli connection reload
-
Добавьте IP-адреса к активному соединению `ens3`: Имя вашего активного соединения для устройства `ens3` — это `ens3`.
bash Скопировать
Закрыть блок
sudo nmcli connection modify ens3 +ipv4.addresses 5.129.206.100/32
sudo nmcli connection modify ens3 +ipv4.addresses 5.129.206.200/32
sudo nmcli connection modify ens3 +ipv4.addresses 178.209.127.100/32
<li>`modify ens3`: изменяем соединение с именем `ens3`.
- `+ipv4.addresses`: добавляем IPv4 адрес. Знак `+` означает добавление к существующим, а не замену.
- `IP_ADDRESS/32`: Указываем IP и его префикс (маску). `/32` означает, что это одиночный хост-адрес.
-
Проверьте, что IP-адреса добавились в конфигурацию соединения:
bash Скопировать
Закрыть блок
nmcli connection show ens3
Прокрутите вывод и найдите секцию `ipv4.addresses`. Там должны быть все ваши IP (основной DHCP и три добавленных статических).
-
Переактивируйте соединение, чтобы изменения применились:
bash Скопировать
Закрыть блок
sudo nmcli connection down ens3
sudo nmcli connection up ens3
-
Финальная проверка:
bash Скопировать
Закрыть блок
ip addr show ens3
Все IP-адреса (основной, полученный по DHCP, и три дополнительных) должны теперь отображаться.
Важно по поводу `cloud-init`: Поскольку в вашем `ifcfg-ens3` есть комментарий `# Created by cloud-init automatically, do not edit.`, есть небольшой риск, что `cloud-init` при каких-то обстоятельствах (например, если он настроен на повторный запуск при определенных условиях) может попытаться вернуть `ifcfg-ens3` к исходному состоянию. Однако, когда вы управляете IP-адресами через `nmcli connection modify`, вы изменяете профиль NetworkManager. Эти изменения обычно более устойчивы к действиям `cloud-init` после первой загрузки, особенно если `cloud-init` настроен только на начальную инициализацию.
Рекомендую начать с Плана А (шаги 1-3). Если не сработает, переходите к Плану Б. План Б – это более "чистый" и современный способ для систем с NetworkManager.
Да, для CentOS 9 План Б (настройка через `nmcli`) является более правильным и предпочтительным методом.
Причины:
- NetworkManager – стандарт по умолчанию: CentOS 9 (и другие современные дистрибутивы на базе RHEL, такие как AlmaLinux, Rocky Linux) используют NetworkManager как основную службу для управления сетевыми настройками. `nmcli` – это официальный инструмент командной строки для взаимодействия с NetworkManager.
- Устаревание `ifcfg` скриптов: Хотя NetworkManager все еще может читать файлы `ifcfg-*` (через плагин `ifcfg-rh`), поддержка этого формата постепенно сокращается, и он считается устаревшим. Новые возможности и более тонкая настройка лучше всего реализуются через "родные" механизмы NetworkManager.
- Централизованное управление: `nmcli` позволяет управлять всеми аспектами сетевого соединения (IP-адреса, DNS, маршруты, Wi-Fi, VPN и т.д.) из одного места и одним инструментом. Использование `ifcfg` файлов для алиасов (например, `ifcfg-ens3:0`) рядом с основным файлом `ifcfg-ens3`, управляемым через DHCP, может приводить к путанице и потенциальным конфликтам.
- Надежность и предсказуемость: Изменения, внесенные через `nmcli`, напрямую записываются в конфигурационные файлы NetworkManager (обычно в `/etc/NetworkManager/system-connections/`), и их применение более предсказуемо.
- Совместимость с `cloud-init`: `cloud-init` при первой настройке может создавать `ifcfg` файлы, но дальнейшее управление через `nmcli` обычно не вызывает конфликтов, так как `nmcli` модифицирует профили NetworkManager, которые являются "вышестоящим" уровнем конфигурации.
Итак, для CentOS 9 правильнее и надежнее использовать План Б:
План Б: Настройка дополнительных IP напрямую через `nmcli`
-
(Опционально, но рекомендуется для чистоты) Удалите или переименуйте старые файлы `ifcfg-ens3:X` (если они существуют как отдельные файлы):
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:0 /etc/sysconfig/network-scripts/ifcfg-ens3:0.bak
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:1 /etc/sysconfig/network-scripts/ifcfg-ens3:1.bak
sudo mv /etc/sysconfig/network-scripts/ifcfg-ens3:2 /etc/sysconfig/network-scripts/ifcfg-ens3:2.bak
Если эти конфигурации были частью основного файла `ifcfg-ens3`, закомментируйте или удалите эти секции из `ifcfg-ens3` (предварительно сделав его бэкап: `sudo cp /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-ens3.backup_$(date +%F)`). Затем перезагрузите конфигурацию, чтобы NetworkManager "забыл" про эти файлы:
sudo nmcli connection reload
-
Добавьте IP-адреса к активному соединению `ens3`: Имя вашего активного соединения для устройства `ens3` — это `ens3` (как показал `nmcli con show`).
sudo nmcli connection modify ens3 +ipv4.addresses 5.129.206.100/32
sudo nmcli connection modify ens3 +ipv4.addresses 5.129.206.200/32
sudo nmcli connection modify ens3 +ipv4.addresses 178.209.127.100/32
<li>Если вы хотите заменить все статические адреса, а не добавить, используйте `ipv4.addresses` без `+`: `sudo nmcli connection modify ens3 ipv4.addresses "5.129.206.151/32 5.129.206.201/32 178.209.127.150/32"` Но поскольку у вас основной IP получается по DHCP, использование `+ipv4.addresses` безопаснее, чтобы не затронуть DHCP-конфигурацию.
-
Проверьте, что IP-адреса добавились в конфигурацию соединения:
nmcli connection show ens3
Ищите параметр `ipv4.addresses:`. Он должен содержать список IP-адресов.
-
Переактивируйте соединение, чтобы изменения применились:
sudo nmcli connection down ens3
sudo nmcli connection up ens3
Или, как альтернатива, можно просто перезапустить NetworkManager, но переактивация соединения более "мягкая": `sudo systemctl restart NetworkManager` (менее предпочтительно, если можно обойтись)
-
Финальная проверка:
ip addr show ens3
Все IP-адреса (основной, полученный по DHCP, и три дополнительных) должны теперь отображаться. Также проверьте доступность сайтов на этих IP.
Этот подход обеспечит корректную и устойчивую конфигурацию сети на вашей CentOS 9.