Назад | Перейти на главную страницу

Обновить имя пользователя при репликации на домашний сервер

Я использую 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
}