Как я могу пинговать через альтернативный шлюз?

19

В нашей сети есть два модема, каждый из которых скрыт за маршрутизатором. Основной маршрутизатор находится на 10.1.1.1, резервный маршрутизатор на 10.1.1.2, и оба настроены на подсеть 10.1.1.0/24. Оба маршрутизатора настроили свой шлюз на 192.168.0.1. Тем не менее, 192.168.0.1, который вы видите, если ваш шлюз 10.1.1.1, отличается от машины 192.168.0.1, которую вы видите, если ваш шлюз 10.1.1.2.

Мой Nagios сервер настроен соответственно:

auto eth0
iface eth0 inet static
address 10.1.1.10
netmask 255.255.255.0
gateway 10.1.1.1

Итак, чтобы быть ясно: здесь есть четыре шлюза. Маршрутизатор 1 (10.1.1.1) Маршрутизатор 2 (10.1.1.2) Модем 1 (192.168.0.1) Модем 2 (192.168.0.1)

Вот иллюстрация того, что я могу сделать вручную, чтобы проверить состояние двух модемов:

ping -c4 192.168.0.1 # Is Modem1 up? 
ip route add via 10.1.1.2
ip route change default via 10.1.1.2
ping -c4 192.168.0.1 # Is Modem2 up?
wget 192.168.0.1 # yields expected control webpage for Modem2
ip route change default via 10.1.1.1
ip route del default via 10.1.1.2
wget 192.168.0.1 # Connection refused; Modem1 has no web interface
ssh adminuser@192.168.0.1 # I can log in to Modem1 and check status

Я хотел бы как минимум, чтобы иметь возможность пинговать Modem2.

* Отредактировано для исправления моего отвратительного неправильного использования нотации CIDR и предоставления четких деталей. (Я не думаю, что это принадлежит суперпользователю.)

Люк Шлатер
источник
С какой IP-конфигурации вы инициируете пинг?

Ответы:

12

man ping

пинг [хоп ...] пункт назначения

Таким образом, вы можете указать в качестве параметра ping количество IP-адресов, разделенных пробелом. Последний адрес будет «проверен»; предыдущие параметры определяют маршрут, который должен пройти ping.

Итак, в вашем случае:

  • «ping 10.1.1.2 модем» для явного использования первого шлюза,
  • «ping 10.1.1.1 модем» для явного использования второго шлюза.

Если вы столкнулись с той же проблемой с Windows: ping /? -kэто вариант, который вы, вероятно, хотите.

Кстати: приведенный выше пинг не требует никаких привилегий root. Информация о маршрутизации (в вашем случае: «список желаний») является частью протокола ICMP.

Nils
источник
1
Это не доставит меня туда. ping -c4 10.1.1.2 192.168.0.1дает 100% потерю пакета. Я прояснил ситуацию выше.
Люк Шлатер
4
Это на самом деле не работает вообще, даже с root. Я проверял это во время просмотра tcpdump, и он не делает то, что вы думаете, что он делает.
Багамат
Что произойдет, если вы полностью удалите шлюз по умолчанию? Я до сих пор не понимаю вашу настройку. Почему вы используете одинаковый адрес «роутера» на обоих модемах?
Нильс
Оба модема контролируются моими разными интернет-провайдерами.
Люк Шлатер
Хорошо, теперь я понимаю тот же IP маршрутизаторов. Это соединение по требованию, и вы хотите переключиться на другой ресурс?
Нильс
11

Ни у меня, ping -Nни arpingу меня ничего не получилось, и я наконец решил решение из этого ответа :

Вы можете использовать инструмент nping из пакета nmap :

# nping --icmp --dest-mac [gateway mac] [target ip]

Вы можете найти mac вашего маршрутизатора в вашем локальном ARP-кэше:

$ arp -v [gateway ip]

Инструмент также поддерживает различные типы пингов, например --tcpили --udp.

Tho85
источник
Спасибо за это. Ваше предложение об использовании nping - единственный метод, который я нашел (кроме добавления по определенному маршруту и ​​использования обычного двоичного файла ping) для отправки эхо-запросов ICMP (эхо-запросов) к резервному маршрутизатору 3G с коммутируемым доступом по требованию (для целей тестирования). , чтобы убедиться, что он подключен и имеет реальное подключение к Интернету после подключения), достигается путем назначения MAC-адреса маршрутизатора при отправке пакетов ICMP, что позволяет делать nping. Очень полезная маленькая утилита!
parkamark
2

Извините, у вас может быть только один шлюз по умолчанию . Вы можете иметь несколько шлюзов, но только один для каждой сети.

Проблема в том, что оба упомянутых IP-адреса находятся в одной сети. Также вы неправильно указали свои CIDR: вы имели в виду 10.1.1.0/24 как имеющую подсеть 255.255.255.0; или даже иметь большую подсеть, например, 10.0.0.0/8 как 255.0.0.0.

Поэтому вы можете пропинговать любой хост в вашей сети (10.0.0.0/8) или любой хост, доступный через (или) шлюз. Но иметь два шлюза для одной сети невозможно.

mailq
источник
1
Я имел в виду 10.1.1.1/24 как сокращение для 10.1.1.1 в подсети 10.1.1.0/24. Извините, я больше не буду использовать эту стенографию, это явно неправильно. У меня все еще есть проблема с мониторингом - я добавил более подробную информацию выше. Я не могу решить эту проблему, не поставив лучший маршрутизатор на 10.1.1.2?
Люк Шлатер
2

Используйте арпинг :

# arping -c 1 -S [source_ip] -T [target_remote_ip] [gateway_mac_address]

Где:

  • source_ip - это IP-адрес, локально назначенный на вашем хосте.
  • target_remote_ip - это IP-адрес, который вы хотите пропинговать
  • gateway_mac_address - эфирный адрес уровня 2 альтернативного шлюза, который вы хотите использовать

В качестве альтернативы, если вы используете какую-либо форму Solaris, вы можете использовать:

ping -N [gateway_ip] [target_remote_ip]
bahamat
источник
Это выглядит многообещающе, хотя я полагаю, что арпинг iproute2 не собирается его сокращать ... возможно, мне просто нужно заменить маршрутизатор чем-то, с чем я могу ssh войти.
Люк Шлатер
1
iproute2«s arpingотличается. Если вы используете arping от iproute2делать безвозмездный Арпс, я предложил бы использовать send_arpиз fakeвместо. Кроме того, шлюз должен быть чем-то, что будет пересылать IP-пакеты.
Багамат