云计算百科
云计算领域专业知识百科平台

UESTC-从零开始搭建pppoe-radius服务器

目录

一、环境准备

二、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后的成功。

赞(0)
未经允许不得转载:网硕互联帮助中心 » UESTC-从零开始搭建pppoe-radius服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!