Мысль дня

Кто цяй не пьёт — тот цьмо!

© Конфуций

Типа динамическая маршрутизация

Есть у меня два интернета, каждый со своими плюшками, использовать которые хочется одновременно. А для этого необходима волшебная маршрутизация…

Стала передо мной такая задача. На одном внешнем интерфейсе (назовём его rl1) статический IP (192.168.10.2), вбиваемый вручную, на другом (xl0) — вроде тоже IP статический (10.0.0.2), но получаемый посредством DHCP. Этот самый DHCP на втором интерфейсе иногда тупит, поэтому интерфейс не получает никаких параметров в течении длительного времени. Кроме того, оба интерфейса являются выходами в соответствующие локальные сети со своими выходами в интернет. rl1 смотрит в локалку (скажем, 192.168.10.0/24), которая не имеет ничего, кроме выхода в интернет с другого конца с персональным, хоть и динамическим IP. xl0 смотрит в локалку (10.0.0.0/8), которая имеет внутренние ресурсы и также выход в интернет, но уже с общим динамическим IP на туеву хучу пользователей локалки. Но так–как по xl0 интернет куда более быстрый, поэтому в основном должен использоваться он, а rl1 для отдельно взятых сервисов и для сайтов, которые не любят многократных заходов с одного IP.

Первое, что пришло в голову, это поместить такой скрипт в crontab через каждые 10 минут:

  1. #!/bin/sh
  2.  
  3. gate=`netstat -rn | awk '/default/{print $2}'`
  4. ifconfig xl0 | grep inet > /dev/null 2>&1
  5. if [ $? -eq 0 ] ; then
  6.   if [ $gate != 10.0.0.254 ] ; then
  7.     route delete default
  8.     route add default 10.0.0.254
  9.   fi
  10. else
  11.   if [ $gate != 192.168.10.1 ] ; then
  12.     route delete default
  13.     route add default 192.168.10.1
  14.   fi
  15. fi 

В третьей строке переменной gate присваивается адрес текущего шлюза по–умолчанию. Вначале команда netstat –rn выдаёт адреса маршрутов в цифровом виде, затем из строки с нужным маршрутом (default) берётся значение второго «столбца», где и находится нужный адрес. Со стартом системы устанавливается шлюз по–умолчанию 192.168.10.1, на тот случай, если DHCP на xl0 ещё не расчехлится.

В четвёртой строке проверяется интерфейс xl0 на предмет получения им параметров по DHCP. Команда ifconfig xl0 считывает параметры интерфейса xl0, затем grep ищет в них строку «inet», наличие которой свидетельствует о том, что настройки получены, и весь вывод отправляем в /dev/null, чтоб он нам глаза не мозолил, а сообщение об ошибках запоминаем.

В пятой строке проверяем результат последней выполненной операции — это как раз сообщение об ошибке. Если оно равно 0 (что указывает на отсутствие ошибок и, как следствие, наличие настроек у интерфейса xl0), то проверяем IP текущего шлюза по–умолчанию, который мы выяснили в третьей строке.

Шестая строка. Если текущий шлюз по–умолчанию не равен 10.0.0.254, то удаляем текущий шлюз по–умолчанию в седьмой строке и устанавливаем его в это значение в восьмой строке. Мы можем это сделать, так как в пятой строке выяснили, что интерфейс xl0 получил настройки. А если текущий шлюз по–умолчанию равен 10.0.0.254, то ничего не меняется.

Но, если вдруг, интерфейс xl0 не получил настроек, то в четвёртой строке мы получим результат отличный от нуля и по правилу из пятой строки попадаем на выполнение условия из одиннадцатой строки. Если шлюз по–умолчанию не равен 192.168.10.1, то в строке двенадцать удаляем его и устанавливаем новый шлюз по–умолчанию равным 192.168.10.1 в строке тринадцать. А если шлюз по–умолчанию уже установлен в 192.168.10.1, то ничего не делаем.

Скрипт выполняется каждые 10 минут через cron. Проверяет активность одной из внешних сетей и устанавливает шлюз по–умолчанию в этой сети. А если эта сеть не доступна, то в другой сети, которая доступна в любом случае.

Сервисы и сайты, для работы которых необходим персональный IP, прописаны соответствующими маршрутами с жёсткой привязкой к шлюзу 192.168.10.1.

Комментарии

