这是我想要实现的目标,我们想使用 Microsoft SQL 后端安装 freeradius。我在网上看到,我们需要使用 unixodbc 驱动程序来实现这一目标。
我能够从 apt-get 设置 unixodbc 驱动程序,并配置 Freetds 以使用它。安装和配置后,我可以运行测试命令:
isql -v DVSQLServer USERNAME PASSWORD
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
这实际上是可行的。但是我发现下载 freeradius tarbal 时它不能使用 rlm_sql_unixodbc 驱动程序,因为在 debian/rules 文件中,他们使用标志对其进行编译:
--without-rlm_sql_unixodbc
我认为从 debian/rules 中删除标志很容易,只需使用命令行构建我自己的包即可:
fakeroot dpkg-buildpackage -b -uc
但它失败并出现错误:
checking for SQLConnect in -lodbc... no
checking for sql.h... yes
configure: error: set --without-rlm_sql_unixodbc to disable it explicitly.
configure: error: ./configure failed for ./drivers/rlm_sql_unixodbc
configure: error: ./configure failed for src/modules/rlm_sql
make: *** [config.status] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2
您知道我缺少什么才能成功编译它吗?
我还可以告诉你,我运行了这些 apt-get 命令以确保我拥有所有依赖项。
apt-get build-dep -y unixodbc freetds-bin freetds-common freetds-dev tdsodbc freeradius
apt-get install -y unixodbc freetds-bin freetds-common freetds-dev tdsodbc libssl-dev dpkg-dev
问候
答案1
经过四天的艰苦搜索,我找到了使用 UnixODBC 驱动程序构建 Freeradius 所需的一切。我终于找到了一个对我来说很有效的解决方案。这个答案描述了我必须经历的每个步骤,以使我的 Freeradius 使用 Debian Squeeze 服务器上的 unixodbc 与 MSSQL 后端一起工作。
编译 Freeradius 服务器
为了使用 MSSQL 后端安装 Freeradius,我必须使用 unixodbc 驱动程序重新编译 Freeradius。为了启用此驱动程序,我必须修改 Freeradius 提供的软件包。
确保源存储库在/etc/apt/sources.list您正在编译的服务器。如果您缺少它们,则错误消息为:E: 你必须在 sources.list 中放入一些“源”URI
源 URI 以deb-源文件
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
在编译 freeradius 包之前,您需要安装依赖项:
apt-get build-dep -y unixodbc unixodbc-dev freetds-bin quilt freetds-common freetds-dev \
tdsodbc freeradius libiodbc2-dev
安装依赖包
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
创建以下缺失的符号链接
ln -s /usr/lib/libodbc.so.1 /usr/lib/libodbc.so
获取 freeradius tarball
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
编辑 debian/rules 文件
vim freeradius-server-2.2.0/debian/rules
更换--不带-rlm_sql_unixodbc(大约 90 行)--with-rlm_sql_unixodbc
构建 Debian 软件包
要构建 debian 包,请确保您安装了依赖项,然后执行以下命令行:
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
现在您已成功构建软件包,请转到父目录,在那里您应该找到构建具有 unixodbc 支持的 freeradius 服务器所需的所有 debian 软件包。
您可以使用 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
一旦我安装了 freeradius 包,我就停止了该服务。
service freeradius stop
我使用命令行对其进行了测试:
freeradius -X
然后我配置了 SQL 连接。
我必须在这三个文件中配置 unixodbc 驱动程序:
/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
使用 isql 命令行测试连接
isql -v MSSQLServer your_db_username 'your_db_password'
# what you should see
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
现在是时候配置 Freeradius 来使用此 unixodbc 了。
以下是我在 sql.conf 文件中所做的更改,以使其正常工作。
/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
在继续之前创建/etc/freeradius/sql/mssql/文件夹来保存拨号配置文件MSSQL 文件。
mkdir -p /etc/freeradius/sql/mssql/
我必须接受拨号配置文件文件来自freeradius-mysql_2.2.0+git_i386.deb包。
从 freeradius-mysql 包中复制文件后,将其复制到此处/etc/freeradius/sql/mssql/dialup.conf。
为了使其与 MSSQL 一起工作,编辑文件并替换所有<< 32通过转换(bigint,值)
# MySQL version
'%{%{Acct-Input-Gigawords}:-0}' << 32
# MSSQL modified version
convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')
保存文件,就完成了。如果您没有 MSSQL 模式,请查看 freeradius wiki。http://wiki.freeradius.org/config/MS%20SQL%20DDL%20script
我对账户停止时间它试图插入一个无效的所以我改变了默认的列类型。
alter table radius.dbo.radacct
alter column AcctStopTime datetime null;
此后,您可以尝试再次启动 freeradius,它应该会在 MSSQL 中收集数据。
freeradius -X
问候