Страница 5 из 6

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

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

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

в rc.conf для em1 прописано сто алиасов
зачем это нужно: внутренних клиентов сети с серыми ип в 3-4 раза больше доступных реальных адресов. при этом нужен механизм наиболее точной идентификации пользователей по парам "серый-белый" . все натить в один внешний адрес не катит.

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

СообщениеДобавлено: 09 апр 2012, 12:48
root
На лисяре есть пример NAT`а в пул адресов, смотри Пример 7

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

СообщениеДобавлено: 09 апр 2012, 13:47
dimonix
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

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
...

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

СообщениеДобавлено: 11 апр 2012, 08:14
root
dimonix писал(а): как создать подобную конфигурацию? прописывать 400+ строк вручную?

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

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

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

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

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

СообщениеДобавлено: 11 июл 2012, 10:26
METAJIJI
Очень хотелось бы увидеть как вы боритесь с 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?

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

СообщениеДобавлено: 12 июл 2012, 06:12
Андрей
METAJIJI писал(а): самое интересное как pf nat + несколько gre.

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

не оно?

а про ftp я чего-то не понял. :shock:

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

СообщениеДобавлено: 12 июл 2012, 10:04
METAJIJI
Наверно я неясно излагаю мысли, тогда распишу на примерах.
Допустим нам нужно реализовать нат, который будет по возможности не менять порты(чтобы у нас работал например 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)

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 - Другое дело.