LINUX.ORG.RU

После смены mac eth0 перестаёт работать


0

1

Два компьютера соединены сетевыми картами.
Назначаю первому и второму ip, netmask. Набираю на втором «ping <ip первого>» — всё отлично, есть результат.

Лезу в консоль первого:

ifconfig eth0 down
ifconfig eth0 hw ether 00:11:22:33:44:55
ifconfig eth0 <ip> netmask <netmask>

Смотрю вывод ifconfig — всё как просил: мак сменился, настройки те же. Но только пинги теперь не доходят. Либо пишет «Destination Host Unreachable», либо ping просто молчит, а после ^C заявляет, что потерял 100% пакетов.

Возвращаю, как было:

ifconfig eth0 down
ifconfig eth0 hw ether <настоящий адрес железяки>
ifconfig eth0 <ip> netmask <netmask>

— и тут же пинги начинают приходить.

А вот если на втором мак поменять — это не мешает работе, пингуется.

Почему так может быть? И можно ли как-нибудь поменять мак на первом?

На первом ubuntu 11.04, на втором ubuntu 11.10.

★★

Попробуйте в консоли на втором сервере после смены MAC на первом, но перед самим ping выполнить команду arp -d ип_первого

gibbon
()

Перед установкой соединения с хостом и началом отправки пакетов происходит определением физического адреса сетевой карты (мак адреса) заместо ip адреса и уже обмен пакетами происходит не по ip адресу а по mac адресу.

В случае с ping отправляется широковещательный запрос в подсеть, определяющуюся маской сети, затем, если хост находится в вашей подсети, заместо ip адреса приходит ответ, содержащий mac адрес, это означает, что хост доступен и начинается обмен пакетами уже. mac адрес также заносится в специальную таблицу, в которой хранятся соответствия пар ip адрес mac адрес.

mac адреса в ней хранятся некоторое время, вследствие выставления другому mac адресу такой же ip адрес система смотрит ARP таблицу и видит, что запись для этого ip адреса уже есть, берёт из неё mac адрес и отправляет пакеты на него, но вы его сменили уже.

Нужно либо подождать пока очиститься ARP таблица, либо очистить её вручную.

Посмотреть ARP таблицу можно так:

# /sbin/arp

Очистить так:

ip neigh flush all

Должен стоять пакет iproute2.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Спасибо за пояснения.

Должен стоять пакет iproute2.

Такого в репозитории нет, установлен iproute.

Устанавливаю на первом мак 00:11:22:33:44:55. ifconfig на первом подтверждает — HWaddr 00:11:22:33:44:55

Запускаю arp на втором, там одна запись:

Address <ip первого>
HWtype <пусто>
HWaddress (incomplete)
Flags Mask <пусто>
Iface eth0

Жду несколько минут, запускаю arp повторно — результат тот же.

Запускаю на втором пинг до первого, жду пару минут, обрываю (он теряет 100%).

Запускаю arp опять — уже что-то видно:

Address <ip первого>
HWtype ether
HWaddress 00:11:22:33:44:55
Flags Mask C
Iface eth0

Но пинги после этого всё равно не доходят. Потери 100%.

arp на первом при этом сперва не выдаёт ничего. Потом, после попытки послать пинг с первого ПК второму и 100% потерь, появляется запись:

Address <имя первого компьютера>.local
HWtype <пусто>
HWaddress (incomplete)
Flags Mask <пусто>
Iface eth0

Ну и дальше пинг на первом продолжает терять пакеты и заявлять, что «Destination Host Unreachable»

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Что за мак адреса такие левые, выставляете нормальные.

Эту команду делали на втором ПК, с которого пингуете, после смены мак адреса на первом и высталения таково же ip адреса, что и раньше?

ip neigh flush all
kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Что за мак адреса такие левые, выставляете нормальные.

Разные ставил, результат один. Если такой адрес выставить на втором, а первый ПК не трогать — всё работает.

Эту команду делали на втором ПК...

Делал.

На втором ПК arp выдаёт ровно одну запись — с тем адресом, который я назначил первому:

Address <ip первого>
HWtype ether
HWaddress 00:11:22:33:44:55
Flags Mask C
Iface eth0

На первом ПК arp не показывает записи с ip второго ПК. Либо пусто, либо чушь какая-то (см выше).

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Машины реальные или виртуальные ?

Возьмите за основу мак адрес от реальной сетевой карты и измените в нём один символ (разряд), что-то такого вида:

hwaddr: 00:1e:8c:48:ed:b1

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Машины реальные или виртуальные ?

Реальные.

Возьмите за основу мак адрес от реальной сетевой карты

Поменял последние два символа у реального адреса этой карты.

На втором apr показал этот новый адрес (единственная запись). Пинги со второго на первый не идут.

На первом, как и раньше, arp выдаёт пустоту.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Внезапно, arp на втором выдаёт что-то новое:

ubuntu-156.local ether <новый адрес, производный от настоящего> C eth0

или так:

ubuntu-156.local <пусто> (incomplete) <пусто> eth0

вот уже и ip адрес пропал, ё-моё.

fffgh ★★
() автор топика
Ответ на: комментарий от kostik87

arping <ip_address> -I eth0

На втором? Сперва очистил, «ip neigh flush all». Потом запустил пинг — теперь arp показывает новый мак, но с «ubuntu-156.local» вместо адреса. Потом эту команду запустил, вывод:

Unicast reply from <ip_address> [тот самый мак] 0.821ms

и висит. Оборвал — дописала:

Sent 185 probes (1 broadcast(s))
Received 1 response(s)

Пинги всё ещё не идут.

Волнует первый ПК — почему у него apr ничего не показывает?

fffgh ★★
() автор топика
Ответ на: комментарий от kostik87

192.168.0.1, 192.168.0.2. 255.255.255.0

Ещё раз обращаю внимание: как только на первом возвращаю «настоящий» мак — сразу всё работает.

Кстати, когда всё работает (с изначальным маком на первом) arp на обоих тоже выдёт записи не с ip, а с «что-то-там.local».

fffgh ★★
() автор топика
Ответ на: комментарий от kostik87

ПК соединены напрямую

Напрямую.

fffgh ★★
() автор топика

Встречался я с такой проблемой. Зависит от железа. Т.е. сетевушка хотела работать только со своим родным маком.

segfault ★★★★★
()

Нашёл тред про смену мак-адреса на такой же карте (Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller):

Проблема с MAC адресом сетевой

Там проблему решили, но конфиги правили в RedHat Ent5.2. У меня не все упомянутые файлы присутствуют.

Кто-нибудь может объяснить, чего они сделали, и как это повторить в ubuntu?

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

В смысле — эффект тот же. Не пингуется.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

В том топике про RHEL 5.2 проблема была в том, что скрипт активации интерфейсе (ifup eth0) проверял MAC-адрес сетёвки и не хотел её «поднимать». У вас проблема в чём-то другом.

Пропробуйте менять адрес с помощью команды ip:

ip link set eth0 down

ip link set eth0 address 00:11:22:33:44:55

ip link set eth0 up

При этом на втором компьютере запустите arping первого и смотрите есть ли ответы, можно ещё попрбовать запускать arping с опцией "-b", чтобы использовались только broadcast запросы.

Посмотрите состояние сетёвки после смены MAC-адреса командой:

ip addr show dev eth0

может у сетёвки не будет флага UP.

P.S. У команды arp есть флаг "-n", чтобы выдавть только ip-адреса, а не всякие там ubuntu-156.local.

mky ★★★★★
()
Ответ на: комментарий от mky

Пропробуйте менять адрес с помощью команды ip:

Выполнил эти команды + через ifconfig назначил айпи и маску.

При этом на втором компьютере запустите arping первого и смотрите есть ли ответы

Есть ответы. А вот если arping на первом запустить (том, на котором мак меняю), то ответов от второго нет. И с "-b", и без неё.

может у сетёвки не будет флага UP.

Есть.

# ip addr show dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisk pfifo_fast state UP qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global eth0
inet6 fe80::211:22ff:fe33:4455/64 scope link
valid_lft forever preferred_lft forever

Позапускал «arp -n» на обоих. На этот раз оба видят друг друга. И айпи нужный, и мак правильный.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Позапускал «arp -n» на обоих. На этот раз оба видят друг друга.

И при этом ping не работает?

А вот если arping на первом запустить

Arping какого ip-адреса --- первого или второго компьютера?

На первом должно работать «arping 192.168.0.2 -I eth0», на втором «arping 192.168.0.1 -I eth0». Если один из этих arping-ов не работает (даже с "-b"), то вобще не понятно, как появилась нужная запись в выводе команды arp.

mky ★★★★★
()
Ответ на: комментарий от mky

На этот раз оба видят друг друга.

И при этом ping не работает?

Да. Не работает.

На первом должно работать «arping 192.168.0.2 -I eth0»,

Это не работало.

на втором «arping 192.168.0.1 -I eth0».

Это работало.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

как только на первом возвращаю «настоящий» мак — сразу всё работает.

дай погадаю! на втором фильтрация по маку! :-D

aol ★★★★★
()
Ответ на: комментарий от mky

Проверил ещё раз.

На первом:

ip link set eth0 down

ip link set eth0 address 00:11:22:33:44:55

ip link set eth0 up

ifconfig eth0 192.168.0.1 netmask 255.255.255.0

потом кабель в сетевую карту втыкаю.


На втором:

# arping 192.168.0.1 -I eth0 -b
ARPING 192.168.0.1 from 192.168.0.2 eth0
и дальше сколько запросов — столько и ответов. т.е. работает.


На первом:

# arping 192.168.0.2 -I eth0 -b
0 responses

без -b то же самое.



После запуска arping на втором «arp -n» на каждом выдаёт запись с айпи и мак-адресом соседа.

ping так и не работает.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Когда на первом запукаете arping попробуйте на неё же в другом терминале запустить «tcpdump -n -nn -i eth0». И tcpdump (точно такой же командой) на втором компьютере. Там дожны быть arp-запросы и, по идее, должны быть arp-ответы. Если на втором компьютере tcpdump покажет только arp-запросы, без ответов, значит что-то со вторым компьютером.

И для смены mac-адреса не нужно выдёргивать/вставлять кабель.

mky ★★★★★
()
Ответ на: комментарий от mky

Внезапно, после запуска «tcpdump -n -nn -i eth0» всё заработало. И apring с первого до второго достучался, и пинги идут.

Ничего не понимаю.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Закономерность следующая: как только на первом запускаю «tcpdump -n -nn -i eth0» — сеть сразу начинает работать. arping и ping на первом работают, вижу с первого расшаренные папки на втором и тд.

Как только в окошке с запущенным tcpdump жму ^C — сразу всё пропадает.

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

tcpdump переводит карточку в promisc-режим. В этом режиме карточка принимает все Ethernet-пакеты (с любыми MAC-адресами). В обычном режиме карточка принимает только пакеты, адресованные персонально ей, с её MAC-адресом.

Видимо, ваша сетевая карточка, либо не правильно перепрограммируется ядром Линукса, либо в ней это реализовано как-то аппаратно, но независимо от назначенного ей MAC-адреса карточка принимает только пакеты, адресованные на её исходный (родной) MAC-адрес.

Если очень нужно чтобы карточка работала с неродным MAC-адресом, то держите её в promisc-режиме. ИМХО, от того, что карточка будет в promisc-режиме особого вреда производительности не будет, так как строятся на основе свичёй и в нормальном режиме на карточки не приходит «чужие» пакеты. Вроде, команда «ip» умела выставлять этот режим (флаг PROMISC), поэтому не нужно будет держать tcpdump запущеным. Попробуйте на первом компьютере после смены MAC-адреса сделать:

ip link set eth0 promisc on

mky ★★★★★
()
Ответ на: комментарий от mky

tcpdump переводит карточку в promisc-режим.

Да, в этом дело.

ip link set eth0 promisc on

Так работает.

fffgh ★★
() автор топика

В интернете предлагают для включения promiscuous mode дописать в /etc/network/interfaces к конфигу интерфеса (eth0)

up ifconfig eth0 promisc

fffgh ★★
() автор топика
Ответ на: комментарий от mky

Ещё вопрос.

Теперь связь есть, но если выдернуть шнур, то у первого, проблемного, ПК у интерфейса eth0 пропадают ip и маска, назначенные ранее. Втыкаешь кабель обратно — а всё равно сети нет, надо интерфейс заново поднимать. Прописывал в /etc/network/interfaces, теперь вызываю «ifdown eth0» и «ifup eth0». Если айпи через ifconfig назначаю — тоже пропадает.

У второго при этом ничего не пропадает.

На первом в /etc/network/interfaces такое:

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
hwaddress ether 00:11:22:33:44:55
up ifconfig eth0 promisc

Ну или просто «ifconfig eth0 192.168.0.1 netmask 255.255.255.0».

Как можно это победить?

fffgh ★★
() автор топика
Ответ на: комментарий от fffgh

Не сталкивался с тем, чтобы ip-адрес интерфейса исчезал при манипуляции с кабелем. Возможно, что это делает networkmanager.

mky ★★★★★
()
Ответ на: комментарий от mky

Не сталкивался с тем, чтобы ip-адрес интерфейса исчезал при манипуляции с кабелем. Возможно, что это делает networkmanager.

Да, после удаления пакета network-manager проблема исчезла.

fffgh ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.