>>>На такое ругается:
>>>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, увы.