Freeradius

在復製到主伺服器時更新使用者名

  • June 22, 2018

我正在使用 FreeRADIUS 版本 3.0.13,並嘗試將記帳請求復製到使用數據包將 IP 映射到使用者名的第 3 方伺服器。使用者名對他們來說並不重要,它只是可以搜尋的東西。因此,我想在其中粘貼更多資訊,而不僅僅是我們的使用者名(本質上是一個埠和 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
}

引用自:https://serverfault.com/questions/917837