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 можно почитать в этой записи)

Динамический шейпинг во FreeBSD на основе PF

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

Как и обещал, расскажу об устройстве собственно NAT`а на шлюзе. Но не простого NAT`а, а ещё и с шейпингом. Но не с простым шейпингом, а динамическим. То есть, при отсутствии активности одного из компутеров в интернете, весь канал будет отдаваться другим.
Читать полностью »