Добрый день!
По ходу пользования системой в качестве шлюза, возникло несколько вопросов. Может кто-то сталкивался и подскажет, хотелось бы узнать вот что:
Вопрос №1. Как можно в фаерволе перенаправить одних пользователей через 1 канал, а других через 2.
Читал про PBR
http://ipfw.ism.kiev.ua/pbr.htmlсначала запускаю нат для двух интерфейсов:
natd -a 91.205.170.67 -p 8668
natd -a 91.205.170.68 -p 8778
(после этого пишу top, и там отображается всего один natd. Не странно ли это?)
пишу правила:
IP которому разрешено ходить через 1 канал (1 канал с интерфейса vr0 (LanOut) с IP 192.168.0.150, все остальные идут через второй канал, в самом начале конфига:
#!/bin/sh
FwCMD="/sbin/ipfw"
LanOut="vr0"
LanOut2="nfe0"
LanIn="vr1"
IpOut="91.205.170.67"
IpOut2="91.205.170.68"
IpIn="192.168.0.1"
NetMask="24"
NetIn="192.168.0.0"
. . .
${FwCMD} 00100 add divert 8668 ip from 192.168.0.150 to any
${FwCMD} 00200 add divert 8778 ip from any to any
${FwCMD} 00300 add fwd 91.205.170.254 ip from ${IpOut} to any
${FwCMD} 00400 add fwd 91.205.170.254 ip from ${IpOut2} to any
${FwCMD} 00500 add divert 8668 ip from any to ${IpOut}
${FwCMD} 00600 add divert 8778 ip from any to ${IpOut2}
все правильно? А не работает. При sh /etc/firewall.conf соединение по ssh отваливается на правиле 00100, благо сижу на тестовой машине, монитор перед глазами, но так ладу и не дал с divert...
Вопрос №2: Нашел инструкцию как это сделать, но она была для pf. Думаю в ipfw тоже предусмотрена такая функция. Как можно перенаправить ВСЕ запросы с одного IP адреса в локальной сети на одну страницу на сервере. Т.е. что-то типа: пользователь с IP открывает любую страницу, например yandex.ru, и вместо яндекса видит: доступ запрещен. А страница с надписью доступ запрещен лежит где-то на сервере. Как так сделать?
Вопрос №3: Как можно отследить трафик c IP адреса и например если он выкачивает в период времени с 20 до 23 больше 1 гб ограничить ему скорость до 1 мегабита, и восстановить скорость например в 23 часа и все это автоматически? Имеются неплохие знания в PHP. Был идея написать какой-то скрипт проверки на php: например вытаскивать каждые 10 минут из базы данных darkstat показания трафика и если они превышают допустимые сделать запуск средствами PHP sh скрипта в котором будет написано что-то типа:
. . .
${FwCMD} pipe 1 config bw 1Mbit/s
chour=`date '+%H'`
if [ ${chour} -lt 23 ]; then
${FwCMD} pipe 1 config bw 15Mbit/s
fi
Единственное не знаю как из php заставить запустить sh скрипт. Правда может это показаться знатокам бредом, но это мои мысли пришедшие ко мне на стадии пользования FreeBSD пол года. Подскажите, как было бы правильнее?
Вопрос №4: Был у меня роутер Dlink DIR-300. И стояла на нем прошивка DD-WRT. В ней была очень интересная функция, что-то типа рекламной сети или как-то так. Суть в том, что когда пользователь открывает любую страницу, у него в браузере сверху добавляется фрейм, в котором идет какая-то информация заложенная администратором роутера, а ниже сам контент страницы, которую запросил пользователь. Сколько времени искал, ничего похожего даже не нашел. Отсюда напрашивается вывод, если в роутере с linuxом сделали такую фишку, неужели на более мощном шлюзе нельзя сделать так же на FreeBSD?