Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
www.lissyara.su
—> статьи
—> FreeBSD
|
ngctl mkpeer ipfw: nat 100 in ngctl name ipfw:100 nat1 ngctl connect ipfw: nat1: 200 out ngctl msg nat1: setaliasaddr 192.168.1.1 |
Была создана нода ng_nat под именем nat1, и в качестве первичной настройки ей было указано использовать IP адрес 192.168.1.1 для алиасинга. Нода под именем nat1 имеет два хука. Хук in, через который в ноду поступает трафик для демаскировки, соединен с хуком под номером 100 у ноды ipfw. Хук out, через который в ноду поступает трафик для маскировки, соединен с хуком под номером 200 у ноды ipfw.
Настройка ipfw для пересылки трафика в ng_nat:
ipfw add netgraph 100 all from any to any in via fxp0 ipfw add netgraph 200 all from any to any out via fxp0 |
Правила пересылают весь трафик приходящий к нам через внешний интефейс fxp0 в netgraph через хук 100, а весь исходящие трафик пересылается в netgraph через хук 200. Таким образом трафик из ipfw перенаправляется на обработку в экземпляр ng_nat.
Показанный выше пример дает общее представление о принципах настройки связки ipfw + ng_nat. Ниже будут приводиться примеры более детальной ручной настройки ng_nat, а в конце заметки будет пример использования rc.d скрипта ng_nat.sh с помощью которого можно отказаться от рутины и автоматизировать настройку через /etc/rc.conf
Возможности ng_nat и опции конфигурации.
Ниже приводятся ключевые слова используемые при настройке ng_nat через сообщения netgraph, примеры сообщений netgraph, а так же их эквиваленты применяемые для настройки ноды ng_nat через rc.d интерфейс реализованный в ng_nat.sh.
Сообщения netgraph для настройки ng_nat:
setaliasaddr Параметр указывает IP адрес используемый при маскировании и демаскировании. Пример сообщения netgraph: ngctl msg nat1: setaliasaddr 192.168.1.1 Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_interface="192.168.1.1" ng_nat_nat1_interface="fxp0" |
setmode Устанавливает режимы работы экземпляра ната. Для настройки доступны следующие опции (опция - шестнадцатеричное значение - [десятичный эквивалент]): NG_NAT_LOG 0x01 [1] NG_NAT_DENY_INCOMING 0x02 [2] NG_NAT_SAME_PORTS 0x04 [4] NG_NAT_UNREGISTERED_ONLY 0x10 [16] NG_NAT_RESET_ON_ADDR_CHANGE 0x20 [32] NG_NAT_PROXY_ONLY 0x40 [64] NG_NAT_REVERSE 0x80 [128] Каждое из этих значений в бинарном виде выражается с помощью установки одного разряда. Например NG_NAT_PROXY_ONLY [64]= 01000000. Комбинация этих значений задает режим работы экземпляра ната. Например для установки режимов NAT_LOG + DENY_INCOMING + SAME_PORTS + UNREGISTERED_ONLY + RESET_ON_ADDR_CHANGE мы должны передать управляющее сообщение содержащее десятичное значение 1+2+4+16+32=55 Пример сообщения netgraph: ngctl msg nat1: setmode { flags=55 mask=55 } Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_set_mode="log deny_incoming same_ports unregistered_only reset_on_addr_change" |
settarget Устанавливает адрес по-умолчанию на который должна происходить передача входящего трафика, когда в таблице переадресации нет полного совпадения для какой-либо из ранее установленных сессий или правил пересылки установленных вручную. Функционал аналогичный режиму "natd -t". Пример сообщения netgraph: ngctl msg nat1: settarget 172.16.0.100 Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_set_target="172.16.0.100" |
redirectport Проброс входящих TCP/UDP соединений на внутренние хосты. Пример сообщения netgraph: ngctl msg nat1: redirectport { local_addr=172.16.0.100 alias_addr=192.168.1.1 remote_addr=8.8.8.8 local_port=8080 alias_port=80 remote_port=12345 proto=6 description="this is test" } Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_redirect_port0="tcp 172.16.0.100:8080 192.168.1.1:80 8.8.8.8:12345" ng_nat_nat1_redirect_port0_description="this is test" |
redirectaddr Проброс входящих TCP/UDP соединений на внутренние хосты. Пример сообщения netgraph: ngctl msg nat1: redirectaddr { local_addr=172.16.0.100 alias_addr=192.168.1.1 description="this is test" } Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_redirect_address0="172.16.0.100 192.168.1.1" ng_nat_nat1_redirect_address0_description="this is test" |
redirectproto Проброс входящих TCP/UDP соединений на внутренние хосты. Пример сообщения netgraph: ngctl msg nat1: redirectproto { local_addr=172.16.0.100 alias_addr=192.168.1.1 remote_addr=8.8.8.8 proto=6 description="this is test" } Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_redirect_proto0="tcp 172.16.0.100 192.168.1.1 18.8.8.8" ng_nat_nat1_redirect_proto0_description="this is test" |
redirectdynamic Делает ранее установленное правило редирекции динамическим. После первого обмена пакетами через динамическое правило, оно будет автоматически удалено Пример сообщения netgraph: ngctl msg nat1: redirectdynamic 1 |
redirectdelete Удаляет правило редирекции Пример сообщения netgraph: ngctl msg nat1: redirectdelete 1 Пример настройки через ng_nat.sh: ng_nat.sh delete_redirect nat1 1 |
addserver Реализация LSNAT - распределения коннекций на несколько серверов по round-robin. Сообщение netgraph принимает id номер ранее установленной редирекции и адрес + порт назначения которые надо добавить для данной редирекции. Пример сообщения netgraph: ngctl msg nat1: addserver { id=1 addr=1.2.3.4 port=8080} Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_redirect_port0="tcp 172.16.0.100:80,172.16.0.102:80 192.168.1.1:80" |
listredirects Показывает список со всеми сконфигурированными статическими редирекциями для конкретной ноды. Пример сообщения netgraph: ngctl msg nat1: listredirects Пример настройки через rc.conf/ng_nat.sh: ng_nat.sh list_redirects nat1 |
proxyrule Конфигурация правила проксирования проходящего трафика. Правила применяются к трафику полученному через хук in. Возможные значения type: encode_ip_hdr | encode_tcp_stream | no_encode Пример сообщения netgraph: msg nat1: proxyrule "type no_encode port 81 server 172.16.1.1:8080 proto tcp dst 7.7.7.7" Пример настройки через rc.conf/ng_nat.sh: ng_nat_nat1_proxy_rule0="type no_encode port 80 server 172.16.1.1:8080 proto tcp dst 7.7.7.7" |
Дополнительная информация о способах конфигурации режимов работы ng_nat
В примере использования сообщения setmode была показана конструкция такого вида:
ngctl msg nat1: setmode { flags=55 mask=55 } |
Про способ подбора значения параметра flags было сказано (плюсуются десятичные значения соответствующих опций), но не было сказано про второй параметр - mask. Маска используется для указания какие именно биты конфигурации необходимо изменить. Как объяснил nuclight - в C коде есть такая часть в которой и происходит обработка флагов и маски. Там-то как раз и задается режим работы ноды ng_nat:
la->packetAliasMode = (flags & mask) | (la->packetAliasMode & ~mask); |
Это значит, что когда заданы как флаги так и маска, между ними проводится логическая операция AND после чего в качестве конфигурации ноды ng_nat применяется полученное значение. В нашем случае применение AND между flags=55 и mask=55 даст то же самое 55 - режим который мы хотим установить. С тем же успехом можно было применять flags=55 mask=0xffffffff - это бы дало те же самые 55. Если задать flags=55 и mask=54 то будет отключен режим логирования (убрали единицу в последнем разряде).
Маску можно использовать для управления режимом работы ната, когда не известно эталонное значение flags. Скажем, если мы хотим отключить режим DENY_INCOMING [2] то можно послать такое сообщение:
ngctl msg nat1: setmode { flags=0 mask=2 } |
так как флаги равны 0 (false), то сработает вторая часть кода в которой будет взято теперешнее значение флагов, инвертирована переданная нами маска, и между ними будет проведена операция AND. В итоге флаги станут 53 и это значение будет применено к ноде ng_nat.
Примеры и сценарии применения механизма ng_nat
Пример 1
Случай использования правил проксирования для передачи http трафика на прозрачный прокси сервер. Прокси сервер работает на машине 192.168.1.80 у которой свое подключение к интернету. Весь проходящий через наш рутер трафик адресованный на 80 порт любого адреса получателя надо пересылать на 192.168.1.80:8080. Наш нат рутер имеет адреса 192.168.1.1 со стороны локальной сети и 1.2.3.4 со стороны интернета.
онфигурация:
/etc/rc.conf
gateway_enable="YES" ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum" ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0" defaultrouter="1.2.3.254" firewall_enable="YES" firewall_type="/etc/firewall" ng_nat_enable="YES" ng_nat_nodes="nat1" ng_nat_nat1_interface="em0" ng_nat_nat1_cookies="1 2" # in out ng_nat_nat1_ipfw_rules="20005 20008" # in out ng_nat_nat1_ipfw_rule0="20005 netgraph 1 ip from any to me in recv em0" ng_nat_nat1_ipfw_rule1="20008 netgraph 2 ip from any to any out xmit em0" ng_nat_nat1_set_mode="same_ports reset_on_addr_change log deny_incoming" ng_nat_nat1_proxy_rule0="type no_encode port 80 server 192.168.1.80:8080 proto tcp" |
/etc/sysctl.conf
net.inet.ip.fw.one_pass=1 |
/etc/firewall
# разрешаем все через интерфейс локальной сети add 1040 allow ip from any to any via fxp0 # непонятное нам не нужно add 1050 deny ip from any to 192.168.0.0/16 in recv em0 add 1060 deny ip from 192.168.0.0/16 to any in recv em0 add 1070 deny ip from any to 172.16.0.0/12 in recv em0 add 1080 deny ip from 172.16.0.0/12 to any in recv em0 add 1090 deny ip from any to 10.0.0.0/8 in recv em0 add 10100 deny ip from 10.0.0.0/8 to any in recv em0 add 10110 deny ip from any to 169.254.0.0/16 in recv em0 add 10120 deny ip from 169.254.0.0/16 to any in recv em0 # здесь в правилах с номерами 20005 и 20008 автоматически появятся # директивы пересылающие трафик в ng_nat add 65534 deny all from any to any |
Файл ng_nat.sh надо скачать от сюда, поместить в /usr/local/etc/rc.d/ и сделать выполняемым через chmod 555 ng_nat.sh
Более подробно о ng_nat можно прочитать в манах
Так же про настройку различных режимов libalias тоже в манах
Подробное описание использования ng_nat.sh можно прочитать сдесь
|
vadim64, 2011-03-26 в 19:03:16
шикарно!
респект и уважуха!
ложка дёгтя: мля, теперь и с этой штукой не буду разбераться сам, раз такой ман заимелся
chel, 2011-06-25 в 11:46:24
а для pf есть настройки?
terminus, 2011-06-26 в 12:51:34
pf не соеденяем с netgraph напрямую.
ХУЙ, 2011-11-18 в 23:13:51
Полная хуйня.
А чтоб правила чуть поменять надо машину перезагружать, да?
На PF собирайте фаервол и не занимайтесь хуйнёй!
terminus, 2011-11-19 в 17:45:38
Не будьте мудаком. Чтобы поменять режим работы ng_nat есть два способа и оба правельные:
1) послать управляющее сообщение через ngctl.
2) поменять настройки rc.conf (ng_nat_) и сделать /usr/local/etc/rc.d/ng_nat.sh restart.
пф головного мозга, да.
Иван Зимин, 2013-09-19 в 1:07:39
Для интерфейса IFx можно создать файлик /etc/start_if_IFx, который является штатным местом донастройки сетевых параметров, вызываемым скриптами конфигурации как "/bin/sh /etc/start_if_IFx IFx" (или чё-та типа того). Т. е. исполняемым файлик делать не надо. Имхо ng_nat'у там самое место. У меня на 8 с чем-то оттуда ng_car заводился. Где я нашёл про /etc/start_if* уже не помню, но это было в системе, а не в инете. Выполняется он вроде после выполнения директив из /etc/rc.conf
'" <b>, 2013-10-16 в 12:24:50
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
вверх
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [7 шт.]