Я использую FreeRADIUS версии 3.0.13 и пытаюсь реплицировать учетные запросы на сторонний сервер, который использует пакеты для сопоставления IP-адресов с именем пользователя. Имя пользователя для них не имеет значения, это просто то, что можно найти. Таким образом, я хочу вставить туда больше информации, чем просто наше имя пользователя (которое по сути является портом и vlan). Я написал запрос на обновление, который делает то, что я хочу, однако я могу понять, как обновить его только на PROXY, а не на REPLICATE.
Если я обновлю его в разделе «preacct», это нарушит фактический учет, который я веду локально, потому что мои локальные учетные пакеты имеют мое измененное имя пользователя.
preacct {
update request {
User-Name := "%{User-Name}_%{sql: SELECT b.agreement FROM radcheck a, customer_customer b WHERE a.customer_id = b.id and a.username = '%{User-Name}'}_%{sql: SELECT REPLACE(b.name,' ','_') FROM radcheck a, customer_customer b WHERE a.customer_id = b.id and a.username = '%{User-Name}'}"
}
update control {
#Proxy-To-Realm := r_ca_fa
Replicate-To-Realm := r_ca_fa
}
replicate
Если я обновляю прокси-запрос в разделе «pre-proxy», он делает то, что я хочу, но, похоже, я могу заставить это работать, только если я прокси, а не реплицирую. Прокси-сервер работает нормально, за исключением того, что мой сервер ожидает ответов, которые никогда не поступят, а затем в конечном итоге объявляет сервер мертвым (я вижу это в журналах, не уверен, что это действительно повлияет на службу).
Не уверен, какая еще информация может иметь отношение к устранению неполадок, но я работал над этим в течение долгого времени и просматривал доски, но, похоже, не мог понять этого. Любая помощь будет оценена.
Спасибо!
Да, модуль репликации немного странный, он обходит большую часть конечного автомата протокола для RADIUS и просто создает новые пакеты на лету, которые записываются непосредственно в выходной сокет.
В результате ни один из обычных списков прокси-серверов не функционирует так, как обычно.
Если вы хотите переписать какие-либо атрибуты в исходящем пакете, вам необходимо изменить их в текущем запросе.
update {
request:Tmp-String-0 := &User-Name
request:User-Name := "%{User-Name}_%{sql: SELECT b.agreement FROM radcheck a, customer_customer b WHERE a.customer_id = b.id and a.username = '%{User-Name}'}_%{sql: SELECT REPLACE(b.name,' ','_') FROM radcheck a, customer_customer b WHERE a.customer_id = b.id and a.username = '%{User-Name}'}"
control:Replicate-To-Realm := 'r_ca_fa'
}
replicate
update {
request:User-Name := &Tmp-String-0
}