- Главная... arrow - Статьи... arrow Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.

#Записки о Unix/Linux/BSD/Solaris

Crontab в будни и в выходные. Добавление правила в IPNAT по расписанию.
Автор Охальников Олег   
28:12:2010 г.
Приведу не сложный пример решения следующей задачи...
Необходимо чтобы запросы с внешнего IP с 18:00 до 9:00 редиректились в сеть на локальный IP, а с 9:00 до 18:00 это правило отключалось. Так же необходимо, чтобы в выходные дни правило редиректа работало круглосуточно.  Получается как бы динамический NAT )))))).
Все это можно сделать с помощью crontab и очень простых скриптов.
Итак, в качестве NAT у меня используется IPNAT, необходимое правило выглядит следующим образом:

rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp

em1 - это внешний интерфейс. Т.е. согласно правилу все коннекты на Inet_IP порт 80 переадресовываются в локалку на Local_IP порт 3107, на котором крутится нужный сервис. Создаем два скрипта однострочника, на добавление правила (ipnat_in.sh) и на удаление правила (ipnat_out.sh).  /etc/ipnat.conf - конфиг с правилами IPNAT.
ipnat_in.sh:

#!/bin/sh
echo 'rdr em1 Inet_IP/32 port 80 -> Local_IP port 3107 tcp' >> /etc/ipnat.conf;

ipnat_out.sh:

#!/bin/sh
cat /etc/ipnat.conf | grep -v Local_IP > /etc/ipnat.conf;

Тестируем в ручном режиме, проверяем /etc/ipnat.conf, первый скрипт должен добавлять в конец файла нужное правило, второй - это правило удаляет. Для того чтобы перечитать правило, нужно выполнить следующую команду:

ipnat -FC && ipnat -f /etc/ipnat.conf

  Теперь в crontab пишем правила:

59 17 * * * /usr/local/etc/script/ipnat_in.sh
0 18 * * * ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
59 8 * * * /usr/local/etc/script/ipnat_out.sh
0 9 * * * ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
1 9 * * 0,6 /usr/local/etc/script/ipnat_in.sh
2 9 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
57 17 * * 0,6 /usr/local/etc/script/ipnat_out.sh
58 17 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1

Первое правило в 17:59 добавит редирект в  /etc/ipnat.conf, далее чтобы изменения применились - в 18:00 перечитываем /etc/ipnat.conf. Соответственно в 8:59 - удаляем редирект и в 9:00 перечитываем конф с правилами. Это работает каждый день включая выходные. Следующие правила 

1 9 * * 0,6 /usr/local/etc/script/ipnat_in.sh
2 9 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1
57 17 * * 0,6 /usr/local/etc/script/ipnat_out.sh
58 17 * * 0,6 ipnat -FC && ipnat -f /etc/ipnat.conf > /dev/null 2>&1

работают в выходные. Т.е. дополнительно в Сб. после того как 9:00 правило будет удалено, мы его в 9:01 повторно включим до 17:57 - в это время отключаем и в 18:00 заного включаем первыми правилами. В общем получаются круглые сутки. Схемка возможно будет более понятна:

 
Пн. 9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Вт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Ср. 9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Чт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Пт.  9:00 - ipnat_out  18:00 - ipnat_in  # работает только с 18:00 и ночью до 9:00
Сб. 9:00 - ipnat_out  9:02  - ipnat_in  17:58 - ipnat_out  18:00 - ipnat_in # сутки
Вс.  9:00 - ipnat_out  9:02  - ipnat_in 17:58 - ipnat_out  18:00 - ipnat_in # сутки


Вот таким образом, без написания сложных скриптов, можно решить поставленную задачу.

Материал подготовил:
Охальников Олег aka H@wk!  

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code


Просмотров: 1055

  Ваш коментарий будет первым
RSS комментарии
 
« Скрипт простого мониторинга с отправкой результатов на почту (на примере gmirror).   Простой скрипт бэкапа ( на примере FreeBSD) »

#COMMENT

Linux - производитель сетевой ...
Посмотрите # dmesg | grep eth0 скорее всего карточка гигаби...
14/05/12 08:48 More...
By H@wk!

Linux - производитель сетевой ...
А что конкретно является скоростью, size или capacity. У мен...
11/05/12 23:19 More...
By qweqwerty

Arch rankmirrors или делаем mi...
Можно команды в sh скрипт засунуть и выполнять кроном, но я ...
10/05/12 11:13 More...
By H@wk!

Arch rankmirrors или делаем mi...
не всегда все держится в голове, поэтому - спасибо за потрач...
10/05/12 10:47 More...
By x5

FreeBSD оптимизация сервера. В...
Отличный блог, побольше бы таких статей)
07/05/12 09:28 More...
By Артем

Сейчас на сайте находятся:
21 гостей

Нашли ошибку!

Выделите текст и нажмите:
[Shift]+[Enter]
[Отправить]
Спасибо!