Инструкция по настройке PF nat с распределением на 2 канала

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Инструкция по настройке PF nat с распределением на 2 канала

Сообщение sopov »

Последние 2 дня посвятил поднятию pf-nat. Так как в сети мало адекватной информации по поднятию этого замечательного ната - хочу сделать эту конфигурацию достоянием масс.
К слову pf является ядерным натом и очень хорошо справляется с большими нагрузками - думаю 300 мегабит прокачает без проблем, только тогда обязательно нужно включить полинг - т.к. машина просто загнется от прерываний...

Вобщем конфигурация подогнана по 2 канала и 3 ip пула.
10.20.0.0/16 - использует http с 2 канала и все остальное с 1 го.
10.30.0.0/16 - все идет с 1 го канала
10.40.0.0/16 - все идет с 2 го канала
Для включения pf следует:
1. Собрать ядро с данными опциями

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

device pf
device pflog
device pfsync
2. Добавить в /etc/rc.conf

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

pf_enable="YES"                 
pf_rules="/etc/pf.conf"
3. Coздать файл /etc/pf.conf следующего содержания:
(ip адреса естественно подставить свои)

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

set optimization aggressive
# Указываем используемые сетевые интерфейсы:

ext_if_a = "fxp0"

ext_if_b = "fxp1"

# Для каждого из каналов задаем IP-адрес шлюза:

ext_gw_a = "192.168.2.1"

ext_gw_b = "192.168.1.1"

ext_ip_a = "192.168.2.2"

ext_ip_b = "192.168.1.2"


nat on $ext_if_a inet from { 10.20.0.0/16 } to any port { 80, 81, 8080 } -> $ext_ip_b:0

nat on $ext_if_a inet from { 10.20.0.0/16, 10.30.0.0/16 } to any -> $ext_ip_a:0

nat on $ext_if_a inet from { 10.40.0.0/16 } to any -> $ext_ip_b:0

# Важный момент: направляем исходящие пакеты в канал, соответствующий адресу источника:

pass in all
pass out all


pass out route-to ($ext_if_a $ext_gw_a) inet from ($ext_if_a) to !(self:network) keep state

pass out route-to ($ext_if_b $ext_gw_b) inet from ($ext_if_b) to !(self:network) keep state

##// Разрешаем входящие подключения к обслуживаемым TCP-сервисам:

pass in on $ext_if_a reply-to ($ext_if_a $ext_gw_a) inet proto tcp to any keep state

pass in on $ext_if_a inet proto tcp from ($ext_if_a:network) to any keep state


pass in on $ext_if_b reply-to ($ext_if_b $ext_gw_b) inet proto tcp to any keep state

pass in on $ext_if_b inet proto tcp from ($ext_if_b:network) to any keep state
Строки не переносить, в конце файла добавить пустую строку.

4. Включить нат командой pfctl -e
5. Загрузить параметры из файла командой pfctl -f /etc/pf.conf

Дальше можно отключить Ваш natd или ipnat. :)
Разумеется модуль pf можно добавить в систему командой kldload pf без пересборки ядра (только следует включить эту команду в автозагрузку.

А эту инструкцию можно добавить в инструции на сайте.

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

большое спасибо за иследование


немного подгоним под общий взрослый стандарт и сделаем на сайите. Как Вас подписать ?


вот ещё

http://abills.net.ua/wiki/doku.php?id=a ... er:2way:ru


Ещё раз спасибо

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

Да незачто :) Просто у меня стала задача разнести пулы по каналам и типам трафика. Представить я думаю просто по нику :wink:

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

pfSense изначально под пфнат заточен... скоро закончу отладку :wink:

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Сообщение sopov »

Спасибо дядька! Ждем с нетерпением. :) Я специально заказал 2 штуки sun netra\fire для этого. Хочу их на pppoe поставить...

RusB1T
Сообщения: 166
Зарегистрирован: Вс июн 22, 2008 5:49 am
Откуда: Красноярск
Контактная информация:

переход с ipfw

Сообщение RusB1T »

Хочу перейти с ipfw на pf. Причина - появился второй канал, и теперь необходима балансировка, почитал в интернете - на ipfw нормальную балансировку не сделать.
Вопрос такой - что делать с vpn соединениями, им требуется шейпинг, а abills по умолчанию на ipfw настроен.
Или использовать два файрволла?

mr_gfd
Сообщения: 129
Зарегистрирован: Пт ноя 03, 2006 8:34 am

Сообщение mr_gfd »

Пора шейпинг переводить на pf. Фильтр негативного депозита уже прикрутил на pf (по таблице редирект делает) и включение nat для успешно авторизвавшихся (таблица для валидных юзеров для нат)

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Re: переход с ipfw

Сообщение sopov »

