alibek Posted October 18, 2013 Posted October 18, 2013 Возник такой вопрос. Есть пользователи, получают доступ в интернет по PPPoE (через Ericsson SE100). Я хочу сделать так, чтобы после успешной авторизации на DNS-сервере автоматически создавалась/обновлялась A-запись, соответствующая выданному IP-адресу. Не посоветуете, в какую сторону смотреть? Вставить ник Quote
s.lobanov Posted October 18, 2013 Posted October 18, 2013 Сливать копию аккаунтинга на вспомогательный радиус-сервер, парсить его и делать upsert'ы в БД, например можно использовать powerdns с БД в качестве бэкэнда. bind9 с каких-то версий тоже вроде бы умеет использовать БД как бэкэнд Вставить ник Quote
MMM Posted October 18, 2013 Posted October 18, 2013 Можно powerdns еще, сразу в sql хранит. А bind можно поставить slave и раз в несколько минут слать ему notify из pdns_control Вставить ник Quote
alibek Posted October 18, 2013 Author Posted October 18, 2013 Откуда DNS будет брать данные (БД или текстовый файл) — это отдельный вопрос. В крайнем случае можно файлы зон генерировать и через rndc обновлять. Но вот как лучше брать информацию по сессиям (лучше чем получать список сессий с BRAS или RADIUS)? В идеале хотелось бы, чтобы нужные обновления в зонах присылал BRAS или RADIUS. Вставить ник Quote
s.lobanov Posted October 18, 2013 Posted October 18, 2013 Но вот как лучше брать информацию по сессиям (лучше чем получать список сессий с BRAS или RADIUS)? Получить список сессий это неэффективный алгоритм(не очень быстрый). Оптимальный вариант парсить копию радиус аккаунтинга. Если это для вас сложно, то тогда лучше брать список сессий с радиус-сервера, чтобы не грузить CPU браса постоянными запросами на получение списка сессий. Вставить ник Quote
alibek Posted October 18, 2013 Author Posted October 18, 2013 Оптимальный вариант парсить копию радиус аккаунтинга. Не поясните, что под этим подразумевается? Зеркалировать трафик на вспомогательный радиус-сервер? Или на BRAS добавить второй радиус-сервер (вспомогательный), который не будет отвечать? то тогда лучше брать список сессий с радиус-сервера Да, в принципе на такое я изначально и ориентировался. Вставить ник Quote
HackerDeath Posted October 18, 2013 Posted October 18, 2013 Ну SE100 не умеет слать 2 одинаковых радиус пакета в 2 стороны. Я уже сталкивался с таким. Писали программку которая клонирует радиус на 2 разных сервера. Одна для работы с биллингом, вторая для SCE и скриптов своих. Думаю вам тоже подойдет такой вариант. Написать програмку на си которая слушает порт радиуса и пересылает в 2 стороны не сложно. Скриптом выбирать старт сессии, а дальше как это скрестить с днсом уже ваша фантазия. Можно править файлы бинда и релоадить конфиги. Можно как сказали с бекендом который можно исполльзовать в виде pnds, можно самим опять же накалякать програмку которая будет апдейты бинду слать. То есть полет фантазии тут очень большой, а на что хватит ваших знаний вам решать уже. Вставить ник Quote
s.lobanov Posted October 18, 2013 Posted October 18, 2013 Ну SE100 не умеет слать 2 одинаковых радиус пакета в 2 стороны. Я уже сталкивался с таким. Писали программку которая клонирует радиус на 2 разных сервера. Одна для работы с биллингом, вторая для SCE и скриптов своих. Думаю вам тоже подойдет такой вариант. Написать програмку на си которая слушает порт радиуса и пересылает в 2 стороны не сложно Не нужно изобретать велосипед. Есть 2 нормальных варианта(если брас не умеет слать копию аккаунтинга): 1. Зеркало порта(span) на коммутаторе. Не всегда возможно, особенно когда на свитче одна сессия и она занята 2. iptables ... -j TEE - зеркалировать на уровне ядра с основного сервера на вспомогательный Вставить ник Quote
HackerDeath Posted October 18, 2013 Posted October 18, 2013 Спан это круто, а если кроме радиуса есть еще чтото... iptables хороший вариант, но дальше то все равно придется изобретать велосипед который будет разгребать запросы радиуса. Можно и мой вариант использовать. Хотя конечно iptables очень даже не плохой. А RB SE100 копии слать не умеет, только перепрыгнуть с одного на другой если первый отвалился. Вставить ник Quote
s.lobanov Posted October 18, 2013 Posted October 18, 2013 iptables хороший вариант, но дальше то все равно придется изобретать велосипед который будет разгребать запросы радиуса. зеркалирование трафика и парсинг это 2 независимые задачи и чем меньше будет велосипедов, тем меньше геморроя в будущем, поэтому iptables -j TEE однозначно лучше, чем ваше самописное ПО на C. Единственный минус -j TEE это то, что его нет в старых ядрах(типа rhel6), а менять ядро на боевом радиус-сервере мало кто захочет по поводу парсинга и вливку в БД - с помощью freeradius это будет почти всё штатно. хотя программисту будет проще написать мелкий демон с готовой библиотекой для парсинга radius, чем разбираться с таким монстром как freeradius, но опять же лишние велосипеды никому не нужны Вставить ник Quote
HackerDeath Posted October 19, 2013 Posted October 19, 2013 Демон фрирадиуса еще и слишком большой для такой простой задачи как парсинг запросов простой. И уж каких велосипедов ток не видел. Этот работает проще и безотказней всего уже давно. Вставить ник Quote
alibek Posted October 19, 2013 Author Posted October 19, 2013 Понятно. Если кто похожую задачу решал, не подскажите, как лучше сделать? RADIUS у меня работает на виртуальном сервере (гость RedHat, хост FreeBSD). Где лучше зеркалировать трафик, на госте или на хосте? Вставить ник Quote
dignity Posted October 19, 2013 Posted October 19, 2013 Можно вопрос... А зачем это делать? Почему бы как все люди не сформировать заранее все записи для ваших динамических пулов или не написать скрипт в 10 строк для powerdns на perl. Вставить ник Quote
alibek Posted October 19, 2013 Author Posted October 19, 2013 Почему бы как все люди не сформировать заранее все записи для ваших динамических пулов Какие записи? У пользователей динамические IP-адреса. Вставить ник Quote
dignity Posted October 19, 2013 Posted October 19, 2013 z-y-x-x.pool.supernet.net Да + PTR, а для особо отчаянных есть еще DynDNS, если надо делать привязку somedomain.com -> dynamic-ip. И это уже совсем не ваш головняк... Вставить ник Quote
alibek Posted October 19, 2013 Author Posted October 19, 2013 z-y-x-x.pool.supernet.net И что? Сегодня пользователю vasya выдали IP-адрес 1.2.3.4, а завтра выдали 1.2.3.5. А ему нужно постоянное имя, например vasya.pool.supernet.net. Собственно я хочу сделать аналог DDNS, только с автоматической регистрацией и с привязкой к логину. Вставить ник Quote
HackerDeath Posted October 19, 2013 Posted October 19, 2013 (edited) Можно и на бинде реализовать //Net a.b.c.d/24 $GENERATE 0-255 $.c.b.a.in-addr.arpa. IN PTR a-b-c-$.dynamic.mega.net. Пример для bind9 ( named ) для PTR. Думаю для A записей сварганить проблемой не будет. Edited October 19, 2013 by HackerDeath Вставить ник Quote
alibek Posted October 19, 2013 Author Posted October 19, 2013 A-записи эквивалентные IP-адресу бессмыслены, неужели это не очевидно? Вставить ник Quote
dignity Posted October 19, 2013 Posted October 19, 2013 А ему нужно постоянное имя, например vasya.pool.supernet.net. Собственно я хочу сделать аналог DDNS, только с автоматической регистрацией и с привязкой к логину. Очевидно, что кто ясно мыслит, тот ясно излагает. А то, что вы изначально заявили, мы Вам выше расписали. А реализация DynDNS, это уже другая история... Опять же делается на PowerDNS легко, для этого достаточно хранить MAC и DNS name, и любой поток данных MAC-IP или же аналогичный. Опять же, обычно, нормальные сети в этом случае делают ему статик ip и все, аякталды. Работай на здоровье и плати деньги за статику. Вставить ник Quote
HackerDeath Posted October 19, 2013 Posted October 19, 2013 Ну если вы хотите раздавать какие то уникальные. То как уже выше вам описывали все, так и делайте. Если сам не знаете как, найдите человека кто это реализует за отдельную плату. Вставить ник Quote
alibek Posted October 19, 2013 Author Posted October 19, 2013 для этого достаточно хранить MAC и DNS name Причем тут MAC? Мне нужно автоматически создавать записи в DNS: A-запись <login>.pool.domain.tld -> <ip> и (опционально) PTR-запись <ip> -> <login>.pool.domain.tld. A-запись вида <ip>.pool.domain.tld -> <ip> смысла не имеет. Необходимости в статике также нет. А реализация DynDNS, это уже другая история... Мне не нужен DynDNS. Я его в пример привел только потому, что он предоставляет схожий результат. То как уже выше вам описывали все, так и делайте. Ну да, в сообщении #12 я спрашивал, где лучше снимать копию radius-запросов, а не как эту информацию потом загрузить в DNS. Вставить ник Quote
HackerDeath Posted October 19, 2013 Posted October 19, 2013 Снимать там где это наименее травматично для сети и более безопасно. Как описали выше, у вас ядро позволяет сделать -j TEE? И подумайте где вы будете парсить эти запросы. Если гдето рядом с конечной точкой радиуса, то там. Если в другом месте то наверно на источнике будет лучше. Вставить ник Quote
dignity Posted October 19, 2013 Posted October 19, 2013 Причем тут MAC? Мне нужно автоматически создавать записи в DNS: A-запись <login>.pool.domain.tld -> <ip> и (опционально) PTR-запись <ip> -> <login>.pool.domain.tld. A-запись вида <ip>.pool.domain.tld -> <ip> смысла не имеет. Необходимости в статике также нет. А зачем это, если не секрет? Честно говоря, для меня выглядит по-идиотски) Не, это конечно, прикольная плюшка для 3%-в абонентов с rdesktop-ами, но мне кажется, они бы и за статику заплатили... Вставить ник Quote
HackerDeath Posted October 19, 2013 Posted October 19, 2013 Только мне кажется что этой фичей будут пользоваться 0.1% пользователей. И им можно статипы дать и выделить стат запись. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.