Я устанавливаю коробку SUSE 11 с двумя сетевыми адаптерами:
eth0 - 192.168.10.150/24 - 00.0C.29.DC.10.CA (MAC) eth1 - 192.168.10.151/24 - 00.0C.29.DC.10.DE (MAC)
Мне нужны оба в одной подсети, поскольку они будут подключены к другому устройству (хранилищу) точка-точка. Но я кое-что нашел во время установки; выполняя ARP с рабочей станции, я обнаружил следующее поведение
[root@workstation ~]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.10.151 ether 00:0C:29:DC:10:CA C eth0 192.168.10.150 ether 00:0C:29:DC:10:CA C eth0
как вы видите это похоже на eth0
получает все запросы. Фактически, если я отключу кабель от eth1
IP .151
будет по-прежнему доступен для проверки связи; чего я не хочу. И если я отключу кабель от eth0
ни один из IP .150 - .151
пингуются, когда .151
все еще должен быть доступен.
Почему это происходит? я нуждаюсь eth0
привязать только к .150
и eth1
привязать только к .151
. Похоже, что IP-адреса принадлежат eth0.
Это не работает:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
это тоже
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
Какие-либо предложения?
Я согласен с ответом womble, но отвечу прямо на ваш вопрос.
Первый
Вы упомянули 2 настройки, которые вам нужны.
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
Однако после установки этого вы должны принудительно обновить ARP. Поскольку вы только что включили эти параметры, на всех удаленных узлах по-прежнему кэшируются старые записи ARP, и это будет выглядеть так, как будто они ничего не делали.
arping -U -c 2 -I eth0 192.168.10.150
arping -U -c 2 -I eth1 192.168.10.151
Это отправит широковещательную рассылку ARP для каждого IP-адреса, обновляющего кеш любых соседей.
Второй
Вам необходимо настроить правила маршрутизации на основе источника.
Это становится немного сложнее, поскольку правила маршрутизации устанавливаются автоматически, когда вы переводите интерфейс в оперативный режим. Вам нужно отменить эти правила.
ip route add 192.168.10.0/24 dev eth1 src 192.168.10.151 table 151
ip rule add from 192.168.10.151/32 lookup table 151 prio 10000
ip route del 192.168.10.0/24 dev eth1 src 192.168.10.151 table main
Первая строка создает новое правило маршрутизации для маршрутизации трафика через правильный интерфейс для 192.168.10.151. Вторая строка сообщает ядру использовать это правило маршрутизации, если исходный IP-адрес 192.168.10.151 (этот поиск происходит перед 'основной' таблицей из-за нашего prio
ритуальность, которую мы ему присвоили). Третья строка удаляет старое правило из «основной» таблицы маршрутизации, поэтому трафик, идущий через другой интерфейс, не использует его случайно.
Теперь вам нужно будет настроить его так, чтобы он работал, когда ваши интерфейсы будут подключены к сети. Это зависит от дистрибутива, поэтому я не могу сказать вам, как это сделать.
Третий
вещи должен работать без этого, но вы также можете добавить в sysctl следующее:
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth1.rp_filter=0
Это не позволит ядру отбрасывать любой трафик, поступающий в неправильный интерфейс.
(ОБНОВЛЕНИЕ: обратите внимание, что это rp_filter
не arp_filter
. Я думаю, это настройка, которую вы хотели сказать, что уже пробовали)
«Мне нужны оба в одной подсети, поскольку они будут подключены к другому устройству (хранилищу) точка-точка».
Ваше объяснение не имеет смысла. Если они оба находятся в одной подсети, то по определению это не может быть двухточечная связь. Если у вас есть одна и та же IP-подсеть, настроенная на двух разных широковещательных доменах ... ну, вы облажались. Исправьте это, и все ваши проблемы исчезнут.