RusB1T писал(а):Хочу перейти с ipfw на pf. Причина - появился второй канал, и теперь необходима балансировка, почитал в интернете - на ipfw нормальную балансировку не сделать.
Вопрос такой - что делать с vpn соединениями, им требуется шейпинг, а abills по умолчанию на ipfw настроен.
Или использовать два файрволла?
Балансировка штука не совсем простая...Если балансировать весь трафик, то у пользователей будут проблемы с web формами авторизации, форумами и т.д., если только определенные порты, то нормального эффекта неполучите. Поэтому или по пулам ip или собственная AS и BGP.
RusB1T писал(а):на ipfw нормальную балансировку не сделать.
Вопрос такой - что делать с vpn соединениями, им требуется шейпинг, а abills по умолчанию на ipfw настроен.
Или использовать два файрволла?
Непонял немного.. А чем собственно пайпы в ipfw неустраивают?
IPFW давно уже не тот, что был 3-5 ветках фри. Шейпер в PF реализован с помощью ALTQ - особых отличий в работе от ipfw pipe незамечали.

RusB1T
Сообщения: 166
Зарегистрирован: Вс июн 22, 2008 5:49 am
Откуда: Красноярск
Контактная информация:

Re: переход с ipfw

Сообщение RusB1T »

sopov писал(а): Непонял немного.. А чем собственно пайпы в ipfw неустраивают?
IPFW давно уже не тот, что был 3-5 ветках фри. Шейпер в PF реализован с помощью ALTQ - особых отличий в работе от ipfw pipe незамечали.
Я имел ввиду что abills сам прописывает pipe в файрволл.

А вообще кто на ipfw настроил одновременно работу двух каналов, чтобы клиенту назначался первый или второй канал, по выбору админа.
Пытался настроить, второй канал упорно прет не через тот интерфейс =(

sopov
Сообщения: 610
Зарегистрирован: Вс апр 02, 2006 7:13 pm

Re: переход с ipfw

Сообщение sopov »

RusB1T писал(а): А вообще кто на ipfw настроил одновременно работу двух каналов, чтобы клиенту назначался первый или второй канал, по выбору админа.
Пытался настроить, второй канал упорно прет не через тот интерфейс =(
Я настраивал. Скажу честно - с natd работает не очень. При большой нагрузке увеличивается латентность сети. Хитрость в том, что нужно запустить 2 natd на разных портах и для разных интерфейсов.

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

natd -a 1.1.1.1 -p 8668
natd -a 2.2.2.2 -p 8778
Далее в конфиг ipfw добавить нечто вроде этого:

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

ext_if_a = "ip 1 интерфейса"
ext_if_b = "ip 2 интерфейса"
ext_gw_a = "шлюз для 1 интерфейса"
ext_gw_b = "шлюз для 2 интерфейса"

add 200 divert 8778 ip from 10.20.0.0/16 to any dst-port 80,81,8080
add 210 divert 8668 ip from 10.20.0.0/16 to any
add 220 divert 8668 ip from 10.30.0.0/16 to any
add 230 divert 8778 ip from 10.40.0.0/16 to any
add 240 fwd $ext_gw_b ip from $ext_if_b to any
add 250 fwd $ext_gw_a ip from $ext_if_a to any
add 260 divert 8778 ip from any to $ext_if_b
add 270 divert 8668 ip from any to $ext_if_a
Может пригодится, но лучше, гибче и удобнее в качестве ната использовать pfnat по инструкции описаной мною в начале топика.

mr_gfd
Сообщения: 129
Зарегистрирован: Пт ноя 03, 2006 8:34 am

Re: переход с ipfw

Сообщение mr_gfd »

sopov писал(а):Балансировка штука не совсем простая...Если балансировать весь трафик, то у пользователей будут проблемы с web формами авторизации, форумами и т.д., если только определенные порты, то нормального эффекта неполучите. Поэтому или по пулам ip или собственная AS и BGP.
А keep-state что-ли уже перестал работать?

jinaro
Сообщения: 61
Зарегистрирован: Вт ноя 04, 2008 8:10 pm

Сообщение jinaro »

подскажыте пожалуйста как мне зделать так чтобы все адреса пингались через ext_if_b ?

RusB1T
Сообщения: 166
Зарегистрирован: Вс июн 22, 2008 5:49 am
Откуда: Красноярск
Контактная информация:

Сообщение RusB1T »

Два варианта.
1. Прописывай route, проверить, удалить route
2. ping -S src_ip dst_ip

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

sopov писал(а):Балансировка штука не совсем простая...Если балансировать весь трафик, то у пользователей будут проблемы с web формами авторизации, форумами и т.д., если только определенные порты, то нормального эффекта неполучите. Поэтому или по пулам ip или собственная AS и BGP.
разумеется, настоящая честная балансировка возможна только протоколами динамической маршрутизации... как следствие - статические ипы на внешних каналах + поддержка со стороны прова... хотя у меня под линухом работает вполне сносно с помощью iptables + iproute2, ломика и такой-то матери :D
Любой тупик - это тщательно замаскированный выход.

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Сообщение Abram »

ran писал(а):
sopov писал(а):Балансировка штука не совсем простая...Если балансировать весь трафик, то у пользователей будут проблемы с web формами авторизации, форумами и т.д., если только определенные порты, то нормального эффекта неполучите. Поэтому или по пулам ip или собственная AS и BGP.
разумеется, настоящая честная балансировка возможна только протоколами динамической маршрутизации... как следствие - статические ипы на внешних каналах + поддержка со стороны прова... хотя у меня под линухом работает вполне сносно с помощью iptables + iproute2, ломика и такой-то матери :D
А подробнее можно?

Ответить