Интересно, может ли кто-нибудь мне помочь.
Цель состоит в том, чтобы назначить разным пользователям разные IP-адреса в зависимости от точки доступа, к которой они подключаются. Я не могу установить это статически, так как пользователи будут путешествовать и в конечном итоге будут подключаться через другой AP.
Поэтому я хотел проверить, могу ли я сопоставить IP-адрес nas, а затем назначить этого пользователя группе, которая, в свою очередь, выделит правильный пул IP-адресов.
Я провел довольно мало исследований, и кажется, что это так же просто, как добавить его в таблицу radgroupcheck. Как такой:
id | groupname | attribute | value | op
----+-----------+----------------+------------+----
1 | Group1 | Nas-IP-Address | x.x.x.x | ==
4 | Group1 | Pool-Name | POOL1 | :=
Однако в радиусе -X я даже не вижу, чтобы он пытался проверить группу.
Кажется, проверяется таблица radusergroup, но там ничего нет из-за того, что мне нужно динамически устанавливать группу пользователей в зависимости от местоположения.
Любая помощь будет оценена.
Спасибо
Роб
Я думаю, ты должен уметь использовать NAS Huntgroups делать то, что вы пытаетесь сделать,
Следуя примеру, создадим таблицу:
CREATE TABLE radhuntgroup (
id int(11) unsigned NOT NULL auto_increment,
groupname varchar(64) NOT NULL default '',
nasipaddress varchar(15) NOT NULL default '',
nasportid varchar(15) default NULL,
PRIMARY KEY (id),
KEY nasipaddress (nasipaddress)
) ;
Добавьте адреса вашего NAS:
ВСТАВИТЬ В
radhuntgroup
(имя группы, насипадрес) ЗНАЧЕНИЯ («Нас_1», «192.168.0.10»); ВСТАВИТЬ Вradhuntgroup
(имя группы, насипадрес) ЗНАЧЕНИЯ («Нас_2», «192.168.1.10»);
Тогда в authorize {}
раздел, вы должны добавить этот код:
{Huntgroup-Name: = "% {sql: SELECT groupname FROM radhuntgroup WHERE nasipaddress = '% {NAS-IP-Address}'}"}
Затем вы можете добавить строки в radgroupcheck
таблица для проверки других значений (при необходимости) или просто radgroupreply
таблица, в которой вы можете назначить им определенный пул ..
Ответ NickW теоретически должен работать. Однако по какой-то причине он работал с использованием Radtest, но не работал, когда я авторизовался через AP. Я использую EAP, поэтому wpa2-enterpise с подписанным сертификатом. (Я следил за этим руководствообратите внимание, что я использую сервер centos, а не ubuntu)
Я закончил тем, что зашел в свой сайт с включенным / по умолчанию, в разделе пост-авторизации я добавил это перед моим sqlippool.
update control {
Pool-Name := "%{sql:select value from radgroupcheck left join radhuntgroup on (radhuntgroup.groupname=radgroupcheck.groupname) where radhuntgroup.nasipaddress ='%{NAS-IP-Address}'}"
}
У меня стандартный макет таблицы, я добавил группу radhuntgroup, предложенную NickW, а затем сопоставил ее с моей таблицей radgroupcheck, например
радхантгруппа:
id | groupname | nasipaddress | nasportid
----+--------------+--------------+-----------
1 | South Africa | 10.xx.xx.xx |
2 | Mozambique | 10.xx.xx.xx |
radgroupcheck:
id | groupname | attribute | op | value
----+--------------+-----------+----+------------
4 | South Africa | Pool-Name | := | ZA_IP_POOL
7 | Mozambique | Pool-Name | := | MZ_IP_POOL
Итак, результат в моем radiusd -X выглядит следующим образом
# Executing section post-auth from file /etc/raddb/sites-enabled/default
+- entering group post-auth {...}
sql_xlat
expand: %{User-Name} -> robert@test
sql_set_user escaped user --> 'robert@test'
expand: select value from radgroupcheck left join radhuntgroup on (radhuntgroup.groupname=radgroupcheck.groupname) where radhuntgroup.nasipaddress ='%{NAS-IP-Address}' -> select value from radgroupcheck left join radhuntgroup on (radhuntgroup.groupname=radgroupcheck.groupname) where radhuntgroup.nasipaddress ='10.53.0.7'
expand: /var/log/radius/sqltrace.sql -> /var/log/radius/sqltrace.sql
rlm_sql (sql): Reserving sql socket id: 4
rlm_sql_postgresql: query: select value from radgroupcheck left join radhuntgroup on (radhuntgroup.groupname=radgroupcheck.groupname) where radhuntgroup.nasipaddress ='10.53.0.7'
rlm_sql_postgresql: Status: PGRES_TUPLES_OK
rlm_sql_postgresql: query affected rows = 1 , fields = 1
sql_xlat finished
rlm_sql (sql): Released sql socket id: 4
expand: %{sql:select value from radgroupcheck left join radhuntgroup on (radhuntgroup.groupname=radgroupcheck.groupname) where radhuntgroup.nasipaddress ='%{NAS-IP-Address}'} -> ZA_IP_POOL
++[control] returns noop
rlm_sql (sql): Reserving sql socket id: 3
[sqlippool] expand: %{User-Name} -> robert@test
[sqlippool] sql_set_user escaped user --> 'robert@test'
[sqlippool] expand: START TRANSACTION -> START TRANSACTION
rlm_sql_postgresql: query: START TRANSACTION
rlm_sql_postgresql: Status: PGRES_COMMAND_OK
rlm_sql_postgresql: query affected rows = 0
[sqlippool] expand: UPDATE radippool SET nasipaddress = '', pool_key = 0, callingstationid = '', expiry_time = 'now'::timestamp(0) - '1 second'::interval WHERE nasipaddress = '%{NAS-IP-Address}' AND pool_key = '%{NAS-Port}' -> UPDATE radippool SET nasipaddress = '', pool_key = 0, callingstationid = '', expiry_time = 'now'::timestamp(0) - '1 second'::interval WHERE nasipaddress = '10.53.0.7' AND pool_key = ''
rlm_sql_postgresql: query: UPDATE radippool SET nasipaddress = '', pool_key = 0, callingstationid = '', expiry_time = 'now'::timestamp(0) - '1 second'::interval WHERE nasipaddress = '10.53.0.7' AND pool_key = ''
rlm_sql_postgresql: Status: PGRES_COMMAND_OK
rlm_sql_postgresql: query affected rows = 1
[sqlippool] expand: SELECT framedipaddress FROM radippool WHERE pool_name = '%{control:Pool-Name}' AND expiry_time < 'now'::timestamp(0) ORDER BY (username <> '%{SQL-User-Name}'), (callingstationid <> '%{Calling-Station-Id}'), expiry_time LIMIT 1 FOR UPDATE -> SELECT framedipaddress FROM radippool WHERE pool_name = 'ZA_IP_POOL' AND expiry_time < 'now'::timestamp(0) ORDER BY (username <> 'robert@test'), (callingstationid <> '38-AA-3C-5E-7E-40'), expiry_time LIMIT 1 FOR UPDATE
rlm_sql_postgresql: query: SELECT framedipaddress FROM radippool WHERE pool_name = 'ZA_IP_POOL' AND expiry_time < 'now'::timestamp(0) ORDER BY (username <> 'robert@test'), (callingstationid <> '38-AA-3C-5E-7E-40'), expiry_time LIMIT 1 FOR UPDATE
rlm_sql_postgresql: Status: PGRES_TUPLES_OK
rlm_sql_postgresql: query affected rows = 1 , fields = 1
[sqlippool] expand: UPDATE radippool SET nasipaddress = '%{NAS-IP-Address}', pool_key = '%{NAS-Port}', callingstationid = '%{Calling-Station-Id}', username = '%{SQL-User-Name}', expiry_time = 'now'::timestamp(0) + '18000 second'::interval WHERE framedipaddress = '10.53.0.111' -> UPDATE radippool SET nasipaddress = '10.53.0.7', pool_key = '', callingstationid = '38-AA-3C-5E-7E-40', username = 'robert@test', expiry_time = 'now'::timestamp(0) + '18000 second'::interval WHERE framedipaddress = '10.53.0.111'
rlm_sql_postgresql: query: UPDATE radippool SET nasipaddress = '10.53.0.7', pool_key = '', callingstationid = '38-AA-3C-5E-7E-40', username = 'robert@test', expiry_time = 'now'::timestamp(0) + '18000 second'::interval WHERE framedipaddress = '10.53.0.111'
rlm_sql_postgresql: Status: PGRES_COMMAND_OK
rlm_sql_postgresql: query affected rows = 1
[sqlippool] Allocated IP 10.53.0.111 [6f00350a]
[sqlippool] expand: COMMIT -> COMMIT
Я надеюсь, что эта информация поможет кому-то еще пережить ту же борьбу, через которую прошел я.