web-dev-qa-db-ja.com

freeradius:ユーザーによってフィルタリングされた特定のプールからIPを割り当てます

私はここで新しいです。

SqlippoolおよびLDAP認証(「ゲスト」ファイル構成ユーザー)を備えたfreeradius 3があり、すべて正常に機能しています。私は2つのsqlippoolを持っています:

-main_pool

-guest_pool

私は次のことをしたい:

ユーザーが「ゲスト」の場合はguest_poolからIPを提供し、そうでない場合はmain_poolから提供します。私の考えは、ゲストと他のユーザーを異なるVLANに配置することです。

¿ユーザーがguest_poolからのゲストオファーであるかどうかをradiusdhcpに伝えるにはどうすればよいですか?

私の悪い英語のために申し訳ありません。

ありがとう。

1
Pixel

解決しました!

手がかりを与えてくれたArranCudbard-Bellに感謝します!

まず、usernameとmac(PK)の両方がvarcharである「userhardaddr」というテーブルを作成しました。

(radius conf dir)/ sites-enabled/defaul(セクションpost-auth)で、「REPLACE」クエリを実行しました。

post-auth {
    ...
    update reply {
        Tmp-String-0 := "%{sql:REPALCE INTO userhardaddr(username,mac) VALUES(%{User-Name},%{Calling-Station-Id})}"
    ... 
    }
}

これにより、テーブル内の接続されたMACのユーザーが存在する場合は置き換えられます。存在しない場合、REPLACEはINSERTのように行を作成します。

次に、sites-enabled/dhcp(検出および要求セクション)で:

dhcp DHPC-Discover {
    update request {
        ...
        User-Name = "%{sql:SELECT username FROM userhardaddr where mac = REPLACE ('%{DHCP-Client-Hardware-Address}',':','-')}"
        ...
    }
    ...
    if(&User-Name=='guest') {
        &Pool-Name = "guest_pool"
    }
    else {
        &Pool-Name = "main_pool"
    }
...
}
...
dhcp DHPC-Request {
    (same in discover)
}

これで、Macアドレスに従ってDBからユーザー名を取得します。

IFステートメントで、クエリによって返された値を「guest」と比較し、対応するIPプールを割り当てます。

再度、感謝します。

よろしく。

0
Pixel