Вопрос или проблема
Допустим, у меня есть сервер с двумя сетевыми картами.
eno1: 192.168.1.100/24
eno2: 169.254.2.1/16
Трафик на/с NIC 1 не вызывает проблем. Я могу получить доступ по SSH, отправить ping и т.д. … Проблем нет.
Однако после выполнения netplan generate && netplan apply
на Ubuntu 24, или даже после выполнения ifconfig eno2 169.254.2.1 netmask 255.255.0.0 up
, когда я запускаю tcpdump -i eno2
, я вижу IP-адрес с eno1
, выходящий через eno2
, вместо адреса .2.1
До:
22:39:41.937488 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 169.254.2.1 > 169.254.2.2: ICMP echo request, id 27057, seq 1, length 64
22:39:41.938469 00:11:22:33:44:55 > aa:bb:cc:dd:ee:ff, ethertype IPv4 (0x0800), length 98: 169.254.2.2 > 169.254.2.1: ICMP echo reply, id 27057, seq 1, length 64
22:39:42.937626 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 169.254.2.1 > 169.254.2.2: ICMP echo request, id 27057, seq 2, length 64
22:39:42.938563 00:11:22:33:44:55 > aa:bb:cc:dd:ee:ff, ethertype IPv4 (0x0800), length 98: 169.254.2.2 > 169.254.2.1: ICMP echo reply, id 27057, seq 2, length 64
22:39:43.964645 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 169.254.2.1 > 169.254.2.2: ICMP echo request, id 27057, seq 3, length 64
22:39:43.965546 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 169.254.2.2 > 169.254.2.1: ICMP echo reply, id 27057, seq 3, length 64
После:
22:43:37.872518 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 192.168.1.100 > 169.254.2.2: ICMP echo request, id 29192, seq 1, length 64
22:43:38.908604 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 192.168.1.100 > 169.254.2.2: ICMP echo request, id 29192, seq 2, length 64
22:43:39.932634 aa:bb:cc:dd:ee:ff > 00:11:22:33:44:55, ethertype IPv4 (0x0800), length 98: 192.168.1.100 > 169.254.2.2: ICMP echo request, id 29192, seq 3, length 64
Существует небольшая вероятность, что после выполнения ifconfig down
и ifconfig up
это может вдруг заработать снова, но я не могу найти причину. Нет маршрутизатора, это чисто eno2
, разговаривающее с другим устройством, непосредственно к нему подключенным, и это не связано с маршрутом по умолчанию, так как я вижу, что трафик выходит через eno2
, а не eno1
.
Статус netplan
не показывает адрес 192.x
на 2-й сетевой карте, и когда я соединяю 2 машины, одну с Ubuntu 24 и одну с Ubuntu 20, машина с Ubuntu 20 не имеет проблем с ping’ованием машины с Ubuntu 24, но машина с Ubuntu 24 показывает свой адрес eno1
в исходящих пакетах, вместо адреса eno2
. Обе машины имеют отключенный UFW и сброшенные iptables.
Ответ или решение
Проблема: Исходящие пакеты с неправильным IP-адресом на Ubuntu 24
Итак, мы сталкиваемся с проблемой, когда исходящие пакеты из интерфейса eno2
сервера с двумя сетевыми карточками (NIC) имеют адрес источника, соответствующий интерфейсу eno1
, а не ожидаемому адресу 169.254.2.1
. Это поведение наблюдается после применения конфигураций с помощью netplan
или ручной настройки с использованием команды ifconfig
. Рассмотрим возможные причины возникновения этой проблемы.
1. Неправильная маршрутизация
При наличии нескольких сетевых интерфейсов важно понять, как работает маршрутизация. В Ubuntu для маршрутизации пакетов используется таблица маршрутизации. Если маршруты настроены неправильно, система может отправлять пакеты с использованием IP-адреса неправильного интерфейса. Для проверки маршрутов выполните команду:
ip route show
Убедитесь, что у вас корректно настроены маршруты на eno2
. Пакеты для адреса в диапазоне 169.254.0.0/16
должны направляться через eno2
.
2. Политики выбора интерфейса
Наиболее вероятной причиной может быть то, что система выбирает, какой интерфейс использовать на основе правил. В Linux это контролируется через policy routing
, где можно настроить правила управления трафиком, позволяющие определять, какой интерфейс использовать в зависимости от источника или назначения трафика. Если есть установка политик, которые перенаправляют трафик, это может приводить к исходящим пакетам с неправильным IP-адресом. Проверьте существующие правила с помощью команды:
ip rule show
3. Настройки Netplan
Конфигурация в netplan
может быть неправильно настроена. Обратите внимание на то, что Netplan создает конфигурации, которые могут переопределять настройки, если они конфликтуют. Убедитесь, что конфигурация для eno2
определена верно и не содержит пересекающихся параметров, особенно в отношении маршрутов и DHCP. Проверьте файл конфигурации в /etc/netplan/
и убедитесь, что он выглядит следующим образом для eno2
:
network:
version: 2
ethernets:
eno1:
addresses:
- 192.168.1.100/24
eno2:
addresses:
- 169.254.2.1/16
После внесения изменений выполните netplan apply
и проверьте результаты.
4. Программное обеспечение брандмауэра или приложение
Хотя вы указали, что UFW отключен и iptables
сброшены, убедитесь, что в системе нет других механизмов фильтрации или контроля, включая nftables
, которые могли бы влиять на маршрутизацию пакетов. Выполните следующие команды для проверки:
nft list ruleset
5. Перезапуск интерфейсов
Иногда простая ошибка или временный глюк могут вызывать такую проблему. Перезапуск интерфейсов может помочь восстановить нормальные параметры. Попробуйте:
sudo ifconfig eno2 down
sudo ifconfig eno2 up
или балайте следующее:
sudo ip link set eno2 down
sudo ip link set eno2 up
Заключение
Таким образом, чтобы диагностировать и устранить проблему с ненадлежащим источником IP-адреса в Ubuntu 24, нужно проверять маршрутизацию, настройки Netplan, возможные политики маршрутизации, правила брандмауэра и состояние сетевых интерфейсов. Эти шаги помогут выявить причину проблемы и избавиться от некорректного поведения, связанного с выходящими пакетами. Убедитесь в правильности каждой настройки, приводящей к ожидаемому исходящему IP-адресу для диагноза сетевой конфигурации.