Архив

  1. 2022
    1. август
      1. Сайт восстановил работу
  2. 2021
    1. январь
      1. Kubntu Linux Opera: не работает видео
      2. Не обновляется FreeBSD со старой версии, ошибка «Cowardly»
  3. 2015
    1. сентябрь
      1. Ворона позирует
      2. Как сделать новость из ничего
    2. август
      1. Моё первое селфи
      2. Спам от Майкрософта
    3. июнь
      1. 1000
      2. Сельдерей
    4. май
      1. Сирень зацвела
      2. Ночное солнце
    5. апрель
      1. Ить-ить-ить-ить
    6. январь
      1. Разрыв VPN-соединения при нагрузке
  4. 2014
    1. декабрь
      1. Суровый холостяцкий смайл
    2. ноябрь
      1. Перечень IP–адресов в IPFW
      2. Длина строки правила IPFW во FreeBSD
    3. октябрь
      1. Свет в конце тоннеля
      2. Огоньки
    4. сентябрь
      1. Попал под раздачу
      2. Собираю чемодан
      3. Чьи–то уши торчат над холмом
      4. Увеличение свободного места на телефоне LG P500 Optimus One
      5. Места нет, но место есть
      6. Пластиковая Африка
    5. август
      1. Кошка в ванной
      2. В PHP функция возвращает NULL вместо данных
      3. В Оперу вернулись закладки!
      4. Убираем рамки вокруг экрана
      5. Загадочный дом
    6. июль
      1. Божьи коровы и прочие твари
      2. Человек собаке друг
    7. июнь
      1. Котоворот
      2. Древесная живность
      3. Шампунь
    8. апрель
      1. Еда
      2. Смайл
      3. Одуванчики
      4. Шашлычная история
      5. Кровавая Луна
      6. Старый пень
      7. Бриллиант
    9. март
      1. Лисапет наносит ответный удар
      2. Весна пришла или Лисапет 2
      3. Лисапет
      4. Запах весны
    10. январь
      1. Восстановление данных и лечение HDD с помощью dd во FreeBSD
      2. Новогодняя ёлка 2014
  5. 2013
    1. декабрь
      1. Ледяные короны
      2. Луна
    2. ноябрь
      1. Тарас Шевченко - І виріс я на чужині
      2. Увеличение раздела диска во FreeBSD
      3. Одна особенность работы freebsd-update
    3. октябрь
      1. Обзор телефона LG P500 Optimus One
      2. Призрачная трава
    4. сентябрь
      1. Подарок
      2. Мокрая, как мышь
      3. Пластиковое нашествие
      4. Использование переменных в шаблоне REGEXP
    5. август
      1. Файл конфигурации MPlayer
      2. Микширование аудиоканалов в MPlayer
      3. Спамеры тоже люди
      4. Распятый мексиканец
      5. Подсолнуховое море
      6. Подложили свинью
      7. Глобальное обновление
    6. апрель
      1. Завтрак
    7. март
      1. Пересылка всей почты другому пользователю
    8. январь
      1. Задолбали ссылки
      2. Xerox Phaser 6000 против Linux x86_64
  6. 2012
    1. декабрь
      1. Изогнутый айфон
    2. октябрь
      1. Собака бывает кусачей
    3. июнь
      1. Поддержка Monkey's Audio в Linux
      2. Поддержка чересстрочного VC–1 в 64–битном линуксе
      3. Моя кошка ловит мушку
      4. Диапазон IP–адресов в IPFW
    4. май
      1. Задушила меня жаба
    5. февраль
      1. Как закрыть и открыть порты во FreeBSD
    6. январь
      1. Обмен данными между скриптами shell и PHP
  7. 2011
    1. декабрь
      1. Пасхальное яйцо в Muon
    2. ноябрь
      1. Windows XP и NFS
      2. От природы не уйдёшь
    3. октябрь
      1. Swappiness
      2. Бодания с Ubuntu 11.10
      3. Подпишись, не будь упырём!
      4. Установка Ubuntu на RAID 0
      5. Кодинг на сон грядущий
    4. сентябрь
      1. Аську! Больше асек!
      2. Разбитое сердце
      3. Привет из параллельной вселенной
      4. Карточный домик
    5. август
      1. Обзор ноутбука ASUS 1215B
    6. июль
      1. Работает–ли компьютер без видеокарты?
    7. июнь
      1. Частушка на злободневную тему
    8. май
      1. Как–то в прошлой жизни…
    9. март
      1. 8 марта
      2. Планшеты
      3. Цветы
  8. 2010
    1. декабрь
      1. Типа динамическая маршрутизация
    2. ноябрь
      1. Закрытые порты или бодания с FreeBSD
      2. Мой новый старый комп
      3. Глюк с кодировкой в MySQL
      4. Ёжик в тумане
    3. август
      1. Кукурузное счастье
    4. май
      1. День победы 2010
      2. Не пора–ли менять браузер?
      3. Оптимизация дисковой системы в Linux
  9. 2009
    1. ноябрь
      1. Перенос системы на другой жёсткий диск
    2. август
      1. Выбор HTML–редактора под линукс
      2. Сходим в оперу?
      3. Линукс
      4. 4:00
    3. июль
      1. Семантичеcкие URL
      2. Браузеры под раздачей
      3. Графика
      4. Достало!
      5. Где–то там море
      6. С чего всё началось
      7. Начало

Поддержка проекта

Поделиться

Комментировать