dadv: (chuck)
[personal profile] dadv

Полпятого утра.

Добавил в mpd55 команду set iface description TEMPLATE, где TEMPLATE - пусто или произвольное описание интерфейса (в двойных кавычках, если есть пробелы), в котором можно использовать подстановки:

  • %a - локальный адрес интерфейса или UNSPEC, если адрес ещё не согласован;
  • %A - адрес пира или UNSPEC, если адрес ещё не согласован;
  • %i - системный индекс интерфейса;
  • %I - имя интерфейса;
  • %l - имя линка (link name), его mpd5 генерирует сам для динамических линков и посылает RADIUS-серверу в составе Session-Id, а также получает от него обратно в Packet Of Disconnect (POD);
  • %S - состояние интерфейса (DoS/UP/DOWN);
  • %t - тип линка (pppoe, pptp, l2tp etc.);
  • %u - своё имя пользователя, если же мы не авторизовались пиру, то дефис в качестве placeholder;
  • %U - имя пользователя пира, если он авторизовался, иначе дефис в качестве placeholder;
  • %% - заменяется на один символ процента.

Описание интерфейса выводится командой ifconfig, а также видно через веб-интерфейс mpd5 в свойствах бандла и интерфейса, ну и через консольный интерфейс тоже.

Ещё перечитывал "Сказания Земноморья" Ле Гуин.

Update 21.11.2010: http://www.grosbein.pp.ru/freebsd/patches/mpd55-desc-0.2.tar.bz2
Работает в боевых условиях.

Update 22.12.2011: http://www.grosbein.pp.ru/freebsd/patches/mpd55-desc-0.3.tar.bz2
Добавил шаблон %M (MAC-адрес клиента). Сегодня вышел mpd-5.6, у него появилась штатно команда set iface description, но она ставит фиксированный дескрипшн, а не printf-like шаблон, как у меня.

Update 20.06.2013: сегодня в портах FreeBSD появился mpd-5.7, в него вошла эта реализация команды set iface description, заменившая старую. Теперь все эти функции в mpd есть "из коробки".

Date: 2015-10-08 22:15 (UTC)
From: [identity profile] wishmaster2005.livejournal.com
Приветствую! А не подскажете такой момент: есть необходимость иметь в строке description локальный IP адрес, с которого клиент подключается.

Сложно ли добавить еще параметр, скажем, %f, который будет заменяться на локальный ip?

Спасибо!

Date: 2015-10-10 10:09 (UTC)
From: [identity profile] dadv.livejournal.com
Будет время - погляжу. Только в контекте mpd локальными адресами являются адреса на интерфейсе ng0, соответствующие серверу, а не клиенту, клиентские адреса по отношению к серверу - удаленные. Не для всякого типа подключения определен IP клиента, например, для PPPoE определен MAC клиента, а не IP. Вам для которого типа это потребовалось?

Date: 2015-10-10 18:09 (UTC)
From: [identity profile] wishmaster2005.livejournal.com
Мы используем PPTP и L2TP. По идее, в mpd уже все есть, так как адрес с которого клиент соединился отправляется в радиус и в биллинге отображается.. Было бы удобно видеть полную цепочку прям в descripton. Буду признателен за помощь!

Date: 2015-10-23 09:08 (UTC)
From: [identity profile] dadv.livejournal.com
Прошу потестировать:

cd /usr/ports/net/mpd5/files
fetch http://www.grosbein.net/freebsd/patches/mpd5/patch-iface-addr.c
cd ..
make clean all deinstall install

В set iface description для внешних адресов интерфейсов ngX добавлены новые шаблоны: %o для локального адреса (самого роутера), %O для удаленного адреса (клиента). Это не ноль (0), это первая буква в слове "outer".

Date: 2015-10-24 09:08 (UTC)
From: [identity profile] wishmaster2005.livejournal.com
Проверил. Работает! Огромное человеческое спасибо! Теперь все наглядно.

Date: 2015-10-24 15:43 (UTC)
From: [identity profile] wishmaster2005.livejournal.com
Обнаружился нюанс. Не отображает ip локального адреса (%o) в случае l2tp. При использовании pptp все показывает. Не то чтобы это было сильно критично, но для порядка. %P и %O работает в обоих случаях.

Date: 2015-10-24 16:13 (UTC)
From: [identity profile] dadv.livejournal.com
Так и должно быть. BSD sockets API позволяет приложению узнать локальный IP соединения для TCP (используется для управляющего соединения PPtP), но не для UDP (используется в L2TP), если при создании сокета было указано принимать подключение на любой адрес. Если в конфигурации указать команду set l2tp self, то %o и в случае l2tp будет показывать адрес.

Некоторые программы типа ntpd или named, которым всё-таки нужно определять локальный IP, используют сложную логику для обхода этого недостатка API: они определяют все IP-адреса в системе и создают не один сокет, принимающий соединения на любой адрес, а по одному сокету на каждый IP, принимающие соединения каждый на свой адрес. Таким образом они узнают, на который IP пришло подключение в зависимости от того, который серверный сокет его породил. Плюс им приходится мониторить изменения набора IP в системе, чтобы открывать новые серверные сокеты для новых адресов IP. Всей этой логики в mpd нет и добавлять её было бы слишком инвазивно. И я вообще не уверен, что она нужна в mpd.

Date: 2015-10-24 17:42 (UTC)
From: [identity profile] wishmaster2005.livejournal.com
Согласен, такие сложности не нужны, тем более, если можно указать ip в конфиге. Значит все работает штатно.

Еще такой вопрос, не совсем по данной конкретной теме: есть проблема с l2tp и роутерами. Вот здесь тема подробно обсуждается (хотя и старая, но решения нет) http://bit.ly/1LUwxQO Вкратце, с компа (win) при отключеном ipsec l2tp работает нормально, а вот с роутера - соединение устанавливается, но стоит открыть через роутер пару страниц, связь пропадает, при этом пир продолжает висеть. Логи по ссылке есть, на самой свежей версии ситуация аналогичная. В какую сторону стоит копать, не посоветуете?

Date: 2015-10-25 04:15 (UTC)
From: [identity profile] dadv.livejournal.com
Какая версия FreeBSD?

Похоже на проблемы с CCP (компрессией/шифрованием). Первым делом почитать http://dadv.livejournal.com/187619.html и поискать в логах упомянутые там ошибки.

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios