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

相关文章

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素