Для локальной сети вместо коммутатора я построил топологию, в которой каждая машина подключена к маршрутизатору. Каждому хосту назначается IP-адрес от 10/8. Вот подробности интерфейса:
Допустим, я пингую 10.16.0.3 с этого хоста. Таблица маршрутизации 10.16.0.2 была настроена на использование маршрутизатора (10.16.0.1) в качестве шлюза по умолчанию. Но поскольку IP-адрес назначения (10.16.0.3) находится в той же подсети, он отправляет широковещательное сообщение ARP. Я хочу отключить это поведение отправки широковещательной передачи ARP и вместо этого заставить его использовать таблицу маршрутизации. Как мне этого добиться?
Этого можно добиться двумя способами. Первое очень ненормально и может вызвать странности, поэтому второе лучше.
Типичная таблица маршрутизации выглядит примерно так:
% ip route
10.23.11.0/24 dev wlan0 proto kernel scope link src 10.23.11.209
default via 10.23.11.1 dev wlan0 proto static
Это сообщает ядру, что пункты назначения в 10.23.11.0/24 напрямую подключены к wlan0, а все остальное должно проходить через маршрутизатор в 10.23.11.1. Это первый маршрут, который сообщает ядру выполнить ARP-запрос и напрямую отправить пакет. Если вы его удалите, то все должно идти через роутер. Однако этот маршрут настроен по умолчанию, поэтому вам нужно явно его где-то удалить. Ваша конечная таблица маршрутизации должна выглядеть примерно так:
% ip route
default via 10.23.11.1 dev wlan0 proto static
Лучше всего разместить каждую машину в отдельной подсети, чтобы каждая подсеть была доменом Ethernet (как обычно и должно быть). Вы можете сделать это, выделив каждой машине подсеть / 30, а маршрутизатор будет использовать один из этих IP-адресов. Ваша сеть будет выглядеть примерно так:
(machine1) 10.0.0.2/30 <-------> 10.0.0.1/30 (router) 10.0.0.5/30 <--------> 10.0.0.6/30 (machine2)