powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / FreeBSD несколько вопросов по natd
13 сообщений из 13, страница 1 из 1
FreeBSD несколько вопросов по natd
    #38706557
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

На шлюзе под FreeBSD 9.1 имеется natd. (Про существование NAT в составе ipfw в курсе, но пока недосуг на него переехать).
Недавно, в связи с подключением нового провайдера IP-телефонии возникла проблемка, требующая более глубокого понимания работы демона natd. Если совсем коротко, то техподдержка провайдера уверяет, что мой NAT слишком быстро "забывает" маршрут и рекомендует подкрутить настройки моего NAT. Не уверен, что они правы в своей рекомендации (с другими то провайдерами нет проблем), но таки решил посмотреть, что можно сделать в этом направлении.

Теперь по сути. Когда устанавливается соединение из локальной сети во внешнюю, natd записывает в свою внутреннюю таблицу соответствие IP-адресов и портов, между которыми устанавливается соединение. И далее гоняет пакеты в соответствии с этой таблицей. Это понятно.

Возникли вопросы, на которые скудный man natd не дал ответа:
1. Как долго помнит natd это соответствие? (перезапуск демона не в счет)
2. Что заставляет natd "забыть" это соответствие (какие-то таймауты, информация из заголовков пакетов, что-то еще)?
3. Как можно посмотреть текущую таблицу соответствий? Если это вообще возможно...
4. Можно ли как-то управлять временем жизни оной таблицы соответствий при помощи конфига или каким-то другим способом?

Заранее благодарю за подробный ответ или отсылку к документу с разъяснениями по существу вопросов.
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706641
неТолик1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Чтото мне кажется гонит ваш провайдер.

У вас есть конфиг natd.cnf с указаниями что делать, если пакет попал в цепочку PREROUTING таблицы NAT.
Далее если пакет соответствует условию он обрабатывается.
Пусть таймаут таблицы трансляций будет равен хоть 1 мс (немного утрирую) пока у вас есть правило удовлетворяющее прохождению пакета, таймаут не закончится пока идут пакеты. А пакеты идут пока есть правило в конфиге...
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706719
VGrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неТолик1vkle,
если пакет попал в цепочку PREROUTING таблицы NAT.


Цепочка PREROUTING на FreeBSD - это что то новое...

vkle , по идее, NATD для TCP должен держать соответствие больше двух часов - это значение по умолчанию KEEPALIVE для TCP для многих ОС, в том числе и для freebsd, смотрите sysctl net.inet.tcp.keepidle. Кстати, перезагрузка natd не должна разрывать установленные соединения поскольку они сохраняются во внутренних таблицах. Можете попробовать уменьшить net.inet.tcp.keepidle, например, минут до 15-ти.
Иными словами, natd держит соединения достаточно долго, и Ваша проблема, скорее всего, в чем-то другом. Например, попробуйте тут более детально описать ее проявления: протокол, при работе по которому возникают проблемы, симптомы, записи в логах и т.п.

---
Виктор
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706732
неТолик1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VGreyнеТолик1vkle,
если пакет попал в цепочку PREROUTING таблицы NAT.

Цепочка PREROUTING на FreeBSD - это что то новое...


забыл (Linux) в ковычки поставить.
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706752
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VGreyсмотрите sysctl net.inet.tcp.keepidle
Код: sql
1.
2.
$ sysctl net.inet.tcp.keepidle
net.inet.tcp.keepidle: 7200000

Да, вроде как два часа. Но распространяется ли это на маршрут, поддерживаемый natd?


VGreyИными словами, natd держит соединения достаточно долго, и Ваша проблема, скорее всего, в чем-то другом. Например, попробуйте тут более детально описать ее проявленияПротокол SIP. Моя мини-АТС из локальной сети регистрируется у нескольких провайдеров IP-телефонии. Регистрация (два пакета от меня и два ответных от провайдера) происходит раз в пять минут (менее на мини-АТС установить невозможно).
Проблемный провайдер не может послать мне входящий вызов (пакет инвайт) через некоторое время после регистрации. Например, через минуту после регистрации пакет проходит и соединение удается установить, а через четыре минуты - нет. В затишье сравнил обмен по SIP между разными провайдерами. Оказалось, что от беспроблемных провайдеров в промежутках между регистрациями проходит еще четыре "холостых" пакета (запрос опций), которые, как мне кажется, и удерживают соединение. Отсюда и сложилось впечатление о том, что кто-то где-то забывает маршрут быстрее чем через пять минут.
На моей стороне потенциально проблемными вроде бы могут быть только natd и ipfw. Вот потому и решил немного углубиться в понимание.
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706773
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эммм... Тогда еще вопрос вылез.
Если правильно понимаю, тут UDP используется.
Код: sql
1.
2.
3.
4.
5.
14:26:03.420530 IP (tos 0x0, ttl 128, id 52187, offset 0, flags [none], proto UDP (17), length 428)
    192.168.3.253.sip > pbx.provider.ru.sip: SIP, length: 400
        REGISTER sip:11.22.33.44 SIP/2.0
        Via: SIP/2.0/UDP 55.66.77.88:5060;branch=z9hG4bK575456-437619000
............

Переменная net.inet.tcp.keepidle распространяется только на TCP, или и на UDP тоже?
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706775
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему спрашиваю... Для UDP не обнаружил аналогичного параметра
Код: sql
1.
2.
3.
4.
5.
6.
$ sysctl -a | grep net\.inet\.udp*
net.inet.udp.checksum: 1
net.inet.udp.maxdgram: 9216
net.inet.udp.recvspace: 42080
net.inet.udp.blackhole: 0
net.inet.udp.log_in_vain: 0
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38706863
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы попробуйте прокинуть станцию напрямую...
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38707048
VGrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle[/src]Переменная net.inet.tcp.keepidle распространяется только на TCP, или и на UDP тоже?

Только на tcp, насколько помню, время "удержания" udp определено в самом коде natd и оно порядка двух минут. Но могу и ошибаться.

В принципе, Вы можете проверить tcpdump-ом Ваше предположение - если со стороны sip-прова вызывающий пакет есть, а в сторону интерфейса, который смотрит на АТС его нету, таки, проблема в НАТд.

Как варианты:
- глянуть в коде НАТд, поправить, пересобрать.
- как пишет Sergey Orlov , пробросить udp-порт на АТС, например, средствами natd:
Код: plaintext
1.
natd_flags="... -redirect_port udp X.X.X.X:N N ..."
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38707359
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VGreyнасколько помню, время "удержания" udp определено в самом коде natd и оно порядка двух минут. Но могу и ошибаться.По крайней мере, такое время очень похоже на правду. Эх, жаль что код на Си только "читаю со словарём"...

И всё же, остался третий вопрос, чисто академического интересу. Можно ли в реальном времени посмотреть таблицу natd?

VGreyпробросить udp-порт на АТС, например, средствами natdТак и сделал с утра. Вроде бы, должно помочь. Посмотрим, что получится. Проблема то не постоянна, возникает только в относительно тихое от звонков время. А пока активно названивают - жалоб нет.
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38707378
Фотография bga83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,
не смотрел в сторону pf?
время таймаута для udp соединений задается в конфиге и легко меняется. Да и синтаксис у него ощутимо проще в сравнении с ipfw.
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38707433
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bga83vkle,
не смотрел в сторону pf?Не смотрел. Нонешний конфиг в основном написан более семи лет назад и при необходимости слегка допиливается. Работает же исправно, задачи выполняет...

bga83время таймаута для udp соединений задается в конфиге и легко меняется.У него свой NAT?
...
Рейтинг: 0 / 0
FreeBSD несколько вопросов по natd
    #38707516
Фотография bga83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklebga83время таймаута для udp соединений задается в конфиге и легко меняется.У него свой NAT?Да


vkleНонешний конфиг в основном написан более семи лет назад и при необходимости слегка допиливается. мне некоторое время назад довелось тоже довольно большую портянку правил ipfw переводить в pf. Делал вручную, потому как параллельно проводилась инвентаризация правил и комментирование
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / FreeBSD несколько вопросов по natd
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]