- Мой блог (Дмитрий Харций) - https://wifi-hotspot.zp.ua/wp -

Танцы с перцем!.. Ой, простите, с бубном!..

Один из первых вопросов, который зачастую задают после того, как Chillispot установлен, настроен и работает, звучит так:

— У меня есть необходимость нескольким клиентам присвоить статические ip-адреса. Как это сделать?

Увы, Chillispot сам по себе плохо относится к клиентам со статическими адресами, если они прописаны вручную. То есть, клиент видит, что у него адрес тот, который он написал, видит, что он подключен к тому шлюзу, которым является Chillispot, но вот все его попытки попасть на любую страницу в интернете дают сообщение о том, что сервер не найден. И это действительно так — клиент при этом не авторизован, и доступа в интернет у него нет. А вот страница авторизации клиенту, назначившему себе статический IP саостоятельно, увы, не выдается. И причина здесь в самом Chillispot и его внутренних алгоритмах работы. Ему нужны DHCP-запросы о клентов, ему нужны DNS-запросы от клиентов, без них, увы никак…  Подводя краткий итог — таким методом заставить «подружиться» клиента со статическим IP-адресом и Chillispot не получится.

И что, совсем никак?

Возможность есть. Ее таки предусмотрели сами авторы программы, по всей видимости понимая, что необходимость в статических IP-адресах все-таки периодически возникает. Нюанс лишь в реализации. И если понять механизм процесса, то настроить его потом уже не составит труда…

Итак, постулат №1 — у клиента в настройках протокола TCP-IP все-равно должно быть выставлено все в автомате, то есть — «Получить IP-адрес автоматически» и «Получить адрес DNS-сервера автоматически», даже в том случае, если он хочет работать со статическим IP-адресом.

Постулат №2 — Chillispot не присваивает статические адреса! В том смысле, что «сам не присваивает» — за него это делает сервер RADIUS. Для этого в Chillispot реализована поддержка радиусовского атрибута Framed-IP-Address.

Постулат №3 — RADIUS сам по себе в Chillispot ничего не скажет, пока не получит запрос авторизации. А на этапе подключения клиента к Chillispot от клиента еще не поступало никаких данных, требующихся для этого. И что же тогда Chillispot отправляет в RADIUS как имя клиента? Единственное, что Chillispot успел узнать от клиента  на этапе его подключения, а именно — его MAC-адрес.

Вот мы и добрались до финта (а может быть костыля?…) Chillispot. В конечном итоге, для клиента, который (впоследствии) будет работать со статическим IP-адресом процедура выглядит так:

  1. Клиент подключается к Chillispot.
  2. Chillispot определяет MAC-адрес сетевой платы клиента и вместе с паролем отсылает его на проверку серверу RADIUS.
  3. Если у сервера RADIUS в базе есть запись про клиента с таким MAC-адресом и с таким паролем, то авторизация клиента подтвеждается и Chillispot получает утвердительный ответ — Access:Accept.
  4. И кроме того, если в базе сервера RADIUS для этого клиента (с данным MAC-адресом) прописано конкретное значение IP-адреса (атрибут Framed-IP-Address), то тогда это значение также отсылается RADIUS-ом в утвердительном ответе контроллеру Chillispot.
  5. Chillispot, получив от RADIUS конкретное значение IP-адреса, присваивает его клиенту и выпускает его в интернет. Все, на этом авторизация клиента завершена, никаких окон с логинами/паролями ему не предлагается — в этом уже нет нужды.

Вот так все просто?

— Да.

А причем тут костыли?

