Миграция из ipfw на pf

Обсуждаем OS FreeBSD и сервисы на ней.

Re: Миграция из ipfw на pf

Сообщение Андрей » 07 мар 2011, 20:48

top -SP в пик нагрузки:
Код: Выделить всё
last pid: 36329;  load averages:  0.34,  0.42,  0.46   up 14+13:10:04  22:48:18
114 processes: 10 running, 87 sleeping, 17 waiting
CPU 0:  0.0% user,  0.0% nice,  4.7% system, 18.6% interrupt, 76.7% idle
CPU 1:  1.2% user,  0.0% nice,  5.8% system,  0.6% interrupt, 92.5% idle
CPU 2:  1.2% user,  0.0% nice,  6.4% system,  0.0% interrupt, 92.4% idle
CPU 3:  0.0% user,  0.0% nice,  6.4% system,  0.0% interrupt, 93.6% idle
CPU 4:  0.0% user,  0.0% nice,  2.9% system,  0.0% interrupt, 97.1% idle
CPU 5:  0.0% user,  0.0% nice,  3.5% system,  0.0% interrupt, 96.5% idle
CPU 6:  1.2% user,  0.0% nice,  9.2% system,  0.6% interrupt, 89.0% idle
CPU 7:  0.0% user,  0.0% nice,  5.8% system,  4.6% interrupt, 89.6% idle
Mem: 35M Active, 267M Inact, 259M Wired, 828K Cache, 112M Buf, 1630M Free
Swap: 20G Total, 20G Free

  PID USERNAME   THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
   13 root         1 171 ki31     0K     8K CPU5   5 336.7H 100.00% idle: cpu5
   11 root         1 171 ki31     0K     8K RUN    7 333.8H 100.00% idle: cpu7
   14 root         1 171 ki31     0K     8K CPU4   4 330.5H 100.00% idle: cpu4
   17 root         1 171 ki31     0K     8K CPU1   1 333.9H 98.68% idle: cpu1
   15 root         1 171 ki31     0K     8K CPU3   3 337.7H 97.36% idle: cpu3
   16 root         1 171 ki31     0K     8K RUN    2 322.8H 92.77% idle: cpu2
   12 root         1 171 ki31     0K     8K CPU6   6 322.0H 90.67% idle: cpu6
   18 root         1 171 ki31     0K     8K RUN    0 291.9H 80.08% idle: cpu0
   38 root         1 -68    -     0K     8K WAIT   0  40.9H 15.38% irq256: em0
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Миграция из ipfw на pf

Сообщение dimonix » 09 апр 2012, 12:18

хотелось бы поднять тему. приведите, пожалуйста, пример конфигурации ipfw_nat в пул, допустим, из ста внешних айпишников.
пока не смог найти аналога:
Код: Выделить всё
nat pass on em1 from 172.16.0.0/16 to any -> em1 round-robin sticky-address

в rc.conf для em1 прописано сто алиасов
зачем это нужно: внутренних клиентов сети с серыми ип в 3-4 раза больше доступных реальных адресов. при этом нужен механизм наиболее точной идентификации пользователей по парам "серый-белый" . все натить в один внешний адрес не катит.
dimonix
проходил мимо
 
Сообщения: 2
Зарегистрирован: 09 апр 2012, 12:09

Re: Миграция из ipfw на pf

Сообщение root » 09 апр 2012, 12:48

На лисяре есть пример NAT`а в пул адресов, смотри Пример 7
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Миграция из ipfw на pf

Сообщение dimonix » 09 апр 2012, 13:47

root писал(а):На лисяре есть пример NAT`а в пул адресов, смотри Пример 7

спасибо, это я уже видел. во-первых, есть сомнения на счет выполнения условий "round-robin sticky-address". а во-вторых есть вопрос - как создать подобную конфигурацию? прописывать 400+ строк вручную? а при добавлении еще 100 адресов в пул придется переписать все существующие правила "prob" и добавить еще 400 строк? просто хочется понять как другие люди реализуют подобные конфигурации.

и еще вопрос - если на внешнем интерфейсе маршрутизатора em1 стоят реальные ип с маской /30 (канал точка-точка), а белые ип выдаются из пула адресов, не назначенных на какой-либо интерфейс маршрутизатора, то конфигурация из примера выше будет работать?
pf позволяет сделать такое:
Код: Выделить всё
table <external_pool> {1.1.1.1,1.1.1.2, ...}
table <external_pool> persist
nat pass on em1 from 172.16.0.0/16 to any -> <external_pool> round-robin sticky-address
dimonix
проходил мимо
 
Сообщения: 2
Зарегистрирован: 09 апр 2012, 12:09

Re: Миграция из ipfw на pf

Сообщение Андрей » 10 апр 2012, 21:11

dimonix писал(а):прописывать 400+ строк вручную?

В любом случае есть оптимизация. Ищите решение, оно всегда есть.
dimonix писал(а):table <external_pool> {1.1.1.1,1.1.1.2, ...}

table <vpn> {172.16.0.0/24} - к примеру. Только не говорите, что в своем решении вы бы перечисляли все 400 ip :o
а еще можно:
Код: Выделить всё
table <rfcnets> {10.0.0.0/8, !192.168.1.0/24, 192.168.0.0/16, !172.16.0.0/16, 172.16.0.0/12 }

