通过Docker安装Freeradius和daloradius【更新】
首先,我们以Ubuntu 18.04.4 LTS为例,安装Docker。旧版本的Docker曾被叫做:docker、docker.io或者docker-engine。如果系统中存在这些旧的版本,请卸载它们。$ sudo apt-get remove docker docker-engine docker.io containerd runc更新apt软件包索引,并安装相关的软件包,使apt可以通过
首先,我们以Ubuntu 18.04.4 LTS为例,安装Docker。
旧版本的Docker曾被叫做:docker、docker.io或者docker-engine。如果系统中存在这些旧的版本,请卸载它们。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新apt软件包索引,并安装相关的软件包,使apt可以通过HTTPS来使用软件仓库。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加Docker官方的GPG密钥:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
通过搜索GPG指纹的后8个字符,验证您现在是否拥有带有指纹9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的密钥。
$ sudo apt-key fingerprint 0EBFCD88
出现下面的结果就表示正常:
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
使用以下命令添加Docker的稳定版仓库(其实就是向/etc/apt/source.list里添加PPA源):
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新apt软件包索引,并安装最新版的Docker引擎和容器。
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
为docker的dockerhub添加国内镜像
$ sudo nano /etc/docker/daemon.json
修改daemon.json文件,如果有注册阿里云账号,可以在仓库服务中得到一个专用的docker镜像地址,将registry-mirrors改为:
{
"registry-mirrors": [
"https://阿里云申请得到的地址.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io"
]
}
如果没有阿里云账号,可以直接改成:
{
"registry-mirrors": [
"http://f1361db2.m.daocloud.io"
]
}
如果该文件不存在,直接保存即可新建一个daemon.json。nano编辑器的快捷键Ctrl+O为保存,Ctrl+X为退出。
重新加载服务配置文件,重启docker服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service
允许开机启动Docker。
$ sudo systemctl enable docker
拉取并运行hello-world镜像测试Docker是否正常运行。
$ sudo docker run hello-world
部署轻量级的Portainer服务器:
Portainer服务器是一个Docker的容器,随后可以通过Portainer以Web形式管理Docker。
$ sudo docker volume create portainer_data
$ sudo docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
参数–restart=always是为了达到开机自动启动容器的目的,后面安装的其他容器可以自行手动添加此参数,否则服务器重启以后,这些容器不能跟随服务器自动启动,还需要手动去启动。
稍等片刻,等待容器完成安装,在浏览器里进入http://服务器的IP地址:9000/,第一次进入需要建立一个管理员用户并设置密码,具体使用方法可以自行百度。
安装mariadb:
$ sudo docker pull mariadb
$ sudo docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=数据库root用户密码 -d mariadb
这里有个地方尤其需要注意,那就是数据库的字符集问题。通过上面的命令安装的mariadb,默认的字符集是latin1,在使用daloradius时,因为daloradius操作数据库使用的是较为过时的PEAR DB库,在默认情况下插入数据库的数据都是latin1字符集的数据,中文字符在UTF-8环境下会造成乱码。解决的方法有两个:
1、在通过docker安装mariadb的时候直接加上字符集参数。命令如下:
$ sudo docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=数据库root用户密码 -d mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
2、已经安装好数据库的情况下,可以进入容器,修改mariadb的配置文件,更改数据库的默认字符集,更改完以后需要重启数据库。
查看容器ID:
$ sudo docker ps
记住mariadb的容器ID(CONTAINER ID),用下面的命令进入容器:
$ sudo docker exec -it mariadb的容器ID /bin/bash
用vi编辑器或者nano(不习惯用vi的可以用这个编辑器,如果容器内没有,可能需要apt-get install nano或者yum install nano安装一个,安装之前要运行apt-get update或者yum update更新一下)
$ vi /etc/mysql/mariadb.cnf
原来的默认配置如下:
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
#default-character-set = utf8
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
#character-set-server = utf8
#collation-server = utf8_general_ci
#character_set_server = utf8
#collation_server = utf8_general_ci
# Import all .cnf files from configuration directory
!includedir /etc/mysql/mariadb.conf.d/
按照下列配置修改:
# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8mb4
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
# Import all .cnf files from configuration directory
!includedir /etc/mysql/mariadb.conf.d/
修改完以后保存并重启mariadb。可以使用如下mysql命令确认是否修改成功:
修改之前:
mariadb> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
mariadb> show global variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.06 sec)
修改完并重启之后:
mariadb> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
mariadb> show global variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)
安装phpmyadmin:
(当然也可以不安装这个软件直接用命令行或者类似Navicat一类的软件管理mariadb数据库)
$ sudo docker pull phpmyadmin/phpmyadmin
$ sudo docker run --name phpmyadmin -d --link mariadb:db -p 8080:80 phpmyadmin/phpmyadmin
完成以后,在浏览器中键入http://服务器的IP地址:8080/,即可打开phpmyadmin的登录页面。
在数据库中新建一个名称为radius的数据库和一个名称为radius的用户,将radius数据库的所有权限赋予radius用户,并且允许radius用户从任何主机访问数据库(当然也可以根据实际情况做一些限制)。
安装freeradius、daloradius(freeradius的web管理系统)集成版:
$ sudo docker pull frauhottelmann/daloradius-docker:amd64-v1.1-2-focal
$ sudo docker run -d -p daloradius的端口:80 -e TZ=Asia/Shanghai -e MYSQL_PASSWORD=数据库radius用户的密码 --env MYSQL_HOST=数据库服务器的IP地址 --name=freeradius frauhottelmann/daloradius-docker:amd64-v1.1-2-focal
【5月29日更正:】
上面的docker run的命令有问题,需要将端口1812、1813暴露出来,并指定为udp协议端口。
sudo docker run -d -p daloradius的端口:80 -p 1812:1812/udp -p 1813:1813/udp -e TZ=Asia/Shanghai -e MYSQL_PASSWORD=数据库radius用户的密码 --env MYSQL_HOST=数据库服务器的IP地址 --restart=always --name=freeradius frauhottelmann/daloradius-docker:amd64-v1.1-2-focal
完成以后,在浏览器里输入http://服务器的IP地址:端口号/daloradius/ ,即可进入daloradius登录界面了,具体使用方法请自行百度。
一些需要注意的坑:
1、freeradius3.0安装路径有变动,不能照搬以前版本的命令和路径。
2、在daloradius中做的nas相关配置,做完以后要重启freeradius,因为nas的配置只在freeradius启动的时候读取并配置,运行过程中做的任何改动都不会生效。
3、注意各种防火墙对相应端口的屏蔽,比如使用cloudstack平台的朋友,需要在安全组中调整出口、入口规则,允许相关端口数据通过。
4、带数据库支持的freeradius,中兴和华为BRAS设备的厂商属性(字典文件)需要手动导入数据库。freeradius自带有这两个厂商的字典文件,把内容复制出来,在daloradius的属性导入功能中粘贴并导入即可。
5、radius和bras对接,radius-ping不通的话,可以使用抓包软件辅助查找问题,PC端可以用wireshark、linux端用tcpdump。PC端测试软件可以用NTRadPing。
2020年6月24日更新:
限制一号多拨:
对于单个用户,在radcheck表中对某个用户添加check属性: Simultaneous-Use:=1。
对于一组用户,在radgroupcheck表中对某个用户组添加 check属性:Simultaneous-Use:=1。
限制用户帐号的有效时间(设置账号有效期):
在radcheck表中对某个用户添加check属性:Expiration:=24 Jun 2025 10:00或者Expiration:=24 Jun 2025,注意时间应为RFC-822格式。
关于限速:
各个厂家有自己各自不同的限速属性,中兴需要配置下列4个属性:
ZTE-Rate-Ctrl-Scr-Down
用户IPv4下行流量保证速率(cir),单位:kbps,
ZTE-Rate-Ctrl-Scr-Up
用户IPv4上行流量保证速率(cir),单位:kbps,
ZTE-Rate-Ctrl-Burst-Max-Down
用户IPv4下行流量保证令牌桶(cbs),单位:KB。
ZTE-Rate-Ctrl-Burst-Max-Up
用户IPv4上行流量保证令牌桶(cbs),单位:KB。
Mikrotik的ROS要配置如下的属性:
Mikrotik-Rate-Limit 客户的速率限制。字符串表示,格式为 rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time] [priority] [rx-rate-min[/tx-rate-min]]]]
2020年7月24日更新:
关于某些BRAS设备和Freeradius对接以后,radacct表没有用户记账数据的解决办法请参考我的这篇文章。
daloradius的日期选择器(主要用在手动添加用户的时候选择用户帐号的有效时间)年份只能选择到当前的年份,当然可以手工填入日期,这只是个非常小的问题,需要改动的朋友,请修改daloradius目录中include/management/目录下的dynamic_attributes.php文件的227行和241行,将drawHelperDateTime()和drawHelperDate()两个函数中结束年份加5(+5),从而增加未来5年的可选择年份,当然也可以自行修改。还有mng_new_quick.php文件的421行,将date(‘Y’,time())改为date(‘Y’,time())+5,也是同样的道理。
另外radacct中记录的用户各种记账时间为UTC时间,与我们所在地区用的北京时间相差8小时,因为这是RADIUS协议所规定的,为了不引起其他麻烦,我不建议直接修改这个表中的时间为北京时间。如果在daloradius中查看起来不方便,可以修改daloradius的程序,只是让其在web端呈现的时候显示为北京时间即可。
2020年11月17日更新:
1、如果用户的密码要使用加密格式存储在数据库中(比如MD5-Password),在BRAS/NAS上不能使用CHAP认证协议,因为CHAP认证协议的密码源必须是明文,所以只能使用PAP认证模式。所以如果用户的密码用MD5加密的方式存储在数据库中,拨号被拒绝(Access-Reject),提示错误691,密码设置成明文的时候就可以正常拨号的时候,就需要检查BRAS/NAS的认证模式是否正确了。
2、用户密码用MD5-Password形式保存的时候,可以是大写的16进制、也可以是小写的16进制,也可以是经过base64编码过的字符串(这里需要注意的是,是对MD5加密后的16进制数据进行base64编码,而不是对加密后的字符串进行编码,这两种编码结果肯定是不相同的)。
比如:
明文密码“passme”经过MD5加密的小写的16进制
MD5-Password:=ba018160fc26e0cc2e929b8e071f052d
经过MD5加密的大写的16进制
MD5-Password:=BA018160FC26E0CC2E929B8E071F052D
以及将16进制数据base64编码过的字符串
MD5-Password:=ugGBYPwm4MwukpuOBx8FLQ==
三者都可以通过认证。
3、最后推荐一本书《FreeRADIUS Beginner’s Guide》,貌似没有中文版,这本书对radius协议及freeradius介绍还是非常透彻的。
更多推荐
所有评论(0)