Вот чего я пытаюсь достичь: мы хотим установить freeradius с помощью серверной части Microsoft SQL. Я читал в Интернете, что нам нужно достичь этой цели с помощью драйвера unixodbc.
Я могу настроить драйвер unixodbc из apt-get, и если я настрою Freetds для его использования. После установки и конфигов могу запустить тестовую команду:
isql -v DVSQLServer USERNAME PASSWORD
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
Это действительно работает. Но я обнаружил, что загружая tarbal freeradius, он не может использовать драйвер 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
С уважением
После четырех дней напряженной работы по поиску и поиску всего необходимого для сборки Freeradius с драйверами UnixODBC. Я придумал то решение, которое наконец-то мне подходит. В этом ответе описаны все шаги, которые мне пришлось пройти, чтобы заставить мой Freeradius работать с серверной частью MSSQL с использованием unixodbc на сервере Debian Squeeze.
Компиляция сервера Freeradius
Чтобы установить Freeradius с помощью бэкэнда MSSQL, мне пришлось перекомпилировать Freeradius с помощью драйверов unixodbc. Чтобы включить этот драйвер, мне пришлось изменить пакет, предоставленный Freeradius.
Убедитесь, что исходный репозиторий доступен в /etc/apt/sources.list сервера, с которого вы компилируете. Если они отсутствуют, появляется сообщение об ошибке: E: Вы должны поместить несколько исходных URI в свой sources.list
Исходный URI начинается с 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
Прежде чем вы сможете скомпилировать пакеты 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
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
Заменить --without-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
Теперь, когда вы успешно собрали пакеты, перейдите в родительский каталог, и там вы должны утвердить все пакеты debian, которые вам нужны, чтобы построить сервер freeradius с поддержкой unixodbc.
Вы можете установить их с помощью командной строки 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
Прежде чем продолжить, создайте / и т. д. / freeradius / sql / mssql / папка для хранения dialup.conf файл для MSSQL.
mkdir -p /etc/freeradius/sql/mssql/
Мне пришлось взять dialup.conf файл из freeradius-mysql_2.2.0 + git_i386.deb пакеты.
После того, как вы скопировали файл из пакета freeradius-mysql, скопируйте его сюда /etc/freeradius/sql/mssql/dialup.conf.
Чтобы заставить его работать с MSSQL, отредактируйте файл и замените все << 32 по convert (bigint, значение)
# MySQL version
'%{%{Acct-Input-Gigawords}:-0}' << 32
# MSSQL modified version
convert(bigint, '%{%{Acct-Input-Gigawords}:-0}')
Сохраните файл, и все готово. Если у вас нет схемы MSSQL, пожалуйста, посмотрите вики freeradius. http://wiki.freeradius.org/config/MS%20SQL%20DDL%20script
У меня была проблема с AcctStopTime столбец, в который он пытался вставить НОЛЬ внутри него, поэтому я изменил тип столбца по умолчанию.
alter table radius.dbo.radacct
alter column AcctStopTime datetime null;
После этого вы можете попробовать снова запустить freeradius, и он должен собирать данные в MSSQL.
freeradius -X
С уважением