Nobody about something

Лучшее — враг хорошего или странности с PF

Написано 29 ноября 2008 в 5:53 - Рубрики: *nix

На шлюзе у меня в качестве файрвола, шейпера, и собственно NAT`а работает PF.
Сегодня ради кое-каких экспериментов на внешний IP шлюза повесил алиас. Само по себе это не страшно так как за шлюзом стоит модем в режиме роутера.

Но начали происходить «странные» вещи.
Я почти не мог достучаться по http, по pop и т.п. по TCP протоколам.
Но, при этом с самого сервера всё работало нормально.

На помощь пришёл tcpdump. Натравил я его на 110 порт, и стал телнетиться.
А увидел я там следующее. NAT подставлял алиас в качестве адрес отправителя, вместо основного IP. Но этот алиас был абсолютно из другой сети, и повешан был ради опытов.
Модем ответные пакеты отправлял на него, но так как этот IP из другой сети, пакеты никуда не приходили.

Почему NAT делал так мне было ясно. В конфиге PF нат определялся такой строкой

nat on $ext_if from $lan to !$lan -> ($ext_if)

Скобки означаю, что в качестве адреса подставлять надо любой адрес на интерфейсе ext_if. Сделана эта возможность для динамических IP, чтобы не было необходимости каждый раз при изменении IP, перечитывать конфиг.

Я убрал алиас с интерфейса. Вот тут и началось интересное. PF продолжал подставлять его адрес. Я перечитал правила PF — ничего не изменилось. PF и сервак перезапускать не хотелось. Изменил строку в конфиге на такую

nat on $ext_if from $lan to !$lan -> $ext_if

, перечитал правила — всё стало нормально.

Где PF закэшировал IP алиаса — загадка…
(подробнее о настройке PF можно почитать в этой записи)

Метки: ,

Один комментарий на запись “Лучшее — враг хорошего или странности с PF”

  1. ttys пишет 23 октября 2011 в 2:04

    правила как перечитывал?
    надо pfctl -F all ; pfctl -f /….путь к конфиу
    тогда «кеша» не будет а точнее не кеша а keepstate отвалится и применятся новые правила