The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Раздел полезных советов: Трансляция адресов во FreeBSD средствами ng_nat, auto_tips (??), 12-Мрт-09, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


12. "Раздел полезных советов: Трансляция адресов во FreeBSD средс..."  +/
Сообщение от xOr (ok), 10-Июн-09, 16:45 
>>есть ли преимущество ng_nat по сравнению с ipfw nat ?
>
>1) Менее глючен конфигуратор
>2) Проще рестартовать при утечках памяти (раз в месяц по крону и
>живем без паник)
>3) В ipfw nat редиректы не имеют поля описания, ng_nat имеет, что
>позволяет дружить его с UPnP/NAT-PMP редиректорами.

Научите, пожалуйста, задавать description через ngctl.

На такое ругается:
msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 description="aaaa"}

И кто-нибудь знает ещё, как ограничить размер таблицы соединений NAT, чтобы ядерная память не кончалась,  а наиболее старые соединения выкидывались.  А также как увеличить память ядра под эту таблицу.
У меня тысячи одновременных коннектов. Через несколько дней начинает глючить.  sysctl показывает полную загрузку одного проца, а ping любого адреса выдает: cannot allocate memory. Причем память свободная есть.  Лечится ребутом машины.

Насчет преимуществ ipfw nat - можно задавать диапазон портов для перенаправления.
Или в ng_nat такое тоже есть, просто я не умею?  Перечислять все не подходит. Потому что допустим я хочу направить 1000-2000 на некий хост, а _все_остальные_ на другой (в SOHO роутерах это называется DMZ).

Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

14. "Раздел полезных советов: Трансляция адресов во FreeBSD средс..."  +/
Сообщение от nuclight (??), 10-Июн-09, 17:11 
>Научите, пожалуйста, задавать description через ngctl.
>
>На такое ругается:
>msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 description="aaaa"}

Вообще, надо показывать, как ругается. Подозреваю, что пробел перед закрывающей фигурной забыли.

>И кто-нибудь знает ещё, как ограничить размер таблицы соединений NAT, чтобы ядерная
>память не кончалась,  а наиболее старые соединения выкидывались.  А
>также как увеличить память ядра под эту таблицу.
>У меня тысячи одновременных коннектов. Через несколько дней начинает глючить.  sysctl
>показывает полную загрузку одного проца, а ping любого адреса выдает: cannot
>allocate memory. Причем память свободная есть.  

Это памяти ядра ему не хватает. Да, есть такая проблема, но, к сожалению, полного решения для неё нет. Во-первых, можно увеличить в /boot/loader.conf значение vm.kmem_size, во-вторых, прошлым летом в 7-ку был патч, который более агрессивно удаляет старые соединения, чтобы меньше текло: http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netinet/libali... (это только часть, в том коммите еще и другие файлы трогали, чтоб побыстрее работало). Если у вас 7-ка старше года - обновитесь.

В 6-ку его, к сожалению, не смержили, можно попробовать накатить руками.

> Лечится ребутом машины.

Ну, это вы зря. Достаточно рестартовать ноды ng_nat, оно тогда эту память освободит. Я так делаю по крону, а вот к ipfw nat такое не приделано. Да, костылик, но тем не менее, на ng_nat это возможно.

>Насчет преимуществ ipfw nat - можно задавать диапазон портов для перенаправления.
>Или в ng_nat такое тоже есть, просто я не умею?  Перечислять
>все не подходит. Потому что допустим я хочу направить 1000-2000 на
>некий хост, а _все_остальные_ на другой (в SOHO роутерах это называется
>DMZ).

Воспользуйтесь rc-скриптом с http://antigreen.org/vadim/freebsd/ng_nat/ - там рядом описано, как пользоваться, пишется в rc.conf в стиле natd (а ipfw nat тоже старается быть похожим на natd). Он диапазоны умеет, перечислит все порты за вас. На самом деле, технически ipfw nat и natd тоже перечисляют внутри, но скрывают это от пользователя, здесь же в показе всех редиректов это будет видно. Но думаю, что это не проблема :)

Ответить | Правка | Наверх | Cообщить модератору

