IPFW NAT в FreeBSD 8
Сегодня речь пойдет о NAT, а точнее о kernel nat (IPFIREWALL_NAT). На новом сервере решил опробовать свеженькую FreeBSD 8 для организации выхода в интернет.
Изначально о встроенном в ядро NAT не помышлял и cделал по старинке, использую демон NATD. Всё замечательно заработало, однако при запуске сервера в реальную работу вылезло одно не приятное "но".
При подключении по SSH на сервер наблюдались жуткие тормоза программ, использующих псевдографику, например MC прорисовывал панельки в течение минуты! Такая же ситуация наблюдалась и в sysinstall. Медленный заход в MC мог наблюдаться например, если не правильно указаны или не верно настроены DNS адреса, но здесь был не тот случай, да и характер прорисовки экрана иной. Причем локально с консоли всё работало шустро. Выяснилось, что при отключении NATD скорость работы по SSH восстанавливается.
Честно говоря природу данного явления так и не выяснил. Зато решил опробовать встроенный в ядро NAT (эта возможность появилась начиная c 7 версии FreeBSD).
Погуглив, выяснил, что IPFW NAT имеет общую библиотеку с natd и в принципе почти полностью повторяет все его функции и ещё ему по силам пропускать через себя трафик свыше 800 мбит/c. Хватит слов - к делу. Собираем ядро, добавив следующие опции:
# IPFW
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options DUMMYNET
# IPFW kernel nat support
options IPFIREWALL_NAT
options LIBALIAS
Мы включили ipfw nat и dummynet (для управления трафиком) в наше ядро. Далее собираем и устанавливаем новое ядро, после чего добавляем необходимые строчки в /etc/rc.conf.
Приведу простой пример организации шлюза на базе FreeBSD 8. В примере интерфейс, смотрящий в Интернет, будет иметь имя em0
...
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="em0"
firewall_type="OPEN"
...
В результате получаем простейший интернет шлюз с NAT. Firewall полностью открыт. О настройке правил IPFW и пробросе портов расскажу в одной из следующих статей. Кстати проблемы с программами, использующими псевдографику, о которых писал выше, исчезли.
Продолжение статьи - проброс портов в ядерном IPFW NAT
Комментариев: 9
А пример где???
Пример чего именно? Собрав ядро с данными опциями и прописав в /etc/rc.conf строки, указанные выше, вы уже получите работающий шлюз. Другой вопрос, что он полностью открыт, но настройка файервора ipfw - это тема будущей статьи.
Спасибо, более короткой инструкции по настройке не видел. Правда если не знаешь, как пересобирать ядро....)))
Про сборку ядра, я уже писал в одной статье, вот ссылочка: Сборка ядра в FreeBSD
Путаюсь, наверное совсем запутался. Подскажите - вот собрали мы ядро с
options IPFIREWALL_NAT
Тогда зачем еще указываем в rc.conf
firewall_enable="YES"
firewall_nat_enable="YES
Просто нуб я во фряхе - только учу...
Данные опции лишь добавляют в ядро функционал, чтобы дальше мы смогли его влючить в работу.
Полностью согласен с этим 100% таже проблема
Ядро можно и не пересобирать
Модули сами подгружаются и всё отлично работает
Можно то, оно конечно, можно... Однако я предпочитаю собирать ядро под конкретную систему, чтобы не было ничего лишнего, а нужные мне опции присутствовали.