The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Мультироутинг во FreeBSD, IPNAT + IPFW (ipfw freebsd forward route nat firewall)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ipfw, freebsd, forward, route, nat, firewall,  (найти похожие документы)
From: Дмитрий Ильин <dm80@kaluga21vek.ru.> Newsgroups: email Date: Mon, 17 Dec 2007 14:31:37 +0000 (UTC) Subject: Мультироутинг во 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 Собственно, все. Мы получили готовый роутер с возможностью множественной маршрутизации в ядре, что позволеят его использовать даже на слабых машинах.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1.1, PavelR (??), 07:25, 18/12/2007 [ответить]  
  • +/
    >options         HZ=1000   # кол-во просматриваемых пакетов в очереди при шейпинге

    Я как-то не понял этот момент :)

    ># клиента 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

    ну если клиента, то наверное /32, или я опять чего-то не понял ?


    # следующие три правила перенаправляют пакеты на альтернативный шлюз для сети 194.1.1.200/29

    А перед этими тремя правилами, _возможно_, надо добавить правила, которые разрешат прохождение пакетов в другие локальные подсетки (иначе пакет отправят на внешний рутер и там потеряют, не будет работать соединение из локальной сети с внешним айпи сервера).


     
  • 1.2, Дмитрий (??), 01:52, 21/12/2007 [ответить]  
  • +/
    Пардон за неточность. Спасибо, что поправили. :) Насчет клиента - совершенно верно, маскируем его 32 битами (если речь идет не о сети а об отдельном клиенте). А насчет перенаправления пакетов - перед правилами форвардинга - можно добавить правило
    /sbin/ipfw add pass all from me to any keep-state
     
     
  • 2.3, max (??), 00:35, 29/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Почему-то не работает =( Все на гейт по-умолчанию уходит...
     
     
  • 3.4, dm80 (ok), 13:43, 29/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >Почему-то не работает =( Все на гейт по-умолчанию уходит...

    опция IPFIREWALL_FORWARD в ядре присутствует?


     
  • 2.8, Кирилл (??), 16:22, 11/01/2008 [^] [^^] [^^^] [ответить]  
  • +/
    > pass all from me to any keep-state

    Опасное правило, вы тем самым даёте возможность вашему маршрутизатору инициировать соединения самостоятельно. Маршрутизатор не должен иметь возможности сам устанавливать соединения с кем либо.

     

  • 1.5, max (??), 15:50, 29/12/2007 [ответить]  
  • +/
    Да присуствует Вот все настроечки, если ничего не забыл упомянуть ----------... большой текст свёрнут, показать
     
     
  • 2.6, conf (ok), 16:01, 29/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    В догонку: я не понимаю почему раньше проблем с фрагментированными пакетами не было (я даже не задумывался о них), а теперь пришлось их разрешить, т.к. в /var/log/security

    Dec 29 12:01:34 rto kernel: ipfw: 65534 Deny TCP 195.16.50.18 1.1.1.2 in via fxp0 (frag 33180:8@1472)
    Dec 29 12:01:34 rto kernel: ipfw: 65534 Deny TCP 195.16.50.18 1.1.1.2 in via fxp0 (frag 33181:8@1472)
    Dec 29 12:01:36 rto kernel: ipfw: 65534 Deny TCP 195.16.50.18 1.1.1.2 in via fxp0 (frag 35141:8@1472)
    Dec 29 12:01:40 rto kernel: ipfw: 65534 Deny TCP 195.16.50.18 1.1.1.2 in via fxp0 (frag 40387:8@1472)
    Dec 29 12:01:48 rto kernel: ipfw: 65534 Deny TCP 195.16.50.18 1.1.1.2 in via fxp0 (frag 47718:8@1472

    Это при входе на интернет-банк клиент страницку.

    А вывод о том, что все идет через дефалтгейтвей по логам видно было:
    Dec 29 00:28:35 rto kernel: ipfw: 65534 Deny TCP 192.168.5.105:1159 195.161.112.6:80 out via fxp0

    ipmon настроить не получилось.. пусто в логе.

    Спасибо. С наступающим.

     

  • 1.9, Pahanivo (??), 21:10, 21/02/2008 [ответить]  
  • +/
    > options         HZ=1000   # кол-во просматриваемых пакетов в очереди при шейпинге

    бред сивой кабылы
    это во первых не количество, а частота опроса девайса при активном device polling
    во вторых к шейперу не иммет никакого отношения
    во вторых постановка задачи сама по себе  не понятна, соответственно непонятные и все последующие действия

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру