Leave a comment

wishmaster2005 October 8 2015, 22:15:08 UTC
Приветствую! А не подскажете такой момент: есть необходимость иметь в строке description локальный IP адрес, с которого клиент подключается.

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

Спасибо!

Reply

dadv October 10 2015, 10:09:05 UTC
Будет время - погляжу. Только в контекте mpd локальными адресами являются адреса на интерфейсе ng0, соответствующие серверу, а не клиенту, клиентские адреса по отношению к серверу - удаленные. Не для всякого типа подключения определен IP клиента, например, для PPPoE определен MAC клиента, а не IP. Вам для которого типа это потребовалось?

Reply

wishmaster2005 October 10 2015, 18:09:43 UTC
Мы используем PPTP и L2TP. По идее, в mpd уже все есть, так как адрес с которого клиент соединился отправляется в радиус и в биллинге отображается.. Было бы удобно видеть полную цепочку прям в descripton. Буду признателен за помощь!

Reply

dadv October 23 2015, 09:08:19 UTC
Прошу потестировать:

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".

Reply

wishmaster2005 October 24 2015, 09:08:00 UTC
Проверил. Работает! Огромное человеческое спасибо! Теперь все наглядно.

Reply

wishmaster2005 October 24 2015, 15:43:02 UTC
Обнаружился нюанс. Не отображает ip локального адреса (%o) в случае l2tp. При использовании pptp все показывает. Не то чтобы это было сильно критично, но для порядка. %P и %O работает в обоих случаях.

Reply

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

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

Reply

wishmaster2005 October 24 2015, 17:42:49 UTC
Согласен, такие сложности не нужны, тем более, если можно указать ip в конфиге. Значит все работает штатно.

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

Reply

dadv October 25 2015, 04:15:38 UTC
Какая версия FreeBSD?

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

Reply


Leave a comment

Up