Страница 1 из 1

PF и диапазоны IP

Добавлено: 2010-10-16 12:28:42
ArtCont
Добрый День Господа!
Вроде вопрос дурной, но пытаясь реализовать одну задачку, не могу найти правильное её решение.

Нужно за Натить 2-а диапазона IP один серверный 2-й так сказать ВИП список. И другой кусок сети пробросить вебу на Squid.
Все это делается на PF.

Код: Выделить всё

FreeBSD corp.domain.com 8.1-RELEASE-p1 FreeBSD 8.1-RELEASE-p1 #0: Mon Oct 11 19:37:57 EEST 2010     root@corp.domain.com:/usr/obj/usr/src/sys/corp-r3  amd64
Ядро собрано с:

Код: Выделить всё

device          pf
device          pflog
device          pfsync

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_CDNR
options         ALTQ_PRIQ
Диапазон ИП серверной части: 192.168.0.1-192.168.0.15
Диапазон ИП Випов: 192.168.0.20 - 192.168.0.35, 192.168.0.240 - 192.168.0.254
Диапазон форварда на Сквид: 192.168.0.51 - 192.168.0.210

Пытаюсь задать в pf таким образом:

Код: Выделить всё

squid_ip = "{ 192.168.0.51/25, 192.168.0.178/27 }"
serv_ip = "{ 192.168.0.1/28 }"
vip_ip = "{ 192.168.0.20/28, 192.168.0.240/28 }"
В итоге получаю:

Код: Выделить всё

pfctl -vnf /etc/pf.wall
squid_ip = "{ 192.168.0.51/25, 192.168.0.178/27 }"
serv_ip = "{ 192.168.0.1/28 }"
vip_ip = "{ 192.168.0.20/28, 192.168.0.240/28 }"
...
scrub in all fragment reassemble
nat on fxp1 inet from 192.168.0.0/24 to any -> (fxp1) round-robin
nat on fxp1 inet from 192.168.0.16/28 to any -> 111.111.111.111
nat on fxp1 inet from 192.168.0.240/28 to any -> 111.111.111.111
nat on fxp1 inet from 192.168.0.0/28 to any -> 111.111.111.111
......
rdr pass on fxp0 inet proto tcp from 192.168.0.0/25 to any port = ftp -> 127.0.0.1 port 3128
rdr pass on fxp0 inet proto tcp from 192.168.0.0/25 to any port = http -> 127.0.0.1 port 3128
rdr pass on fxp0 inet proto tcp from 192.168.0.0/25 to any port = 8080 -> 127.0.0.1 port 3128
rdr pass on fxp0 inet proto tcp from 192.168.0.160/27 to any port = ftp -> 127.0.0.1 port 3128
rdr pass on fxp0 inet proto tcp from 192.168.0.160/27 to any port = http -> 127.0.0.1 port 3128
rdr pass on fxp0 inet proto tcp from 192.168.0.160/27 to any port = 8080 -> 127.0.0.1 port 3128
А реально получаю проброс вообще непонятно чего и каким макаром :(
Заранее Спасибо за помощь!

Re: PF и диапазоны IP

Добавлено: 2010-10-18 9:47:26
schizoid
у клиентов тоже такие дикие маски?

Re: PF и диапазоны IP

Добавлено: 2010-10-19 0:53:25
ArtCont
Это я пытался реализовать диапазоны чтоб руками не вбивать их, но увы времени совсем нет, посему пришлось создать с пару десятков групп чтоб хоть немонго был читабелен конфиг pf.
А маски я такие ставил, чтоб не строчить каждый IP в конфиг, что-то в роде: Диапазон ИП Випов: 192.168.0.20 - 192.168.0.35, заменить на /28 маску :)
Если поделиться знаниями по этому вопросу, я буду очень благодарен :)

Re: PF и диапазоны IP

Добавлено: 2010-10-20 9:52:10
BlackCat
ArtCont, у вас пересекаются указанные диапазоны, а некоторые вообще странно заданы (как например 192.168.0.1/28).
Почитайте хотя бы эту статью http://ru.wikipedia.org/wiki/Бесклассовая_адресация В маске не должно быть единичных бит стоящих после нулевых (если смотреть слева на право), т.е. не должно быть разрывов. Так-же при указании диапазона в виде address/len, в адресе не должно быть единичных бит после бита с номером len.
=====
Что касается решения поставленной задачи, то вам необходимо перепланировать адресацию в сети, что бы подсети были с маской одинаковой длины, тогда они не будут перекрываться и вы спокойно сможете указывать подсети в правилах МСЭ. Но учтите, что создавая подсеть вы резервируете в ней два адреса (самой подсети и широковещательный). Это вариант для случая, когда вам действительно нужны отдельные подсети.
Второй вариант - использовать таблицы и хранить их в отдельных файлах или заполнять адресами после загрузки правил, это поможет упростить конфигурационный файл сохраняя гибкость управления. А запись адресов в файл всегда возможно автоматизировать.

Re: PF и диапазоны IP

Добавлено: 2010-10-22 11:52:25
ArtCont
Спасибо за помощь! Сижу читаю про таблицы, пока немного не ясно, но думаю осилю. :)