Это продолжение этот вопрос Я видел на SuperUser, на который не было дано ответа.
Пользователь удалил второй маршрут в своей таблице маршрутизации,
# ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 scope link
оставив только свой дефолт. Он обнаружил, что может ping
другие компьютеры в сети, но они не могли ping
верните компьютер с неполной таблицей маршрутизации.
Я исследовал это в реальной сети (в отличие от исходной виртуальной сети) с помощью tcpdump
: оказывается, что неполный ПК отправляет ответ на пинг, но он не доходит до исходного исправного компьютера.
Итак, я попытался открыть сеанс ssh в обоих направлениях, и теперь обе попытки терпят неудачу. Это запись Wireshark о неудачном соединении:
Наличие PUSH (PSH / ACK) и большое количество повторных передач дают понять, что один из компьютеров не может связаться с другим.
Кто-нибудь может подробно объяснить почему?
[@moderators ecc, это слишком долго в комментариях, поэтому я готов поспорить на свой ответ. Я обновлю это]
Не имея возможности полностью протестировать его прямо сейчас, я попробую отгадать. Отсутствие маршрута в подсети eth0 означает, что все должно проходить через шлюз по умолчанию.
На самом деле я пробовал на своей машине, откуда я могу пинговать только другой хост и шлюз в той же подсети, но то, что я вижу, похоже, соответствует тому, что я предполагал.
Пакеты с моей машины (на которой отсутствует маршрут для локальной подсети) идут с IP-адресом, который я проверяю, но с arp-адресом шлюза. Проверьте свой анализ адресов arp в wirehark, чтобы у нас было больше данных.
И проведите чистый тест, очистив кеш ARP, и опубликуйте здесь оба своих вывода.
Я думаю, что происходит следующее: маршрут на IP-адресе клиента (без подсети) необходим для того, чтобы сетевой стек знал, где свободно «arp», поскольку он доступен без шлюзов.
Вытащив это, единственный возможный маршрут - это GW по умолчанию, и я полагаю, что на этом компьютере (без подсети) есть только один сетевой интерфейс.
Теперь, учитывая, что вы отправляете пакеты arp на шлюз, это означает отправку на него пакетов с адресом arp, предназначенных для клиента с другим IP (целью) в той же подсети.
GW пересылает их по ARP-адресу цели, цель, имеющая правильно настроенный локальный маршрут, отвечает отправляющему хосту (тому, который не имеет подсети).
Коротко об ассиметричной маршрутизации.
Первый хост, отправитель, не имеющий правильного маршрута локальной подсети, видит это как искаженный пакет (чужой), поскольку он отправил его на адрес ARP шлюза.
[/ я надеюсь, что никакой сетевой парень не ударит меня большой палкой за мои возможные ошибки]
Я полагаю, вы забыли обратный маршрут на другом сайте. Компьютер на другой стороне должен установить правильный шлюз для доступа к сети, вместо этого используйте gw по умолчанию.