У меня есть Linux-машина под управлением CentOS с двумя интернет-провайдерами. Мой сценарий ролловера канала ISP пытается определить, когда мы на вторичном канале ISP, есть ли основной канал ISP, и наоборот, когда нужно изменить с основного на вторичный. Нормальная вещь.
Для этого я хочу выполнить пинг с интерфейса, который теперь не является шлюзом по умолчанию.
Мои 2 ifaces: eth1 является основным, а eth2 - второстепенным.
Например, когда мы в eth1 и хотим проверить, есть ли интернет на eth2. Eth2 находится в рабочем состоянии.
ping -I eth2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 1.2.3.4 eth2: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
15 packets transmitted, 0 received, 100% packet loss, time 14173ms
Но мой запущенный tcpdump показывает, что пакеты отправляются и доставляются на сервер, но утилита ping не видит некоторых причин. Почему я понятия не имею? Что может быть причиной?
tcpdump:
17:36:42.191153 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
1.2.3.4 > 8.8.8.8: ICMP echo request, id 44138, seq 1, length 64
17:36:42.235899 IP (tos 0x0, ttl 59, id 30465, offset 0, flags [none], proto ICMP (1), length 84)
8.8.8.8 > 1.2.3.4: ICMP echo reply, id 44138, seq 1, length 64
17:36:43.190616 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
1.2.3.4 > 8.8.8.8: ICMP echo request, id 44138, seq 2, length 64
17:36:43.235363 IP (tos 0x0, ttl 59, id 31136, offset 0, flags [none], proto ICMP (1), length 84)
8.8.8.8 > 1.2.3.4: ICMP echo reply, id 44138, seq 2, length 64
17:36:44.190575 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
1.2.3.4 > 8.8.8.8: ICMP echo request, id 44138, seq 3, length 64
17:36:44.235346 IP (tos 0x0, ttl 59, id 32083, offset 0, flags [none], proto ICMP (1), length 84)
8.8.8.8 > 1.2.3.4: ICMP echo reply, id 44138, seq 3, length 64
17:36:45.190554 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
1.2.3.4 > 8.8.8.8: ICMP echo request, id 44138, seq 4, length 64
17:36:45.235368 IP (tos 0x0, ttl 59, id 32355, offset 0, flags [none], proto ICMP (1), length 84)
8.8.8.8 > 1.2.3.4: ICMP echo reply, id 44138, seq 4, length 64
netstat -rn показывает, что eth2 не является шлюзом по умолчанию, но это eth1.
Пакеты ICMP, созданные ping
могут быть отфильтрованы чрезмерно рьяным брандмауэром на пути. traceoute
может помогите найти такую проблему.