Буду рассуждать.
1. Значение MTU явно задаются руками при настройке маршрутизатора, ежели в том будет необходимость. Т.е. мы изначально добиваемся работоспособности обоих каналов и больше к вопросу MTU не возвращаемся.
То же касается и DNS-серверов. Время от времени их нужно проверять на способность исполнять свои обязанности. Если не способен - вычёркивать из списка используемых. К сожалению в RouterOS отсутствует команда, подобная nslookup, пока не знаю, чем его заменить из наличествующего арсенала.
Но несомненно одно: используемый DNS-сервера должны действительно работать!
2. Можно ли считать прохождение пинга надёжным знаком того, что канал жив? Ну, в целом то да. Но возможен случай, когда ICMP-трафик проходит, а TCP - нет. У меня на домашнем Би-Лайне именно так: даже с выключенным L2TP-соединением пинги в интернет ходят через Билайновский интранет. TCP и UDP разумеется нет.
Но если такой ерунды не происходит, то в 9 из 10 случаев пинг удалённых серверов можно считать хорошим знаком.
3. Рассмотрим случай возможности/невозможности установить TCP-подключение на 80-й порт yandex.ru. Можно ли с уверенностью сказать, что если такое соединение устанавливается, то канал жив? Вероятно.
А если это прокси провайдера с сообщением о неуплате? Пинги к внешним серверам в этом случае, кстати, тоже могут ходить! Засада...
Значит нам нужно проверить не просто возможность подключения к некоему серверу, но и убедиться, что он отдаёт нам ожидаемую страницу! Т.е. нам придётся парсить HTML...
Мы можем использовать кусок кода из Dynamic DNS Update Script.
Код: Выделить всё
# get the current IP address from the internet (in case of double-nat)
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:delay 1
:local result [/file get dyndns.checkip.html contents]
# parse the current IP result
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:local currentIP [:pick $result $startLoc $endLoc]
:log info "UpdateDynDNS: currentIP = $currentIP"
Мы можем сравнить полученный ip-адрес с нашим адресом на интерфейсе и если они совпадают - канал точно работает!
Но только при условии наличия белого адреса, разумеется. Если у вас на внешнем интерфейсе серые адреса нужно будет чуть по другому.
А если указанный сайт недоступен, можно ли с такой же уверенностью сказать, что канал упал? Не можем, поскольку:
а) может упасть сам checkip.dyndns.org;
б) ещё причина могла крыться в недоступности DNS-сервера. Т.е. канал то жив, но имя checkip.dyndns.org не преобразуется в ip-адрес. Но поскольку мы изначально эту возможность предусмотрели и приняли меры, то "б" вычёркиваем.
Что-то ещё? Вроде бы нет...
Тогда нужен запасный путь - второй подобный сайт с предсказуемым содержимым страницы. В конце концов можно закачать произвольный файл на хостинг собственного сайта! Я уверен, что у подавляющего большинства здесь присутствующих такой уютненький хостинг имеется.
Вот такие мысли. Что скажите, уважаемые?