Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   [решено] Удаление и добавление маршрутов в таблицу маршрутизации (http://forum.oszone.net/showthread.php?t=139285)

tinipop 04-05-2009 15:35 1110481

Удаление и добавление маршрутов в таблицу маршрутизации
 
Добрый день!

Система WinServer2003R2 Sp2

На ней три сетевых интерфейса:
1. Локальная сеть, адрес сервера - 192.168.0.5.
2. Подключение к интернету №1 PPPoE(радиоканал) 194.44.77.5 -> 194.44.32.213.
3. Подключение к интернету №2 через SHDSL модем в режиме моста (т.е. без всяких PPP) Адрес 195.5.31.95 шлюз провайдера 195.5.31.94.

Поднята служба маршрутизации и удаленного доступа RRAS. Подключение к интернету №1 используется как подключение по требованию. На обоих интерфейсах(подключенных к интернету) включен NAT.

Проблема следующяя(выполняем команды ручками):
route add 74.125.77.104 mask 255.255.255.255 194.44.32.213 metric 1 if 0x20006 (т.е. добавляю маршрут к 74.125.77.104 через подключение № 1)
route delete 74.125.77.104 отвечает "Не найден указанный маршрут."
route print - и этот маршрут есть в таблице
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
74.125.77.104 255.255.255.255 194.44.32.213 194.44.77.5 1

Т.е. не удаляется маршрут, который однажды прописался на интерфейс. Программа route говорит такого маршрута нет, и в то же время показывает его в таблице маршрутизации

На интерфейсе 195.5.31.95 такого не наблюдается, все работает так как должно.

Зачем такой глупый маршрут?
Для того чтобы эхо запрос пошел именно через этот интерфейс, даже в том случае если шлюз по умолчанию 195.5.31.94.
Пишу скрипт для автопереключения каналов интернета. На тестовом компе с двумя PPP подключениями(WindowsXP) работал прекрасно. На боевом столкнулся с такой проблемой. Помогите решить, отблагодарю и выложу скрипт на форум.
Спасибо!

Spooner 04-05-2009 20:20 1110676

Присоединяюсь. У меня была подобная проблема. И так же по-дебильному прописывался if 0x20006 в таблице. Но у меня этот маршрут к тому же и не отрабатывал. Начинало работать только после route change, он цеплял нормальный интерфейс, а не хекс, и начинал работать. Подозреваю, что, конечно, проблема в моих кривых клешнях) Но всё же правда интересно.

tinipop 05-05-2009 10:57 1111081

Пробовал манипулировать маршрутами (на интерфейсе WAN (PPP/SLIP) Interface) командой версии 5.1.2600.0 (с Windows Xp)
и версия route 5.2.3790.0(Win2003) - говорят одинаково: маршрут в таблице есть, а удалить его от туда невозможно так как "он не найден"...
Цитата:

Цитата Spooner
он цеплял нормальный интерфейс, а не хекс, и начинал работать »

а в route есть возможность дать параметру IF не число hex? Тем более, что на XP такое прокатывает, а на 2003 нет. Я боюсь что проблема кроется в поднятом RRAS с вызовом по требованию...

tinipop 05-05-2009 13:49 1111210

Есть решение:
netsh routing ip add rtmroute // добавляет маршрут
netsh routing ip set rtmroute // изменяет маршрут
netsh routing ip delete rtmroute // удалеят маршрут
netsh routing ip show rtmroute // показывает маршруты
netsh routing ip show interface // показывает интерфейсы
Тестим скриптик...

tinipop 05-05-2009 14:55 1111241

Вложений: 1
Даю скрипт для работы с двумя и более каналами интернет, как обещал.
Скрипт поддерживает:
1. Смену default маршрута от основного интерфеса и обратно, при востановлении основного. Основной необходимо указать в переменной.
2. Список Интерфесов задается в массиве, сами понимаете не ограниченого количества.
3. Дополнительные маршруты(через не основные каналы) с указанием желаемого интерфеса для маршрута и дополнительного интерфейса для маршрута. При неработоспособнисти них, ставит маршрут на один из рабочих.
4. Перезапись дополнительных маршрутов при падении интерфеса. (смена с основного интерфеса для маршрута на дополнительный и обратно по возможности).
5. Количество серверов для теста эхо-запросом не ограничено.
6. Количесвто доп. маршрутов не ограничено, заносится в массив.
7. Поддержка вывода лога в системный ЛОГ(создает журнал Scripts). Два режма логирования - отладочный и рабочий.
8. Поддержка вывода статистики по интерфесам каждые n тестов.
9. Два скрипта для работы с RRAS сервером и без него (разница в командах управления маршрутами, для RRAS используется netsh, для обычного режима route).
10. Поддержка автополучения номера интерфеса в обычном режиме. (см. вывод команды route print) .
11. Псевдобалансировка нагрузки на каналы.
P.S. после неудачного поиска такой вещи в инете (нашел батник бедный на возможности) решил собраться и написать такую вещь. Так что радуйтесь кто искал. У кого есть уже, делитесь идеями и мона мою критиковать. По крайней мере пока что это то что нужно было мне с учетом возможности узменения/расширения и т.д. :oszone:

