Após quatro dias de trabalho árduo na busca e descoberta de tudo o que é necessário para construir o Freeradius com os drivers UnixODBC. Eu cheguei com essa solução que finalmente funciona bem para mim. Esta resposta descreve todos os passos que eu tive que percorrer para fazer meu Freeradius trabalhar com um backend MSSQL usando o unixodbc em um servidor Debian Squeeze.
Compilando o servidor Freeradius
Para instalar o Freeradius usando o backend do MSSQL, eu tive que recompilar o Freeradius usando os drivers unixodbc.
Para habilitar este driver eu tive que modificar o pacote fornecido pelo Freeradius.
Assegure-se de que o repositório de origem esteja disponível no /etc/apt/sources.list do servidor do qual você está compilando. Se você está sentindo falta deles, a mensagem de erro é: E: Você deve colocar alguns URIs 'fonte' em seu sources.list
Um URI de origem é iniciado por deb-src
deb http://debian.mirror.rafal.ca/debian squeeze main contrib non-free
deb-src http://debian.mirror.rafal.ca/debian squeeze main contrib non-free # Source URI
deb http://debian.mirror.rafal.ca/debian-security squeeze/updates main contrib non-free
deb-src http://debian.mirror.rafal.ca/debian-security squeeze/updates main contrib non-free # Source URI
Antes de poder compilar os pacotes freeradius você precisa instalar as dependências das dependências:
apt-get build-dep -y unixodbc unixodbc-dev freetds-bin quilt freetds-common freetds-dev \
tdsodbc freeradius libiodbc2-dev
Instalar pacotes de dependências
apt-get install -y unixodbc libiodbc2-dev freetds-bin freetds-common freetds-dev tdsodbc \
libssl-dev dpkg-dev quilt libssl-dev libpam0g-dev libmysqlclient-dev libgdbm-dev \
libsasl2-dev libperl-dev libpcap-dev python-dev libsnmp-dev libpq-dev libltdl3-dev snmp
Crie o seguinte link simbólico em falta
ln -s /usr/lib/libodbc.so.1 /usr/lib/libodbc.so
Obtenha o tarball freeradius
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.2.0.tar.gz
tar zxf freeradius-server-2.2.0.tar.gz
cd freeradius-server-2.2.0
Edite o arquivo debian / rules
vim freeradius-server-2.2.0/debian/rules
Substitua o - sem-rlm_sql_unixodbc (aproximadamente linha 90) por - com-rlm_sql_unixodbc
Construa os pacotes Debian
Para construir o pacote debian, certifique-se de instalar as dependências e, em seguida, execute a seguinte linha de comando:
fakeroot dpkg-buildpackage -b -uc -d
ls ../
freeradius_2.2.0+git_i386.deb
freeradius-common_2.2.0+git_all.deb
freeradius-dbg_2.2.0+git_i386.deb
freeradius-dialupadmin_2.2.0+git_all.deb
freeradius-iodbc_2.2.0+git_i386.deb
freeradius-krb5_2.2.0+git_i386.deb
freeradius-ldap_2.2.0+git_i386.deb
freeradius-mysql_2.2.0+git_i386.deb
freeradius-postgresql_2.2.0+git_i386.deb
freeradius-utils_2.2.0+git_i386.deb
libfreeradius2_2.2.0+git_i386.deb
libfreeradius-dev_2.2.0+git_i386.deb
Agora que você construiu os pacotes com sucesso, mova-se para o diretório pai e lá você deverá refinar todos os pacotes debian necessários para construir o servidor freeradius com o suporte unixodbc.
Você pode instalá-los usando a linha de comando do dpkg.
dpkg -i freeradius_2.2.0+git_i386.deb freeradius-common_2.2.0+git_all.deb freeradius-utils_2.2.0+git_i386.deb \
libfreeradius2_2.2.0+git_i386.deb
Depois de instalar os pacotes freeradius, parei o serviço.
service freeradius stop
Eu testei usando a linha de comando:
freeradius -X
Então eu configurei a conexão SQL.
Eu tive que configurar o driver unixodbc dentro desses três arquivos:
/etc/odbc.ini
[MSSQLServer]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
ServerName = MSSQLServer
Database = radius
port = 1433
tds_version = 7.0
language = us_english
/etc/odbcinst.ini
[FreeTDS]
Description = TDS driver (MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
FileUsage = 1
/etc/freetds/freetds.conf
[MSSQLServer]
host = mssqlserver.example.com
port = 1433
tds version = 7.0
Teste a conexão usando a linha de comando isql
isql -v MSSQLServer your_db_username 'your_db_password'
# what you should see
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Agora é a hora de configurar o Freeradius para usar este unixodbc.
Aqui estão as alterações que fiz no arquivo sql.conf para que funcione.
/etc/freeradius/sql.conf
database = "mssql"
#
# Which FreeRADIUS driver to use.
#
driver = "rlm_sql_unixodbc"
# Connection info:
server = "MSSQLServer"
login = "your_db_username"
password = "your_db_password"
# Database table configuration for everything except Oracle
radius_db = "radius"
$INCLUDE sql/${database}/dialup.conf
Antes de continuar, crie a pasta / etc / freeradius / sql / mssql / para manter o arquivo dialup.conf para MSSQL.
mkdir -p /etc/freeradius/sql/mssql/
Eu tive que pegar o arquivo dialup.conf dos pacotes freeradius-mysql_2.2.0 + git_i386.deb .
Depois de ter copiado o arquivo do pacote freeradius-mysql, copie-o aqui /etc/freeradius/sql/mssql/dialup.conf .
Para fazê-lo funcionar com o MSSQL, edite o arquivo e substitua todos os arquivos < < 32 por um convert (bigint, value)
# MySQL version
'%{%{Acct-Input-Gigawords}:-0}' << 32
# MSSQL modified version
convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')
Salve seu arquivo e deve ser isso. Se você não possui o esquema MSSQL, por favor, veja o wiki do freeradius. link
Eu tive um problema com a coluna AcctStopTime que estava tentando inserir um NULL dentro dele, então alterei o tipo de coluna padrão.
alter table radius.dbo.radacct
alter column AcctStopTime datetime null;
Depois disso, você pode tentar novamente iniciar o freeradius e coletar os dados no MSSQL.
freeradius -X
Atenciosamente