у меня есть FreeRADIUS
установлен на моем сервере, а также имеет две локальные сети (или может быть больше), управляемые этим сервером. Скажем, LAN A:192.168.1.0
и LAN B: 192.168.2.0
. я использую FreeRADIUS
в комбинации с postgres
база данных. В моем radcheck
table Я вставил следующую строку:
userbane='myuser', attribute='Password', op=':=', value='mypass'
.
Теперь я хочу позволить клиентам, которые будут запрашивать услуги у моего FreeRADIUS, иметь возможность аутентифицироваться с этим именем пользователя и паролем, только если они являются частью LAN B.
Вопрос: Кто-нибудь может подсказать мне, как это сделать?
Я попытался вставить radcheck
на одну строку больше: username='myuser', attribute='NAS-IP-Address', op=':=', value='192.168.2.1'
, но безуспешно.
Любая помощь будет оценена.
Я раньше не использовал серверную часть базы данных, но использую пользователи file правило будет выглядеть примерно так:
myuser Cleartext-Password := "mypass", NAS-IP-Address == "192.168.2.1"
Исходя из этого, я думаю, вам нужно две записи в radcheck
стол:
usernane='myuser', attribute='Password', op=':=', value='mypass'
username='myuser', attribute='NAS-IP-Address', op='==', value='192.168.2.1'
Используя базу данных SQL, я решил это следующим образом:
1) Добавление специальной строки (site_id)
ALTER TABLE radcheck ADD site_id VARCHAR(30) NOT NULL default '0.0.0.0' AFTER value;
2) Изменение /etc/freeradius/sql/mysql/dialup.conf следующим образом
authorize_check_query = "SELECT id, username, attribute, value, op, site_id, valid_from, valid_until \
FROM ${authcheck_table} \
WHERE username = '%{SQL-User-Name}' AND site_id='%{NAS-Identifier}' \
ORDER BY id"
В моем случае я использовал NAS-Id, но замена% {NAS-Identifier} на% {NAS-IP-Address} и, при необходимости, site_id на site_ip сделает трюк с IP-адресом.