Приведу не сложный пример решения следующей задачи...
Необходимо чтобы запросы с внешнего 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!
Просмотров: 1055
 Ваш коментарий будет первым | | |