И, если мен память не изменяет, диапазоны через "-" прописывать.
это не вариант:
Код: Выделить всё
nat on em0 from 172.16.0.0/24 to any -> 89.237.***.**0
nat on em0 from 172.16.1.0/24 to any -> 89.237.***.**1
nat on em0 from 172.16.2.0/24 to any -> 89.237.***.**2
...
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Миграция из ipfw на pf

Сообщение root » 11 апр 2012, 08:14

dimonix писал(а): как создать подобную конфигурацию? прописывать 400+ строк вручную?

dimonix писал(а):просто хочется понять как другие люди реализуют подобные конфигурации.

люди пишут скрипты, которые и делают все это автоматически
поэтому при добавлении IP-адресов достаточно запустить скрипт и конфиг готов

dimonix писал(а):белые ип выдаются из пула адресов, не назначенных на какой-либо интерфейс маршрутизатора, то конфигурация из примера выше будет работать?

будет
но мы рекомендуем все же прописать эти адреса на роутере, либо опять же на верхней карте или на lo0
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Миграция из ipfw на pf

Сообщение METAJIJI » 11 июл 2012, 10:26

Очень хотелось бы увидеть как вы боритесь с pf nat + ftp и самое интересное как pf nat + несколько gre.
Если для pf nat + ftp есть костыль в виде ftp-proxy, то ничего более-менее адекватного не нашел для pf nat + gre.
Натит 1 сессию, а остальные просто не работают. В ipfw, который использует libalias есть специальная библиотека /lib/libalias_pptp.so ну и для ftp есть /lib/libalias_ftp.so - поэтому для нормальной работы этих протоколов достаточно просто правила nat.
Есть ли что-то подобное в pf или хотя бы костыль по аналогии с ftp-proxy?
METAJIJI
проходил мимо
 
Сообщения: 3
Зарегистрирован: 11 июл 2012, 10:19

Re: Миграция из ipfw на pf

Сообщение Андрей » 12 июл 2012, 06:12

METAJIJI писал(а): самое интересное как pf nat + несколько gre.

Код: Выделить всё
pass in quick proto gre from any to <me> keep state

не оно?

а про ftp я чего-то не понял. :shock:
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Миграция из ipfw на pf

Сообщение METAJIJI » 12 июл 2012, 10:04

Наверно я неясно излагаю мысли, тогда распишу на примерах.
Допустим нам нужно реализовать нат, который будет по возможности не менять порты(чтобы у нас работал например SIP трафик), и пропускать клиентам ftp, PPTP трафик. в ipfw это выглядит вот так.
Код: Выделить всё
nat 1 config if ext0 same_ports
add nat 1 ip from any to any via ext0

При этом клиенты, сидящие за ipfw NAT без проблем подключаются к ftp в интернете, и к VPN серверам через PPTP.

Смотрим точно такой же пример NAT на pf:
Код: Выделить всё
nat on ext0 inet from int0:network to !(self) -> (ext0) static-port

Казалось бы чего еще нужно от жизни? А вот к ftp клиенты не могут подключиться, делаем следующее:
Добавляем правила в pf:
Код: Выделить всё
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on int0 inet proto tcp from <localnet> to !(self) port ftp -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"

Запускаем демона ftp-proxy на 127.0.0.1 и порту 8021

В итоге клиенты и с pf nat и с ipfw nat подключаются к ftp серверам, но вот беда, клиенты за pf nat не могут подключиться к VPT PPTP серверу.
Проблема решается не очень адекватно:
Код: Выделить всё
rdr on ext0 proto {tcp,udp} from any to ext0 port {1723} -> $IP_VPN_СЕРВЕРА
rdr on ext0 proto gre from any to ext0 -> $IP_VPN_СЕРВЕРА

Т.е. мне нужно бегать к каждому клиенту и узнавать к какому vpn серверу он собирается подключаться и добавлять эти правила для каждого VPN сервера, к которому хотят подключаться клиенты... :lol:

В итоге на ipfw эти вещи просто работают без лишних телодвижений, а вот в pf NAT какой-то "ущербный", для каждого протокола ему нужен отдельный демон, который бы изменял пакеты, если это требуется. (пример ftp, gre)
METAJIJI
проходил мимо
 
Сообщения: 3
Зарегистрирован: 11 июл 2012, 10:19

Re: Миграция из ipfw на pf

Сообщение Андрей » 12 июл 2012, 13:49

Чего-то я вообще не понял о чем речь.
4 года сеть работает на pf-nat + раздача сессий по pptp. И к ftp нормально подключение и sip телефония нормально работает. Конфиг pf приведен ранее в теме.

Стороны укажите в вашем вопросе к примеру:
METAJIJI писал(а):А вот к ftp клиенты не могут подключиться

ftp находится в инете? ftp://mirror.yandex.ru ; ftp://d-link.ru ... подключается без вопросов. Или вам надо чтобы из инета могли подключиться до машины с вашим клиентом? Это отдельный разговор, у меня он решается предоставлением белого ip адреса клиенту, у которого крутится ftp-сервер, а не пробросом порта за нат-сеть и т.п.

METAJIJI писал(а):rdr on ext0 proto {tcp,udp} from any to ext0 port {1723} -> $IP_VPN_СЕРВЕРА

редирект tcp и udp пакетов С любого подключения к 1723 tcp порт интерфейса ext0 НА $IP_VPN_СЕРВЕРА. Брр. не понял.
pptp over pptp надо? Если да, то оно жить не будет ибо протокол этого не позволяет. pptp over pppoe - Другое дело.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Пред.След.

Вернуться в FreeBSD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8