Глюки после переезда

Автор АЛьФ, 27 февраля 2025, 16:53

« назад - далее »

АЛьФ

Нужна помощь.

Как вы заметили, сегодня форум знатно колбасит. Связано это с моими попытками разобраться с ошибкой нового сервера.
На новом сервере две сетевые карты, плюс WiFi. По воздуху я пока подключение не настраивал.
Одну сетевую связал в мост и по нему идет общение виртуальной машины с внешним миром.
Вторую сетевую использую, чтобы подключаться напрямую к физическому серверу.
Обе карты получают адреса с роутера по DHCP. На каждый MAC настроен свой адрес в роутере.
Вроде все работает, но вот роутер (Keenetic HOPPER) ругается на эти адреса (то на один, то на второй), что на каждом сидит два IP:

Hotspot::Discovery::Explorer: "Bridge0": network conflict: hosts 84:47:09:хх:хх:хх and 62:9a:57:хх:хх:хх have the same IPv4 address 192.168.1.21.

84:47:09:хх:хх:хх - это MAC сетевухи, которую использую для доступа к физическому серверу.
62:9a:57:хх:хх:хх - это MAC моста, через который работает виртуалка.

При всем этом подключение к физическому серверу периодически пропадает. Но подключение к виртуалке работает исправно. Если подключиться к виртуалке под SSH, а из нее уже выйти на физическую машину, то можно нормально работать с физической.

Весь день сегодня пытался решить проблему. Прописывал статические маршруты:

   echo "1 hosttable" | sudo tee -a /etc/iproute2/rt_tables
   echo "2 bridgetable" | sudo tee -a /etc/iproute2/rt_tables

   sudo ip route add default dev enp1s0 table hosttable
   sudo ip route add default dev br0 table bridgetable

   sudo ip rule add from 192.168.1.22 table hosttable
   sudo ip rule add from 192.168.1.21 table bridgetable

Поведение не меняется.

Ставил статические адреса на карту и мост. Стало сильно хуже и с трудом вообще восстановил доступ к серверу удаленно.

Может что-нибудь посоветуете? Может я вообще не в ту сторону копаю?
Причем в итоге хотелось бы еще и третье соединение добавить - по WiFi.

Arbuz

Хм.
Два клиента dhcp это две физ карты. Третий это виртуальный адаптер гостя мостом со своим виртуальным mac адресом.
Выведи все адреса из основного пула dhcp (выше или ниже). т.е. назначь им в кинетике адреса вне автоматического диапазона. Но в той же подсети, конечно.

ЗЫ: Так-то работает заметно шустрее.

Arbuz

Не помню, что там у тебя, network manager...

что в  файле /etc/network/interfaces
вывод nmcli device
ip addr show
ip route show
 на хосте

ЗЫ: сегодня я уже не посмотрю

АЛьФ

Цитата: Arbuz от 27 февраля 2025, 17:39Хм.
Два клиента dhcp это две физ карты. Третий это виртуальный адаптер гостя мостом со своим виртуальным mac адресом.
Выведи все адреса из основного пула dhcp (выше или ниже). т.е. назначь им в кинетике адреса вне автоматического диапазона. Но в той же подсети, конечно.

ЗЫ: Так-то работает заметно шустрее.

У меня изначально так и настроено, что назначенные адреса вне автоматического выделения. DHCP выдает с 30 по 55.

АЛьФ

alf@serv:~$ nmcli device
DEVICE            TYPE      STATE                CONNECTION
enp1s0            ethernet  подключено            Адаптер 1Gb
br0                bridge    подключено            bridge-br0
enp2s0            ethernet  подключено            bridge-slave-enp2s0
lo                loopback  подключено (внешнее)  lo
virbr0            bridge    подключено (внешнее)  virbr0
vnet0              tun      подключено (внешнее)  vnet0
wlp0s20f3          wifi      отключено            --
p2p-dev-wlp0s20f3  wifi-p2p  отключено            --

alf@serv:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
      valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 84:47:09:37:46:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global dynamic noprefixroute enp1s0
      valid_lft 14593sec preferred_lft 14593sec
    inet6 2a05:3580:e912:9800:ff0d:6410:f0e1:f7e2/64 scope global temporary dynamic
      valid_lft 9554sec preferred_lft 5504sec
    inet6 2a05:3580:e912:9800:d60c:bcfc:1d87:a6b0/64 scope global dynamic mngtmpaddr noprefixroute
      valid_lft 9554sec preferred_lft 5504sec
    inet6 fe80::5ee4:ee0f:f3dd:f6d9/64 scope link noprefixroute
      valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 84:47:09:37:46:b9 brd ff:ff:ff:ff:ff:ff
4: wlp0s20f3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether a0:02:a5:f2:ca:56 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 62:9a:57:4c:a3:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.21/24 brd 192.168.1.255 scope global dynamic noprefixroute br0
      valid_lft 14594sec preferred_lft 14594sec
    inet6 2a05:3580:e912:9800:5240:24dd:5f3a:c435/64 scope global temporary dynamic
      valid_lft 9554sec preferred_lft 5504sec
    inet6 2a05:3580:e912:9800:4b42:2e01:247c:aef7/64 scope global dynamic mngtmpaddr noprefixroute
      valid_lft 9554sec preferred_lft 5504sec
    inet6 fe80::477:d01b:9608:6da6/64 scope link noprefixroute
      valid_lft forever preferred_lft forever
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:bc:b0:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
      valid_lft forever preferred_lft forever
