はじめに
無線LANなどで1X認証する際に「ID@グループ名」のようなレルム付きアカウントにして
利用するネットワークを決めれるとうれしいですね
設定方法
CentOS6にバンドルされたバージョン2系のFreeRADIUSを使います
/etc/raddb/radiusd.conf
instantiate {
echo
}
としてechoを有効にします
/etc/raddb/users
DEFAULT User-Name =~ "^([^@]+)@([a-z]+)"
Tunnel-Type = "VLAN",
Tunnel-Medium-Type = "IEEE-802",
Tunnel-Private-Group-Id = `%{echo:/etc/raddb/conv_vlan.sh %{1} %{2} %{Client-Shortname}}`,
シェルスクリプトはこんな感じです
conv_vlan.sh
#!/bin/sh
PATH='/usr/local/bin:/usr/bin:/bin'
USERLIST='/etc/raddb/userlist'
test $# -eq 3 || exit 1
case "${3}" in
'network1')
VLANLIST='/etc/raddb/vlanlist1'
;;
'network2')
VLANLIST='/etc/raddb/vlanlist2'
;;
*)
exit 2
;;
esac
grep -q "^${1}@${2}$" ${USERLIST} || exit 3
( grep "^${2}:" ${VLANLIST} | cut -d: -f2 | tr -d "\n" ) || exit 4
exit 0
そのグループのVLANが使えるユーザリスト
userlist
taro@hoge
jiro@hoge
saburo@fuga
グループ名とVLAN番号の変換テーブル
vlanlist1
hoge:100
fuga:200
とするとTunnel-Private-Group-Idに適切なVLAN番号が割り当てられます
例えばあるネットワークだとhogeは100番だけど違うネットワークだと別の番号になる場合は別途VLAN変換テーブルvlanlist2を準備するとよいです
無線LANのAPのアドレス帯で
%{Client-Shortname}を分けるには下記のような設定をします
/etc/raddb/clients.conf
client 192.168.0.0/24 {
shortname = network1
}
client 192.168.1.0/24 {
shortname = network2
}