tinipop 08-05-2009 13:19 1113694

По теме скрипта:
Делаю балансировку методом изменения метрики основных маршрутов. Правильно ли это, не будут ли путаться соединения и т.п. (имеется ввиду типа соединения аськи, скайпа и другие).

tinipop 04-09-2010 01:07 1488232

Вложений: 1
по просьюе alexpebody
"Собственно задача такова, есть 2 шлюза скажем 192.168.0.1 и 192.168.0.2 нужно если инет упал на 1 переключить на 2й, если упал на 2, переключить на 1й... Это вообще возможно?

Скачал скрипт, после запуска получил множество cmd окон и все (( с периодичностью запуска в 10 сек примерно... как настроить скрипт?
"
ПОЯСНЕНИЯ находятся в самом скрипте, скрипт запускает стандартные команды управления маршрутами, поэтому выскакивают "cmd окна"..
периодичность также настраиватся
Все настройки описаны в самом скрипте с коментариями
настроить его можно и на пять шлюзов...
настроить можно и статические маршрутыи методы их перезаписи при пропадание одного из каналов
Код:

//также поменять тут значения
var strSYSROOT = "E:\\Windows";
var blockFile = "E:\\blockfile.ping_script";
//на свой системный диск
//максимальное количесвто утеряных тест-потерь (начало смены шлюза)
var test_timeout = 1000; //тестирование пингом (время ожидания ответа)
var ping_timeout = 60000; //интервал между тестированиями
var default_interface = 1; //интерфейс предпочитаемый для работы
var use_balancing = false; //использовать псевдо балансировку нагрузки на интерфесах.
var iNoise = 1; //1- не писать полный лог, 2- писать лог, надо осторожно, 5 минут = более 100 событий
var recipients_list = "my_mail@mail"; //отправка почты, адресаты через запятую !!!!нужна программа blat.exe  в системруте!!!!

//доп маршруты, начинаются с нуля
//arStaticRoute[0] = new StaticRoute("10.10.2.1", "255.255.255.255", 2, 1);
//arStaticRoute[1] = new StaticRoute("10.10.0.2", "255.255.255.255", 2, 1);
//шлюзы начинаются с индекса [1]
arGateway[1] = "192.168.0.1";
arGateway[2] = "192.168.0.2";
//интерфейсы начинаются с индекса [1]
arInterface[1] = "долженр быть идентичен названию сетевого интерфейса в виндовс";
arInterface[2] = "ukrtelecom, например";
arDownInterface[1] = false;
arDownInterface[2] = false;
//сервера для тестов начинаются с нуля
arTestServers[0] = "72.14.221.104"; //"google.com.ua";
arTestServers[1] = "74.125.77.104"; //"yahoo.ru";
arTestServers[2] = "216.239.59.104"; //"meta.ua";
max_pack_lost_count = arTestServers.length * 3; // макс.  потери на кажды сервер

к сожалению самая последняя версия скрипта была потеряна. основное исправление касалось обработки реакций на отключения интерфесов, толи кабелем толи через консоль... а вообще для шлюза у мня был выбран сервер управляемый FreeBSD и под эту ОС я написал на С небольшую прогу, которая делает тоже самое в три раза меньшими усилиями... кому интересно выложу.

DeathMan2k4 18-09-2017 08:34 2765240

Помогите пожалуйста со скриптом (или CMD bat файлом), который бы в одном случае прописывал DNS 192.168.43.1 для Ethernet карты, а в другом делал бы параметры полностью DHCP на том же адаптере Ethernet


Время: 21:35.

Время: 21:35.
© OSzone.net 2001-