в случае с изображением 1 все узлы сети могут пропинговать друг друга, добавляя другой узел, как в случае с изображением 2, у меня возникают проблемы

Случай 1: СЛУЧАЙ 1 случай 2: случай 2

  • Машина h1 выступает в роли маршрутизатора с двумя сетевыми картами.
  • h1 подключен к h2 через переключатель,
  • H1 подключен к компьютеру H3 напрямую через порт Ethernet с помощью кросс-кабеля и
  • h3 подключен к h4 через переключатель.

Настройки на h1:

#ip addr add 172.16.192.1/22 dev eth0
#ip addr add 172.16.131.254/25 dev eth1
#ip forwarding is set to 1 in /etc/sysctl.conf

располагается на h2

#ip addr add 172.16.192.2/22 dev eth0
#ip route add 172.16.131.128/25 via 172.16.192.1

Настройки на h3

#ip addr add 172.16.131.130/25 dev eth1
#ip addr add 172.16.131.129/25 dev eth0
#ip route add 172.16.192.0/22 via 172.16.131.254

Настройки на h4 являются

#ip addr add 172.16.131.131/25 dev eth0
#ip route add 172.16.192.0/22 via 172.16.131.254

если взглянуть на картинки case1 и case2, то заметим, что в случае добавления двух узлов h4 выполнение этой машины h2 больше не может пинговать машину h3, но в случае 1 пинг был возможен.

Теперь, пожалуйста, не говорите мне, чтобы изменить топологию сети. Это должно быть именно так ... и условие состоит в том, что мост нельзя использовать!

Мне интересно, есть ли какой-то цикл, потому что в таблице маршрутизации h3 есть две записи в его собственной подсети через eth0 и eth1.

В любом случае, как я могу сделать так, чтобы h4 мог пинговать h2? с точно такой же настройкой?

1 ответ1

1

Там нет петли, совсем наоборот.

Первая проблема, когда у вас есть маршрутизатор "посередине" подсети, заключается в том, что соседние устройства не могут отправлять запросы ARP через него. В вашем случае h1 считает, что IP-адрес h4 является "локальным" для eth1 (потому что маска подсети говорит об этом), и делает для него запрос ARP, но запросы ARP не могут пересекать маршрутизаторы - и даже если бы они это сделали, результат был бы непригодным для использования. потому что пакеты к MAC h4 также не могли пересечь маршрутизатор.

(И если бы они могли пересечь маршрутизатор, то он больше не был бы маршрутизатором: он стал бы мостом. Вы сказали, что не хотите мост.)

Обычно, чтобы решить эту проблему, соединения h1 – h3 и h3 – sw – h4 должны быть разными подсетями.

Чтобы решить эту проблему без изменения подсетей, необходимо включить «прокси-ARP» на маршрутизаторе h3 посередине. Он будет отвечать на запросы ARP h1, предназначенные для h4, со своим собственным MAC-адресом (и будет делать то же самое с запросами ARP h4, предназначенными для h1).

Proxy-ARP - это встроенная функция ядра, но если она слишком ограничена или негибка, ее также может выполнить демон пользовательского пространства (parpd, parprouted).


Вторая проблема, когда у вас есть два маршрута для одной подсети, заключается в том, что ОС не знает, какой маршрут использовать, - она всегда выбирает один и тот же, независимо от того, за каким интерфейсом находится устройство. В вашем случае, скорее всего, ответы ping всегда проходят через eth0, хотя шлюз в направлении h2 находится на eth1.

Если вы заранее знаете, какие устройства на какой стороне, вы можете добавить для них более специфические статические маршруты (и удалить все маршруты, кроме одной):

# ip route del 172.16.131.128/25 dev eth0
# ip route add 172.16.131.131/32 dev eth0

(Вы можете упростить это, напрямую настроив IP-адрес eth0 как /32 вместо /25.)

Чтобы автоматизировать это, вы также можете использовать такие демоны, как "parprouted", которые выполняют проксирование ARP и автоматически добавляют маршруты хоста, соответствующие ответам ARP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .