目录
一、环境准备
二、pppoe服务搭建
1、静态路由配置
2、pppoe环境安装
可能的问题:
3、开启pppoe服务器并且尝试连接
三、Radius服务搭建
1、环境配置
2、数据库配置
3、pppoe的radius客户端配置
四、调试与测试
1、pppoe与客户端连接
2、客户端上网测试
五、总结
一、环境准备
使用的系统为纯净的ubuntu22.04
系统的安装可以参考网上现有教程
二、pppoe服务搭建
首先创建一个pppoe服务器虚拟机,需要四张网卡,分别为连接外网网卡,两张连接子网网卡,一张连接radius服务器网卡。
1、静态路由配置
使用修改文件的方式修改,防止图形化编辑出现ip地址丢失的问题
使用命令查看具体的yaml文件
cd /etc/netplan/
ls
使用文本编辑器对文件进行编辑
sudo gedit 01-network-manager-all.yaml
(后面的文件名根据实际进行修改)
network: version: 2 renderer: NetworkManager ethernets: ens37: dhcp4: no addresses: [192.168.1.2/24] routes: – to: default via: 192.168.1.1 ens38: dhcp4: no addresses: [192.168.2.2/24] routes: – to: 192.168.2.0/24 via: 192.168.2.1 ens39: dhcp4: no addresses: [192.168.4.1/24]
以上仅是示例,需要按照需要进行修改,同时需要注意语法错误,比如缩进。
配置完成后重启网络服务并使用ifconfig查看是否正确修改
sudo netplan apply
2、pppoe环境安装
接下来需要进行pppoe服务器的环境安装,安装必要的文件并配置
安装pppoe
sudo apt install pppoe rp-pppoe
主要配置的文件有options,chap-secrets
配置options
/etc/ppp$ sudo gedit options
注意文件的位置,需要更改的选项只有几个,可以找到注释的位置修改(建议)也可以直接添加
ms-dns 8.8.8.8
-pap # 禁用PAP认证
+chap # 启用CHAP认证
asyncmap 0
local
修改 chap-secrets
sudo gedit /etc/ppp/chap-secrets
位置与options一样
user1 * 123456 *
user2 * 654321 *
示例如上
最后再修改一个文件:pppoe-server-options
require-chap login lcp-echo-interval 10 lcp-echo-failure 2
执行命令开启ipv4转发
sudo sysctl -w net.ipv4.ip_forward=1
开启外网NAT转发
sudo iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ens33 -j MASQUERADE
注意这里的ens33是你实际绑定的能够和外网连接的网卡,使用以下命令查看是否配置成功
sudo iptables -t nat -S
这样环境就基本配置完成了
可能的问题:
sudo apt-get install pppoe-server
正在读取软件包列表… 完成
正在分析软件包的依赖关系树… 完成
正在读取状态信息… 完成
E: 无法定位软件包 pppoe-server
这里就请参考网上的资料,主要的解决方法有两种,一个是更新apt库然后尝试换一个正确的名称重新尝试下载,或者是直接进行源码编译的方式安装,源码编译需要gcc等软件包进行编译。
3、开启pppoe服务器并且尝试连接
sudo pppoe-server -I ens37 -L 192.168.1.10 -R 192.168.1.19 -N 20
注意理解命令含义之后再执行
在客户端使用pppoeconf开启连接
sudo pppoeconf
终止命令
sudo poff
服务器终止命令
sudo killall pppoe-server
在客户端尝试ping 8.8.8.8 正确的配置的话应该可以ping通
三、Radius服务搭建
以上的配置已经完成了pppoe服务器和客户端主机之间的连接,接下来我们需要配置的是radius服务器,使其能够接收到pppoe发送来的认证信息并且返回认证成功或失败分组
1、环境配置
sudo apt install freeradius freeradius-mysql openssl libssl-dev -y
安装freeradius以及相关依赖,这里的是radius服务器的配置,pppoe服务器需要安装freeradius即可
首先修改的是radius服务器,修改clients.conf不同的系统路径可能不一样,我使用的是ubuntu22.04,所以文件在以下路径
/etc/freeradius/3.0/clients.conf
在下面加入一行,用作测试,不同版本的freeradius对于语法的要求不同,要注意这是老版本中会这么写,但是如果和我一样使用的是ubuntu22.04或者更高的版本,仔细看文件中会发现已经有一个localhost客户端,所以不需要重复添加,否则会发生冲突。
client 127.0.0.1 { ipv4addr = 127.0.0.1 secret = testing123 shortname = "localhost" limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } }
将这里位置的参数换成pppoe服务器的参数,也就是将127.0.0.1换成pppoe-server(名字可以自定),将ip地址换成pppoe服务器的地址,密钥不变(也可以设置成为自己的密钥),如以下所示。
client pppoe-server { ipaddr = 192.168.3.1 secret = testing123 }
注意,如果测试的时候出现服务器收到不安全的包,那有可能是在client文件或者radius文件中有以下的内容require_message_authenticator = no,将前面的注释去掉并且设置为no,这样服务器就不会要求pppoe发送包的时候限定的字段。
修改user,路径相同,在顶端加入一行,最前面是用户名,引号中是密码
test Cleartext-Password := “test”
在客户端开启调试功能,记得要先关闭端口的监听
sudo systemctl stop freeradius
sudo freeradius -X
如果正常开启的话应该最后是如下显示
这时候进行对radius服务器的本地测试,记得要重新开启一个终端
radtest test test localhost 0 testing123
发现收到reject,这是因为数据库中找不到相关的账号密码信息,拒绝是正常的,这时候找到user文件中的steve客户端部分注释,删掉后重新启动调试,执行命令
radtest steve testing localhost 0 testing123
成功的时候会有accept消息,如下图所示
这说明本地认证没有问题,接下来配置数据库里面的内容
2、数据库配置
下载数据库的文件
sudo apt update
sudo apt install mariadb-server mariadb-client -y
设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
按步骤执行下述内容,注意理解代码的含义
进入mysql模式,没有设置密码的话直接回车进入
sudo mysql -u root -p
创建radius数据库
CREATE DATABASE radius;
创建用户组
CREATE USER IF NOT EXISTS 'radius'@'localhost' IDENTIFIED BY 'radpass';
授予权限
GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost';
刷新并验证权限
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'radius'@'localhost';
退出
exit;
接下来导入freeradius的表结构
sudo mysql -u root -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
配置组与用户信息,进入radius库
sudo mysql -u root -p radius
新建组
insert into radgroupcheck (groupname,attribute,op,value) values ('usr','Auth- Type',':=','Local');
insert into radgroupcheck (groupname,attribute,op,value) values ('usr','Service-Type',':=','Framed-User');
insert into radgroupcheck (groupname,attribute,op,value) values ('usr','Framed-IP-Address',':=','255.255.255.255');
insert into radgroupcheck (groupname,attribute,op,value) values ('usr','Framed-IP-Netmask',':=','255.255.255.0');
检查新建的组
select * from radgroupcheck;
插入测试用户
INSERT INTO radcheck (username, attribute, op, value) VALUES ('test', 'Cleartext-Password', ':=', 'testpwd');
查看用户
SELECT * FROM radcheck;
关联用户和组
INSERT INTO radusergroup (username, groupname) VALUES ('test', 'user');
里面的值取决去你用什么用户名,验证关联之后退出exit
SELECT * FROM radusergroup;
关联radius服务器和数据库
sudo su cd freeradius cd 3.0 sudo ln -s ../mods-available/sql ./mods-enabled/ ls -l mods-enabled/sql # 应显示指向 mods-available/sql 的链接
编辑文件
sudo nano mods-available/sql
dialect = "mysql"
driver = "rlm_sql_${dialect}"
server = "localhost"
port = 3306
login = "radius" # 数据库用户名
password = "radpass"
# 数据库密码
radius_db = "radius" # 数据库名
read_clients = yes
注意这里的用户名和密码,修改完成之后根据教程freeradius+mysql+pppoe认证 _51CTO博客_freeradius修改一下部分文件,主要是/sites-available/default文件里面去掉files参数,增加sql参数,这部分出现的问题不少,如果出现莫名的问题的话可以通过AI或者其他博客进行针对性的修改检查
修改完成之后继续进行测试,这时候发现可以使用数据库中存储的用户名和密码收到accept了
这意味着radius服务器部分就基本配置完成了,接下来我们要进行配置的是pppoe的radius客户端部分。
3、pppoe的radius客户端配置
修改ppp/pppoe-server-options,添加以下的内容
plugin /usr/lib/pppd/2.4.9/radius.so radius-config-file /etc/freeradius/3.0/clients/etc/radiusclient/radiusclient.conf
记得要下载radius-clients,很多镜像文件无法使用,可以使用官方的ftp进行下载(记得解压安装)
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.7.tar.gz
上面修改的内容路径要和下载的文件一一对应,接下来修改radiusclient.conf文件
auth_order local,radius
优先进行本地认证,当认证不通过的时候进行radius远程服务器认证
authserver 【服务器IP】:1812
acctserver 【服务器IP】:1813
这里要填写实际的服务器ip地址
servers /etc/ppp/radius/servers
dictionary /etc/ppp/radius/dictionary
login_radius /usr/local/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/ppp/radius/port-id-map
后面的文件只要注意路径正确即可,接下来编辑servers,添加ip和密钥
192.168.3.2 testing123
四、调试与测试
到这里为止所有的环境基本也就搭建成功了,接下来我们分部分进行调试。
1、pppoe与客户端连接
为了方便调试,我将开启服务所需要的命令使用脚本的方式运行(注:如果发现复制命令到终端报错,很有可能是我复制的时候有些地方复制出了问题,可以试着重新打一遍再试)
开启pppoe服务端
监听两个网卡,这里只使用一个网卡进行测试
这时候出现新问题,进行pppoe服务的时候出现问题
Generic-Error: RP-PPPOE: child pppd process terminated
网上很少有真正解决这个问题的博客,因为这个问题非常的复杂且综合,首先注释掉pppoe-server-options中新添加的两行,回到没有radius的本地认证,测试发现可以通过,那么问题就锁定在这两个文件中了,接下来启用调试。
tail -f /var/log/syslog | grep pppd
因为是pppd进程终止,所以查看这里面的问题,这里会输出各种导致终止的命令,主要有文件路径不对,文件不对,无法正确加载,服务器无响应等,按照错误的格式对细微的地方进行修改。
修改完成之后客户端可以正常与服务器建立连接。
2、客户端上网测试
这里不知道为什么可能无法上网,需要重新设置一下ip转发,设置之后客户端可以正常上网。
五、总结
至此整个服务器的搭建全部完成,过程可谓艰难重重,网上的教程总是缺乏可参考性,ai的生成又是含糊其辞,因此我将我所有的过程分享出来,并且我会持续注意这个博客一年(也就是下一届可能继承这个项目的同学上课时候),欢迎大家指正其中的错误。
最后,特别感谢爱玩史的阿拉蕾-CSDN博客,这是一篇共创文章,所有的内容都是我们两人共同完成,没有团队协作就不可能有克服各种bug后的成功。
评论前必须登录!
注册