Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Разделение трафика на город/внешка. Скрипт. [РЕШЕНО/SOLVED]  (Прочитано 1102 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Brunen

  • Автор темы
  • Участник
  • *
  • Сообщений: 143
    • Просмотр профиля
Upd. Задача решена. Скрипт делает следующее:
1. Удаляет ранее прописанные сети с метрикой 5 (для удаления маршрутов с п.4)
2. Скачивает файл(в формате Wndows) со списком городских сетей
3. Обрабатывает его для преобразования в формат *nix
4. Прописывает маршруты с этого файла в таблицу маршрутизации.
5. Удаляет скаченный файл(п.2).


#!/bin/bash

for rout in $(ip r |grep 'metric 5' |awk '{print $1}'); do
        ip r d $rout
done

wget www.tomsknet.ru/files/routetomsk.bat
dos2unix routetomsk.bat
sed -i 's/route -p ADD/route add -net/g' routetomsk.bat
sed -i 's/MASK/netmask/g' routetomsk.bat
sed -i "s/%1/gw `netstat -rn|grep UG|grep 0.0.0.0|awk '{print $2}'`/g" routetomsk.bat
chmod u+x routetomsk.bat
./routetomsk.bat
rm routetomsk.bat

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 05 Апреля 2011, 15:38:06 от Brunen »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
У меня получилось как-то так
#!/bin/bash

dos2unix routetomsk.bat                                        
sed -i 's/route -p ADD/route add -net/g' routetomsk.bat
sed -i 's/MASK/netmask/g' routetomsk.bat
sed -i "s/%1/gw `netstat -rn|grep UG|grep 0.0.0.0|awk '{print $2}'`/g" routetomsk.bat
rm routetomsk.bat

И не забудь перед удалением использовать этот файл
А чистка роутинга вроде так
ip route flush all
P.S. правда у меня нет утилы dos2unix, но я догадываюсь, что она делает ;)
« Последнее редактирование: 13 Марта 2011, 11:40:55 от fisher74 »

Гарри Кашпировский

  • Гость
Мой вариант
#!/bin/sh
gate=`ip r |tail -n 1 |awk '{print $3}'`
wget -q http://www.tomsknet.ru/files/routetomsk.bat -O - | sed -e 's/route -p ADD/\/sbin\/route add -net/' | sed -re "s/MASK (\S+)\s+(\S+)\s+.*/netmask \1 gw $gate metric 5/g" |sh
« Последнее редактирование: 13 Марта 2011, 12:17:50 от KT315 »

Оффлайн Brunen

  • Автор темы
  • Участник
  • *
  • Сообщений: 143
    • Просмотр профиля
У меня получилось как-то так
#!/bin/bash

dos2unix routetomsk.bat                                        
sed -i 's/route -p ADD/route add -net/g' routetomsk.bat
sed -i 's/MASK/netmask/g' routetomsk.bat
sed -i "s/%1/gw `netstat -rn|grep UG|grep 0.0.0.0|awk '{print $2}'`/g" routetomsk.bat
rm routetomsk.bat

И не забудь перед удалением использовать этот файл
А чистка роутинга вроде так
ip route flush all
P.S. правда у меня нет утилы dos2unix, но я догадываюсь, что она делает ;)


Мой вариант
#!/bin/sh
gate=`ip r |tail -n 1 |awk '{print $3}'`
wget -q http://www.tomsknet.ru/files/routetomsk.bat -O - | sed -e 's/route -p ADD/\/sbin\/route add -net/' | sed -re "s/MASK (\S+)\s+(\S+)\s+.*/netmask \1 gw $gate metric 5/g" |sh

Сорри, долго не отвечал - в больнице лежал :(
А теперь - по делу. Прежде всего - спасибо за практичные ответы!

Только возник вопрос:
ip route flush allЧистит полностью всю таблицу маршрутизации. А мне необходимо - чтобы там оставались дефольные записи, которые автоматом прописываются при поднятии сетевого интерфейса(по DHCP). Какой командой возвращать таблицу маршрутизации в дефолтное значение?

Гарри Кашпировский

  • Гость
ip route flush allip route flush <название_таблицы>
обычно это main
Можно роутинг скриптом по метрике удалять.
Код: (delroute) [Выделить]
#!/bin/sh
for rout in $(ip r |grep 'metric 5' |awk '{print $1}'); do
        ip r d $rout
done
exit 0

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28464
    • Просмотр профиля
Не проще загонять роутинг в отдельную таблицу, раз его чистить приходится?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Brunen

  • Автор темы
  • Участник
  • *
  • Сообщений: 143
    • Просмотр профиля
ip route flush allip route flush <название_таблицы>
обычно это main
Можно роутинг скриптом по метрике удалять.
Код: (delroute) [Выделить]
#!/bin/sh
for rout in $(ip r |grep 'metric 5' |awk '{print $1}'); do
        ip r d $rout
done
exit 0

Спасибо большое, сделал с помощью Вашего примера. Проблема решена!

Пользователь решил продолжить мысль 28 Марта 2011, 12:01:05:
Не проще загонять роутинг в отдельную таблицу, раз его чистить приходится?

Проще. Если знать как. Люди предложили вариант - я через него сделал, работает.
Если знаете более простой вариант - напишите, over9000 Вам будут благодарны :)
« Последнее редактирование: 28 Марта 2011, 12:01:05 от Brunen »

 

Страница сгенерирована за 0.102 секунд. Запросов: 25.