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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步