15. "Раздел полезных советов: Трансляция адресов во FreeBSD средс..."  +/
Сообщение от xOr (ok), 11-Июн-09, 12:07 
>>Научите, пожалуйста, задавать description через ngctl.
>>
>>На такое ругается:
>>msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 description="aaaa"}
>
>Вообще, надо показывать, как ругается. Подозреваю, что пробел перед закрывающей фигурной забыли.

Спасибо! Без пробела (как указано выше) заработало.
С пробелом перед закрывающей скобкой ругается:
ngctl: send msg: Invalid argument

Однако, в следующем виде прекрасно добавляет (пробел после протокола):
msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 }

А нужно без пробелов в начале и в конце в любом случае?

>[оверквотинг удален]
>>И кто-нибудь знает ещё, как ограничить размер таблицы соединений NAT, чтобы ядерная
>>память не кончалась,  а наиболее старые соединения выкидывались.  А
>>также как увеличить память ядра под эту таблицу.
>>У меня тысячи одновременных коннектов. Через несколько дней начинает глючить.  sysctl
>>показывает полную загрузку одного проца, а ping любого адреса выдает: cannot
>>allocate memory. Причем память свободная есть.  
>
>Это памяти ядра ему не хватает. Да, есть такая проблема, но, к
>сожалению, полного решения для неё нет. Во-первых, можно увеличить в /boot/loader.conf
>значение vm.kmem_size, во-вторых, прошлым летом в 7-ку был патч, который более

vm.kmem_size: 335544320  (такой же vm.kmem_size_max)
А оперативки всего 1 Гб стоит.
Не верится что таблица NAT пожирает 300 мегов.

Её никак нельзя посмотреть?  Про ipfw nat вроде говорилось что есть команда ipfw nat N show, которая показывает содержимое таблицы.
http://wiki.freebsd.org/Libalias
"ipfw nat N show - show nat instance N sessions"

Проверил, ничего не показывает.

>агрессивно удаляет старые соединения, чтобы меньше текло: http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netinet/libali... (это только часть,
>в том коммите еще и другие файлы трогали, чтоб побыстрее работало).
>Если у вас 7-ка старше года - обновитесь.
>
>В 6-ку его, к сожалению, не смержили, можно попробовать накатить руками.

7.1 RELEASE так что должен уже быть.

>[оверквотинг удален]
>>все не подходит. Потому что допустим я хочу направить 1000-2000 на
>>некий хост, а _все_остальные_ на другой (в SOHO роутерах это называется
>>DMZ).
>
>Воспользуйтесь rc-скриптом с http://antigreen.org/vadim/freebsd/ng_nat/ - там рядом описано, как пользоваться, пишется в
>rc.conf в стиле natd (а ipfw nat тоже старается быть похожим
>на natd). Он диапазоны умеет, перечислит все порты за вас. На
>самом деле, технически ipfw nat и natd тоже перечисляют внутри, но
>скрывают это от пользователя, здесь же в показе всех редиректов это
>будет видно. Но думаю, что это не проблема :)

Спасибо! Раз реализация одинаковая, то и не важно, как оно описывается.

Но в ipfw nat есть полезная опция смены привязанного IP адреса при смене его на указанном интерфейсе:
if nic  Use ip addres of NIC for aliasing, dynamically changing it if NIC's ip address change.

Также в ng_nat не видно опции USE_SOCKETS, или она недоступна в kernel режиме?

А ещё разработчик ipfw nat указывает вот что:

To load/unload a libalias module (kernel):
kldload alias_ftp # active ftp work ok now
kldunload alias_ftp

При этом видимо и опция libalias PKT_ALIAS_PUNCH_FW активизируется?  И по идее должно влиять и на ng_nat?

Ответить | Правка | Наверх | Cообщить модератору

16. "Раздел полезных советов: Трансляция адресов во FreeBSD средс..."  +/
Сообщение от nuclight (??), 12-Июн-09, 18:12 
>>>На такое ругается:
>>>msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 description="aaaa"}
>>
>>Вообще, надо показывать, как ругается. Подозреваю, что пробел перед закрывающей фигурной забыли.

Вообще, показывать надо не только как ругается, но и полную команду - что (и где) набрали.

>Спасибо! Без пробела (как указано выше) заработало.
>С пробелом перед закрывающей скобкой ругается:
>ngctl: send msg: Invalid argument
>
>Однако, в следующем виде прекрасно добавляет (пробел после протокола):
>msg nat1: redirectport { local_addr=x.x.x.x local_port=8865 alias_port=8865 proto=6 }
>
>А нужно без пробелов в начале и в конце в любом случае?

На самом деле, сам ngctl ест и с пробелами, и без них, вот я его сейчас интерактивно запустил и проверил. По коду у меня EINVAL возвращается, только если длина структуры меньше положенной, то есть парсинг был кривой. Поскольку вы не показываете, как именно передаете команды, мне остается только подозревать, что вы напарываетесь на экранирование символов кавычек и фигурных скобок шеллом (а может быть и присвоение переменных).

>>Это памяти ядра ему не хватает. Да, есть такая проблема, но, к
>>сожалению, полного решения для неё нет. Во-первых, можно увеличить в /boot/loader.conf
>>значение vm.kmem_size, во-вторых, прошлым летом в 7-ку был патч, который более
>
>vm.kmem_size: 335544320  (такой же vm.kmem_size_max)
>А оперативки всего 1 Гб стоит.
>Не верится что таблица NAT пожирает 300 мегов.

Ну разумеется, это не она. Это размер памяти ядра. В памяти ядра (всегда в оператикве) еще много чего лежит, смотрится командами vmstat -z и vmstat -m (в выводе последней есть собственно libalias).

>Её никак нельзя посмотреть?  Про ipfw nat вроде говорилось что есть
>команда ipfw nat N show, которая показывает содержимое таблицы.
>http://wiki.freebsd.org/Libalias
>"ipfw nat N show - show nat instance N sessions"
>
>Проверил, ничего не показывает.

К сожалению, нет, в libalias такой вывод не предусмотрен. Та строчка должна выводить статистику на текущий момент, не таблицу.

>[оверквотинг удален]
>>>DMZ).
>>
>>Воспользуйтесь rc-скриптом с http://antigreen.org/vadim/freebsd/ng_nat/ - там рядом описано, как пользоваться, пишется в
>>rc.conf в стиле natd (а ipfw nat тоже старается быть похожим
>>на natd). Он диапазоны умеет, перечислит все порты за вас. На
>>самом деле, технически ipfw nat и natd тоже перечисляют внутри, но
>>скрывают это от пользователя, здесь же в показе всех редиректов это
>>будет видно. Но думаю, что это не проблема :)
>
>Спасибо! Раз реализация одинаковая, то и не важно, как оно описывается.

Ну просто скрипт умеет показывать их по list_redirects, и вы там тогда увидите каждый порт отдельно, если вдруг захотите посмотреть.

>Но в ipfw nat есть полезная опция смены привязанного IP адреса при
>смене его на указанном интерфейсе:
>if nic  Use ip addres of NIC for aliasing, dynamically changing
>it if NIC's ip address change.

Да, в ng_nat это не предусмотрено. Предполагается, что за этим следит тот, кто конфигурирует ноду ng_nat (например, mpd).

>Также в ng_nat не видно опции USE_SOCKETS, или она недоступна в kernel
>режиме?

Недоступна.

>А ещё разработчик ipfw nat указывает вот что:
>
>To load/unload a libalias module (kernel):
>kldload alias_ftp # active ftp work ok now
>kldunload alias_ftp
>
>При этом видимо и опция libalias PKT_ALIAS_PUNCH_FW активизируется?  И по идее
>должно влиять и на ng_nat?

Это влияет на весь ядерный libalias, т.е. и ng_nat тоже, но в ядерном режиме добавлять правила в файрвол он всё же не обучен, как и сокеты создавать. Так что если у вас по умолчанию закрытый файрвол, и надо проковыривать дырки - только natd, увы.

Ответить | Правка | Наверх | Cообщить модератору

17. "Раздел полезных советов: Трансляция адресов во FreeBSD средс..."  +/
Сообщение от xOr (ok), 15-Июн-09, 10:50 
Большое спасибо за информацию по ng_nat!

Команду вводил в терминале ngctl
Почему-то сейчас воспроизвести ошибку не получается. Возможно ошибался в формате в другом месте.

Насчет памяти ядра, libalias занимает совсем мало. Видимо, сбой не был связан с NAT.
   libalias  1074   198K       -  2535191  128

Хотя в данный момент нагрузка на NAT по кол-ву соединений невелика.


Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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