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 адресов, рекомендую использовать следующую конфигурацию:
/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