PPPoE服务搭建与交互流程

2023-12-19 10:48

本文主要是介绍PPPoE服务搭建与交互流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境使用Ubuntu 16.04.5 LTS系统主机,使用apt-get安装pppoe服务端:

$ sudo apt-get install pppoe       
$ pppoe-server -h

PPPoE-Server Version 3.11, Copyright (C) 2001-2009 Roaring Penguin Software Inc.
PPPoE-Server comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under the terms of the GNU General Public License, version 2
or (at your option) any later version.
http://www.roaringpenguin.com

由pppoe-server的-h的帮助信息可见,ubuntu集成的是Roaring Penguin开发的pppoe服务端程序,版本为3.11。通过查看RP的官网,可看到其pppoe服务端已经更新到了3.13版本,源代码可由此下载:https://dianne.skoll.ca/projects/rp-pppoe/download/rp-pppoe-3.13.tar.gz。此处我们仍使用ubuntu集成的3.11版本。


安装完成之后,需要修改三个配置文件,设置pppoe-server工作。


文件1:/etc/ppp/pppoe-server-options,如果此文件不存在,需要手动创建,填写一下三行内容,设置认证方式为CHAP,log文件保存位置/var/log/pppoed.log,log文件的名字可任意指定。 

$ cat /etc/ppp/pppoe-server-options 
auth
require-chap
logfile /var/log/pppd.log

文件2:/etc/ppp/options,此处包含三个配置,为windows客户端指定DNS服务器;禁用PAP认证,打开CHAP认证。

$ cat /etc/ppp/options
# /etc/ppp/options# Specify which DNS Servers the incoming Win95 or WinNT Connection should use
# Two Servers can be remotely configured
ms-dns 192.168.1.1# Don't agree to authenticate using PAP.
-pap# Require the peer to authenticate itself using CHAP [Cryptographic
# Handshake Authentication Protocol] authentication.
+chap

文件3:/etc/ppp/chap-secrets,此处设置CHAP认证方式使用的用户名与密码,以及客户端IP地址。可为不同的客户端指定不同的认证用户名和密码。这里使用*代表所有的客户端使用相同的认证信息。

$ sudo cat /etc/ppp/chap-secrets     
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
test * 123456 * 


至此pppoe服务端配置完成。如果需要转发数据包,还要打开本机的转发选项。

修改配置,重启之后有效
sudo vi  /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

临时打开转发,重启后失效:
echo 1 > /proc/sys/net/ipv4/ip_forward


启动PPPoE服务端,指定绑定的接口,本地IP地址,以及为客户端分配的IP起始地址(30.30.3.13),-N指定允许连接的客户端数量:

sudo pppoe-server -I eth3 -L 30.30.3.9 -R 30.30.3.13 -N 10

使用PPPoE客户端连接成功之后,可通过log文件查看:

$ cat /var/log/pppoed.log Using interface ppp0
Connect: ppp0 <--> /dev/pts/9
local  IP address 30.30.3.9
remote IP address 30.30.3.13

查看本地接口信息,与log信息相符,ppp0接口的本地IP为30.30.3.9,远端(PPPoE客户端)的IP地址为30.30.3.13:

$ ip addr6: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:90:27:fe:d0:04 brd ff:ff:ff:ff:ff:ffinet 30.30.3.9/24 brd 30.30.3.255 scope global eth4valid_lft forever preferred_lft forever
16: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN group default qlen 3link/ppp inet 30.30.3.9 peer 30.30.3.13/32 scope global ppp0valid_lft forever preferred_lft forever

使用TCPDUMP抓取PPPoE交互的数据包,流程如下:

 

上图可见,首先是4个PPPoED交互数据包,仅看一下第一个数据包PADI的格式:

其后为典型的PPP协商数据包。LCP协商认证方式与压缩算法等:

客户端的认证过程由3个PPP CHAP数据包完成(我们配置使用CHAP方式认证),PPPoE服务端发送CHAP Challenge数据包到客户端,客户端基于test用户的密码对Challenge数据进行hash计算,将结果返回给服务端,服务端验证一致性,返回认证成功给客户端,即最后一个PPP CHAP报文(Access granted),第二个客户端发往服务端的交互报文携带明文的用户名称(test),存在泄漏风险。

最后看一下IPCP Nak报文,其传输分配给客户端的IP地址(30.30.3.13)与DNS配置信息(192.168.1.1)。

至此初始的交互完成。LCP将一直发送echo/replay数据包检测链路,如下为Echo Reply(10), Echo Request的Code代码为(9):

 

完。

这篇关于PPPoE服务搭建与交互流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511896

相关文章

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)

《在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)》DataGrip是JetBrains公司出品的一款现代化数据库管理工具,支持多种数据库系统,包括MySQL,:本文主要介绍在D... 目录前言一、登录 mysql 服务器1.1 打开 DataGrip 并添加数据源1.2 配置 MySQL

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat