Добрый день. Такая ситуация, никак не пойму, почему происходит такая ситуация.Имеется две линукс-машины. Настроены на одну сеть, все нормально, друг друга видят. Предположим, что машины имеют адреса 172.17.17.30 и 172.17.194.3
Далее делаем следующее:
На одной из машин делаем статический арп с заведомо НЕВЕРНОЙ записью. Вот как было:
linux_2 (172.17.194.3) ether 00:15:E9:40:0E:4C C eth0
Вот что делаем:
arp -s -i eth0 172.17.194.3 44:18:F3:98:DB:AD
linux_2 (172.17.194.3) ether 44:18:F3:98:DB:AD CM eth0
Все хорошо, в арп-таблице у нас теперь неверная запись. Проверяем пинг этой машины:
PING 172.17.194.3 (172.17.194.3) 56(84) bytes of data.
64 bytes from 172.17.194.3: icmp_seq=1 ttl=64 time=1.93 ms
64 bytes from 172.17.194.3: icmp_seq=2 ttl=64 time=0.566 ms
Пинги никуда не пропали. Лезу в тцпдамп, вот что вижу:
21:21:09.989628 IP 172.17.17.30 > 172.17.194.3: ICMP echo request, id 9264, seq 2, length 64
0x0000: 4418 f398 dbad 001a 9235 fafa 0800 4500 D........5....E.
0x0010: 0054 0000 4000 4001 0f65 ac11 111e ac11 .T..@.@..e......
0x0020: c203 0800 1c71 2430 0002 85f9 7f46 b819 .....q$0.....F..
0x0030: 0f00 0809 0a0b 0c0d 0e0f 1011 1213 1415 ................
0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 ...........!"#$%
0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 &'()*+,-./012345
21:21:09.990192 IP 172.17.194.3 > 172.17.17.30: ICMP echo reply, id 9264, seq 2, length 64
0x0000: 001a 9235 fafa 0015 e940 0e4c 0800 4500 ...5.....@.L..E.
0x0010: 0054 0004 4000 4001 0f61 ac11 c203 ac11 .T..@.@..a......
0x0020: 111e 0000 2471 2430 0002 85f9 7f46 b819 ....$q$0.....F..
0x0030: 0f00 0809 0a0b 0c0d 0e0f 1011 1213 1415 ................
0x0040: 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 ...........!"#$%
0x0050: 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 &'()*+,-./012345
Как видно из тцпдампа, пакеты уходят на НЕВЕРНЫЙ мак (0x0000: 4418 f398 dbad) соответственно с локальной таблицей арпов (что верно), удаленная машина переспрашивает арпом "у кого есть ИП 172.17.17.30" (если еще не закешировала запись), получает его мак и отвечает на него уже с верным сурсом и дестом.
Так вот вопрос - с чего вдруг удаленная машина принимает пакет с НЕ АДРЕСОВАННЫМ ей маком??? Отвечает-то нормально, т.е. берет смотрит арп-кеш, если там нет удаленного ИП - запрашивает и уже туда кидает пакет. Весь вопрос в том, почему пакет ПРИНЯТ и обработан, если НЕ адресован ЭТОЙ машине? Получается, линукс работает на чистом 3м уровне и на второй уровень ему вообще по барабану чтоли? Главное - чтобы ИП-адрес совпал и все? А как бы переключить его все же в режим работы 2го левела - когда машина принимает пакет, смотрит на дест мак и если не имеет такого мака у себя на интерфейсах - дропает пакет ДО просмотра содержимого заголовка 3го уровня? Заранее всем спасибо.