![]() |
Автоматическое изменение маршрутов
Добрый день, прошу помощи в решении следующей проблемы
На работе есть прокси-сервер и два канала связи: 172.25.46.1 - спутниковый модем с большим лимитом предоплаченного трафика и очень большим пингом (около секунды) 172.25.46.254 - ADSL-модем с быстрым пингом, малым лимитом и периодической нестабильностью соединения. Также есть ряд сайтов, созданных с применением новейших откатно-распилочных технологий. Эти сайты содержат множество скриптов, которые генерируют множество мелких запросов, каждый из которых за счёт большого пинга выполняется нецензурное количество времени. Можно было бы просто прописать на прокси маршруты через DSL, но это соединение в нашей сельской местности временами работает ещё медленее (или не работает вовсе). В связи с чем планирую написать скрипт, который будет периодически мониторить DSL и переключать маршруты. Основной алгоритм такой 1. Пинг маршрутизаторов обоих провайдеров и сравнение результатов 2. Если результат DSL лучше, то добавление маршрутов к сайтам по списку (из файла) 3. Если результат DSL хуже, то удаление маршрутов к сайтам по списку (из файла) По первому пункту. Команда ping выдаёт следующий результат Цитата:
Как выделить из этого процент потерянных пакетов и среднее время передачи? P.S. man sed прошу не писать... |
Цитата:
Процент потерянных пакетов: Цитата:
Цитата:
|
PhilB, спасибо. Правда, во второй строке была небольшая ошибка, вызванная использованием символа '/' для разделения цифр. Пришлось добавить дополнительную замену
В общем, получилось следующее Если кто найдёт и поможет исправить ошибку, буду очень признателен. Желающим использовать этот скрипт в работе, использование и дальнейшую модификацию разрешаю |
Упс, нашёл баг в функции delroutes , из-за которого не удаляются маршруты к некоторым сайтам
Я исходил из того, что команда route del -host $hostname определяет IP хоста по его имени, а затем удаляет из таблицы маршрутизации строку с соответствующим IP и маской 255.255.255.255. Однако всё словно происходит с точностью до наоборот: команда определяет имена хостов для всех строк таблицы маршрутизации, а затем ищет среди них нужную. При этом, если для какого-то адреса поиск в "обратной зоне DNS" возвращает другое (!!!) имя сайта (например www.XXXX.ru вместо XXXX.ru), то вместо удаления выводится сообщение об отсутствии указанного маршрута. Значит нужно удалять маршрут по IP-адресу сайта, а для этого его нужно сначала определить. Например, вот так: Код:
ip=$(ping $hostname -c 1 | head -n 1 | sed ... ) |
Вроде так
Код:
sed '/[^(]*(\([^ ]*\)).*/s//\1/g' |
Итак, предлагаю вашему вниманию исправленную и доработанную версию скрипта, который автоматически переключает маршруты к определённым сайтам. Распространение приветсвуется
Монтирование RAM-диска производится через файл /etc/fstab Код:
tmpfs /tmp/ramdrive tmpfs nosuid,nodev,noatime,nodiratime 0 0 |
Время: 01:13. |
Время: 01:13.
© OSzone.net 2001-