7: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN group default qlen 1000
    link/ether fe:71:bc:5c:00:51 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc71:bcff:fe5c:51/64 scope link
      valid_lft forever preferred_lft forever

alf@serv:~$ ip route show
default via 192.168.1.1 dev enp1s0 proto dhcp src 192.168.1.22 metric 100
default via 192.168.1.1 dev br0 proto dhcp src 192.168.1.21 metric 425
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.22 metric 100
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.21 metric 425
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

АЛьФ

Вот такие ошибки идут одна за другой:
Фев 27 20:11:16
ndm
Hotspot::Discovery::Explorer: "Bridge0": network conflict: hosts 84:47:09:37:46:b8 and 62:9a:57:4c:a3:80 have the same IPv4 address 192.168.1.21.
Фев 27 20:11:16
ndm
Hotspot::Discovery::Explorer: "Bridge0": network conflict: hosts 62:9a:57:4c:a3:80 and 84:47:09:37:46:b8 have the same IPv4 address 192.168.1.22.

Т.е. роутер считает, что два разных мака висят на двух разных ипах одновременно.

АЛьФ

В расширенном логе роутера попались такие вот строки (вырезал то, где упоминаются нужные маки):

[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: neighbour table dump: 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 4: MAC: 84:47:09:37:46:b8, via: 84:47:09:37:46:b8, IPv4: 192.168.1.22, interface: Bridge0, FirstSeen: 33544, LastSeen: 2, active. 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 7: MAC: 62:9a:57:4c:a3:80, via: 62:9a:57:4c:a3:80, interface: Bridge0, FirstSeen: 33543, LastSeen: 33543. 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 8: MAC: 62:9a:57:4c:a3:80, via: 62:9a:57:4c:a3:80, IPv4: 192.168.1.21, interface: Bridge0, FirstSeen: 33543, LastSeen: 2, active. 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 9: MAC: 84:47:09:37:46:b8, via: 84:47:09:37:46:b8, interface: Bridge0, FirstSeen: 33540, LastSeen: 33540. 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 22: MAC: 84:47:09:37:46:b8, via: 84:47:09:37:46:b8, IPv4: 192.168.1.21, interface: Bridge0, FirstSeen: 33492, LastSeen: 178, expired. 
[I] Feb 27 20:37:31 ndm: Network::NeighbourTable: ID: 27: MAC: 62:9a:57:4c:a3:80, via: 62:9a:57:4c:a3:80, IPv4: 192.168.1.22, interface: Bridge0, FirstSeen: 31400, LastSeen: 237, expired.

Последние две строки вызывают недоумение.

АЛьФ

Продолжаю копать. Отталкиваясь от расширенного лога, решил проверить что возвращает сервер по своим айпишникам на ARP-запрос. И получил...

c:\TEMP>arp-ping 192.168.1.22
Reply that 62:9A:57:4C:A3:80 is 192.168.1.22 in 20.046ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.22 in 15.263ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.22 in 16.083ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.22 in 144.236ms

Ping statistics for 192.168.1.22/arp
     4 probes sent.
     4 successful, 0 failed.
Approximate trip times in milli-seconds:
     Minimum = 15.263ms, Maximum = 144.236ms, Average = 48.907ms

c:\TEMP>arp-ping 192.168.1.21
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 21.684ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 16.085ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 142.616ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 15.233ms

Ping statistics for 192.168.1.21/arp
     4 probes sent.
     4 successful, 0 failed.
Approximate trip times in milli-seconds:
     Minimum = 15.233ms, Maximum = 142.616ms, Average = 48.904ms

С разных айпишников один мак...

АЛьФ

Повторил пару раз и выдало прекрасное:

c:\TEMP>arp-ping 192.168.1.21
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 137.404ms
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 15.113ms
Reply that 84:47:09:37:46:B8 is 192.168.1.21 in 14.937ms -----   !!!!!!!!!!!!!
Reply that 62:9A:57:4C:A3:80 is 192.168.1.21 in 143.722ms

Т.е. на ARP запросы сервер возвращает разные маки с одного айпи.

АЛьФ

Похоже, что решение вот такое:

net.ipv4.conf.all.arp_ignore = 1

Завтра буду еще снаружи проверять помогло ли.

Нейросети - это все же мощная штука! Когда телефон угадывает куда я тычу своими корявыми пальцами и пишет правильные слова - это уже как-то привычно. Но когда чат на мои корявые вопросы корявыми пальцами выдает понятные инструкции с нужными командами - это... МОЩЬ!

АЛьФ

Проверил снаружи. Все замечательно работает.

Злоп

Замечательно выходит! Замечательно входит!

Arbuz

Эта проблема называется arp flux. Из коробки в линуксе стоит arp модель поведения host based, а надо interface based.

Ещё, по хорошему, чтобы исключить arp poisoning тебе надо установить net.ipv4.conf.all.arp_announce=1 (не 0)

Вот коротенько, на англ


АЛьФ

Цитата: Arbuz от 28 февраля 2025, 14:06Эта проблема называется arp flux. Из коробки в линуксе стоит arp модель поведения host based, а надо interface based.

Ещё, по хорошему, чтобы исключить arp poisoning тебе надо установить net.ipv4.conf.all.arp_announce=1 (не 0)

Вот коротенько, на англ



Спасибо, почитаю.