Документация по ОС FreeBSD Вторник, 16.04.2024, 07:15
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
IPFW [58]

Главная » Статьи » FireWall » IPFW

Мультироутинг во FreeBSD, IPNAT + IPFW
Данная статья рассчитана большей частью на новичков во FreeBSD. Написать её решил т к не нашел подходящего решения для следующей ситуации:

Имеется роутер FreeBSD, на внешнем интерфейсе ISP выделяет несколько ip сетей, принадлежащих разным клиентам во внутренней сети.

Хотелось  бы посоветовать в альтернативу natd использовать ipnat, т к он работает в пространстве ядра, что существенно на слабых машинах (<= PII) с большим количеством клиентов (>=100). Кроме того, ipnat более функционален, на мой взгляд, т к natd - это более ранняя реализация NAT во FreeBSD.

Теперь о трансляции адресов: при наличии на внешнем интерфейсе нескольких публичных IP адресов, рекомендую использовать следующую конфигурацию:

ЯДРО (дописываем в конфиг след строки):

        [dm80@k /usr/src/sys/i386/conf]$ tail -n 15 K

        # firewall
        (обязательно)
        options         IPFIREWALL
        options         IPFIREWALL_FORWARD
        (далее опционально)
        options         DUMMYNET  # шейпер
        options         HZ=1000   # кол-во просматриваемых пакетов в очереди при шейпинге

предположим, мы имеем на внутреннем интерфейсе rl0 адрес 192.168.0.1/24
внешний - rl1

        195.5.43.66/30
        194.1.1.202/29
        194.1.1.203/29
        194.1.1.204/29

листинг /etc/rc.conf

        gateway_enable="YES"
        defaultrouter="195.5.43.65"
        ifconfig_rl1="inet 195.5.43.66  netmask 255.255.255.252"
        ifconfig_rl1_alias0="inet 194.1.1.202 netmask 255.255.255.248"
        ifconfig_rl1_alias1="inet 194.1.1.203 netmask 255.255.255.248"
        ifconfig_rl1_alias2="inet 194.1.1.204 netmask 255.255.255.248"
        ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
        firewall_enable="YES"
        firewall_script="/etc/ipfw/fw"
        ipnat_enable="YES"
        ipnat_rules="/etc/ipfw/ipnat"

листинг /etc/ipfw/fw

        /sbin/ipfw add check-state # проверяем наличие динамических правил
        /sbin/ipfw add pass all from any to any via lo0 # локальная петля

        # следующие три правила перенаправляют пакеты на альтернативный шлюз для сети 194.1.1.200/29
        /sbin/ipfw add fwd 194.1.1.201 all from 194.1.1.202 to not me
        /sbin/ipfw add fwd 194.1.1.201 all from 194.1.1.203 to not me
        /sbin/ipfw add fwd 194.1.1.201 all from 194.1.1.204 to not me

        ## собственно далее пишем свой набор правил, для примера разрешим всё и вся ;)
        /sbin/ipfw add pass all from any to any


листинг /etc/ipfw/ipnat
тут подпишусь под каждой строчкой

        # клиента 192.168.0.2 маскируем адресом 195.5.43.66, rl1 - внешний
        # интерфейс
        # разрешим использовать пассивный и активный режим ftp
        map rl1 192.168.0.2/32 -> 195.5.43.66/32 proxy port ftp ftp/tcp
        # динамическая нумерация портов исходящих пакетов
        # (рекомендую для нескольких внутренних клиентов, чтобы
        # избежать конфликтов)
        map rl1 192.168.0.2/32 -> 195.5.43.66/32 portmap tcp/udp auto
        # все прочее, что не попадает под действие вышеуказанных правил
        map rl1 192.168.0.2/32 -> 195.5.43.66/32

        # клиента 192.168.0.3 маскируем адресом 194.1.1.202
        map rl0 192.168.0.3/24 -> 194.1.1.202/32 proxy port ftp ftp/tcp
        map rl0 192.168.0.3/24 -> 194.1.1.202/32 portmap tcp/udp auto
        map rl0 192.168.0.3/24 -> 194.1.1.202/32

        # клиента 192.168.0.40 маскируем адресом 194.1.1.203
        map rl0 192.168.0.40/24 -> 194.1.1.203/32 proxy port ftp ftp/tcp
        map rl0 192.168.0.40/24 -> 194.1.1.203/32 portmap tcp/udp auto
        map rl0 192.168.0.40/24 -> 194.1.1.203/32

        # клиента 192.168.0.100 маскируем адресом 194.1.1.204
        map rl0 192.168.0.100/24 -> 194.1.1.204/32 proxy port ftp ftp/tcp
        map rl0 192.168.0.100/24 -> 194.1.1.204/32 portmap tcp/udp auto
        map rl0 192.168.0.100/24 -> 194.1.1.204/32

PS: у меня данная конфигурация работает так же и с редиректом портов

        # пример
        rdr rl1 194.1.1.204/32 port 80 -> 192.168.0.100 port 80 tcp

Собственно, все. Мы получили готовый роутер с возможностью множественной маршрутизации в ядре, что позволеят его использовать даже на слабых машинах.



Источник: http://www.opennet.ru/base/net/ipfw_multiroute.txt.html
Категория: IPFW | Добавил: oleg (26.12.2007) | Автор: Дмитрий Ильин
Просмотров: 2308 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024