— Нюансов два. Во первых в качестве имени клиента используется МАС-адрес его сетевой платы, который легко может быть подделан. А во вторых,  пароль, используемый при авторизации по МАС-адресу — он задается в настройках Chillispot, и он — один-единственный для всех, кто будет авторизоваться по МАС-у… Ну а про костыли я сказал, так как предполагаю, что этот финт (авторизация по МАС-у доделывался авторами уже потом, как решение проблемы когда и DHCP нужен, и адрес хочется иметь статический..

Ну да ладно. Наша задача теперь настроить Chillispot и RADIUS для того, чтобы задействовать эту возможность. Начнем с Chillispot. Собственно, все его настройки расположены в одном единственном файле — /etc/chilli.conf. Этот файл и нужно открыть в редакторе. Естественно, или залогинившись перед этим как root, или же через sudo (чтобы потом прав хватило для сохранения изменений). В этом файле (с учетом того, что, как было сказано в самом начале, Chillispot уже настроен и работает в составе хотспота) нас сейчас интересуют только те параметры, которые относятся именно к реализации использования статических IP адресов. Если же у вас есть нужда настроить Chillispot «с нуля», то тогда, добро пожаловать — читайте мою другую заметку о настройке этой службы [1]. Но вернемся к нашим параметрам.

Во первых, при реализации возможности предоставления статических адресов, сеть, формируемую службой Chillispot (по умолчанию, 192.168.182.0/24) разделить на две части — одну для клиентов со статическими адресами, а вторую для тех, кому адрес будет выдаваться динамически. делается это с помощью двуп параметов — statip и dynip. При этом нужно не забывать о том самом значении параметра net, который задает всю сеть, создаваемую контроллером Chillispot для обслуживания клиентов.

statip —  определяет пул статических адресов, предоставляемых клиентам.

dynip —  определяет пул динамических адресов, предоставляемых клиентам.

Учтите, что эти оба поддиапазона обязательно должны во первых не перекрываться, а во вторых, умещаться в диапазон адресов сети, обслуживаемой Chillispot. Для случая использования сети 192.168.182.0/24 (значение, используемое для параметра net в настройках Chillispot по умолчанию), корректно получается поделить ее только лишь пополам. Точнее, для статической «половины» можно конечно указать и меньший диапазон допустимых адресов, но это все равно не позволит добавить свободных адресов «половине» динамической, увы. Таким образом, настройки сети и подсетей должны выглядеть следующим образом:

net 192.168.182.0/24

statip 192.168.182.0/25

dynip 192.168.182.128/25

При этом весь диапазон поделен ровно на две половины. Первая из них (в диапазоне от 192.168.182.2 и до 192.168.182.126) предоставляется для клиентов со статическими адресами, а вторая (от 192.168.182.128 до 192.168.182.254) — для тех, кому достанется динамический адрес. Если динамических адресов вам мало, то тогда можно попробовать следующий вариант настроек дележа сети:

net 192.168.182.0/23

statip 192.168.182.0/25

dynip 192.168.183.0/24

В таком случае для динамических адресов будет предоставлен пул в диапазоне от 192.168.183.1 до 192.168.183.254, а для статических, как и в первом варианте — с 192.168.182.2 по 192.168.182.126.

Далее. Необходимо включить авторизацию по МАС-адресам. Для этого в файле настроек нужно найти и раскомментировать (удалить # в начале строки) следующий параметр:

macauth — при включении этого параметра Chillispot при подключении к хотспоту каждого нового клиента первым делом будет пытаться авторизовать его на основании его МАС-адреса. То есть, допустим, у сетевой платы клиента МАС-адрес равен 00-11-22-33-44-55. При подключении этой сетевой платы серверу RADIUS будет отправляться запрос на авторизацию клиента, User-name которого будет составлен из значения параметра macsuffix (см. ниже) и MAC-адреса сетевой платы (в данном примере — 00-11-22-33-44-55). В качестве пароля при авторизации будет использовано значение параметра macpasswd (см. ниже). Не стоит бояться, что использование данного параметра помешает «нормальной» работе хотспота — клиентам, не прошедшим МАС-авторизацию, будет предложена «обычная» авторизация с помощью UAM (вебстраницы с возможностью ввода логина и пароля).

macsuffix — суффикс, добавляемый к реальному МАС-адресу сетевого адаптера. Именно итоговое полученное значение отсылается при авторизации в сервере RADIUS в качестве имени клиента. Параметр позволяет несколько повысить безопасность системы, добавляя некую с позволениря сказать «интригу» к имени. Если планируется использование, параметр нужно раскомментировать и указать свое собственное значение. Используйте буквы только латинского алфавита — для RADIUS-а русские буквы — пустой звук. Суффикс добавляется в конец МАС-адреса. Например, если вы указали суффикс «test», а МАС-адрес сетевой платы был как и в предыдущем примере 00-11-22-33-44-55, то серверу RADIUS будет послан запрос на авторизацию клиента с User-name «00-11-22-33-44-55test». Если вы суффикс использовать не желаете, то оставьте параметр закомментированным, и тогда на авторизацию RADIUS-у в качестве имени клиента будет отсылаться только сам МАС-адрес.

macpasswd — пароль, который служба Chillispot отсылает серверу RADIUS при попытке МАС-авторизации. Пароль, как говорится, «один на всех» — одинаков для любого пытающегося авторизоваться поМАС-адресу клиента. По умолчанию значение параметра весьма тривиально — «password». Не поленитесь, и придумайте свой собственный пароль! Чтобы использовать, параметр нужно раскомментировать и указать свое собственное значение. Используйте буквы только латинского алфавита — для RADIUS-а русские буквы — пустой звук.

Все. Как только вы настроили все вышеперечисленные параметры, ваш Chillispot готов к МАС-авторизации клиентов. Но это еще не значит, что к этому же готов и RADIUS…

Чтобы наш процесс завершился успехом, от сервера RADIUS требуется по сути выполнить всего лишь два  требования. Во первых, у него в базе должен быть прописан клиент с именем равным МАС-адресу того компьютера, которому мы хотим присвоить фиксированный IP-адрес. В случае, если у Chillispot включено еще и использование macsuffix, то имя клиента в базе должно быть «МАС-адрес + значение параметра macsuffix». Данному клиенту (в его учетной записи RADIUS-а) должен быть указан пароль, который был настроен как значение параметра macpasswd в настройках Chillispot.  А во вторых, для данного клиента в его учетной записи в сервере RADIUS должно быть также указано значение параметра (атрибут) Framed-IP-Address.

Рассмотрим на живом примере. Итак, у нас есть Chillispot, к которому мы будем подключать компьютер. У Chillispot пул статических адресов задан значением параметра statip, равным 192.168.182.0/25 (то есть, адреса от 192.168.182.2 и до 192.168.182.126). Сетевая плата компьютера имеет МАС-адрес равный 00-11-22-33-44-55. Мы хотим, чтобы после авторизации компьютер всегда получал адрес 192.168.182.5 (естественно, что выбраный нами адрес должен попадать в диапазон доступных статических адресов, приведенный ранее). У Chillispot включено использование суффикса (параметр macsuffix раскомментирован, и ему задано значение test), а для МАС-авторизации задан следующий пароль — super-puper-pass (указан как значение параметра macpasswd). Самый простой способ задать пользователя — вписать его в файл users, настроек RADIUS-а. Если все, что мы хотим задать для данного пользователя, это только взможность получить фиксированый адрес (ну и, естественно, выйти в интернет), то в файл users нужно добавитьвсегьо лишь две строки:

00-11-22-33-44-55test      Cleartext-Password := "super-puper-pass"
       Framed-IP-Address = 192.168.182.5

Как видите, в первой строке мы указали, что у нас будет клиент (пользователь) с логином 00-11-22-33-44-55test (то есть, как и было сказано выше — суммой МАС-адреса и суффикса) и паролем super-puper-pass. А во второй строке мы задаем для данного пользователя параметр (атрибут) Framed-IP-Address, равный тому самому IP-адресу (192.168.182.5), который мы хотим присваивать этому пользователю при каждом его подключении.

Если же вы учетные записи клиентов вашего хотспота храните в базе данных (например, MySQL), то создания указанного клиента нужно внести записи в две таблицы. Первую — в таблицу radcheck

id	username	attribute	op	value
1	00-11-22-33-44-55test	User-Password	:=	super-puper-pass

Эта первая запись указывает, что у нас в системе будет пользователь 00-11-22-33-44-55test с паролем super-puper-pass. А вторую запись нужно добавить в таблицу radreply

id	username	attribute	op	value
1	00-11-22-33-44-55test	Framed-IP-Address	:=	192.168.182.5

Это как раз запись, указывающая, какой IP-адрес (192.168.182.5) присвоить этому клиенту при авторизации.

После того, как изменения внесены и сохранены, перезапускаем RADIUS, перезапускаем Chillispot и пробуем подключить пользователя. Все должно пройти успешно. Если вы настраивали RADIUS таким образом, чтобы он вел лог авторизации, то в этом логе при подключении нашего клиента появится строка наподобие такой:

Sun Jul 11 11:01:49 2010 : Auth: Login OK: [00-11-22-33-44-55test/super-puper-pass] (from client wifi-hotspot port 1 cli 00-11-22-33-44-55)

Причинами неудачи авторизации данного клиента могут быть лишь несответствие реальных данных введенным параметрам, а также, ошибки типа «опечатки» при вводе параметров, в результате которых параметры вписанные в настройки RADIUS-а и Chillispot различаются.

Если же клиент авторизуется, но ему присваивается не тот фиксированный адрес, который мы указали, а адрес из диапазона динамических, то причина может быть одна — неверное деление диапазона сети на поддиапазоны (они пеекрываются). Использование двух вариантов распределения приведенное выше гарантиовано дает положительный результат. Если же вы устанавливаете собственные значения параметров , то проверьте их на каком-нибудь IP-калькуляторе, коих в сети превеликое множество (например, вот по этой ссылке [2]).

Дополнительные ссылки:
Заметка о настройке контроллера доступа Chillispot на компьютере под управлением ОС Linux [1]

Все мо заметки о хотспотах [3]