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

PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 11:04:00
Dorlas
Сегодня столкнулся с очень странным багом:

Была у меня некогда задача: Есть два интернет-канала, оба IP статические, один канал - основной (defaultrouter), через второй должен работать почтовый SMTP-сервер Postfix (принимать и отправлять почту).

Именно в тот момент активно изучал PF - с его помощью и решил тогда задачу:

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

# Правило для входящей почты:
pass in on $if_ext_second reply-to ($if_ext_second $router_second) inet proto tcp to $if_ext_second port 25 keep state

# Правила для отправляемой почты:
# NAT:
nat on $if_ext_first inet proto tcp from self to any port 25 -> $if_ext_second
# Фильтрация:
pass out route-to ( $if_ext_second $router_second ) inet from $if_ext_second keep state
Реализовано это было на FreeBSD 7.1

Сегодня возникла точно такая же задача, система такая же (FreeBSD 7.1), разница лишь в том, что основной Интернет-канал - через PPTP (использовал VPN-клиент MPD v5.3).

Сделал такие же правила (с учетом интерфейсов в /etc/pf.conf), применил (pfctl -f /etc/pf.conf) и стал проверять.
Первое правила (для входящей почты) работает замечательно, но вот второе вызывает полное зависание системы (нет ничего на экране, не реагирует клавиатура, power - помогает только reset).

Причем зависает только тогда, когда в правило NAT попадает пакет - в моем случае зависание стабильно (проверял несколько раз) вызывает такая команда:

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

echo "test mail" | mail -s "test mail" admin@xxxx
В общем такая ситуация...думаю, дело связано с NetGrath и хуками/нодами (т.е. с MPD и ее подсистемами)...

Буду раз любому совету!

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 11:19:34
paradox
mav@ фрии бсд орг
пишите письма

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 11:27:02
Dorlas
Александру я первым делом написал :)

Вот думаю, может попробовать MPD более старых версий или pptp-client ?

Жаль, что сервер далеко от меня находится (а народ там вовсю работает) :(

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 11:42:33
paradox
ppp попробуй

mpd нет смысла пробовать
поскольку там основное все в ядре

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 12:14:08
Dorlas
To paradox:

Как думаешь, вот это моя ситуация: ???
http://sourceforge.net/forum/forum.php? ... m_id=44693

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-08 12:17:03
paradox
собери ядро с дебагом
и сделай bt
а иначе не понять где у тебя падает

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-09 18:01:23
Dorlas
Почитал man 5 postconf, нашел вот такую штуку в описании inet_interfaces:

When inet_interfaces specifies just one IPv4 and/or IPv6 address that
is not a loopback address, the Postfix SMTP client will use this
address as the IP source address for outbound mail. Support for IPv6 is
available in Postfix version 2.2 and later.

Сменил параметр в main.cf, перестартовал postfix, закомментировал NAT-правило в PF, оставил только такое:

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

pass out route-to ( $if_ext_second $router_second ) inet from $if_ext_second keep state
Попробовал послать письмо - ушло с нужного адреса - ура! :)

Сама система почтарь видит (несмотря на отсутствие порта 25 на loopback), поэтому осталось только дать доступ локалке на SMTP:

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

rdr inet proto tcp from $if_lan/24 to $if_lan port 25 -> $if_ext_second port 25
Думаю, на этом задачу можно считать решенной :)

Re: PF + NAT + MPD 5.3 - странный баг

Добавлено: 2009-05-09 21:57:10
iZEN
"keep state" можно не писать. Оно по умолчанию для протокола tcp выставляется.