PPPOE简述

PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、发送数据。PPP是一种分层协议,物理层用来进行实际的点到点连接。由链路控制层(LCP)发起对链路的建立、配置和测试。在LCP初始化完成后,通过一种或多种网络控制协议来传送特定协议族的通信。PPP协议具有处理错误检测、支持多个协议、允许在连接时刻协商IP地址、允许身份认证等特点。PPP协议工作于二层网络即数据链路层,在内核中实现。

PPPoe的英文全称为Point to Point Protocol over Ethernet,它在以太网上承载了点对点协议。可以说PPPoe是将以太网和PPP协议相结合的协议,是在以太网中转播PPP帧信息的技术,它利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并对接入的每一台主机实现控制、计费功能,极高的性价比使PPPoE广泛应用在包括小区组网建设等一系列应用中,目前流行的宽带接入方式ADSL就使用了PPPoE协议。

PPPoE将PPP协议封装在以太网帧上进行传输,它的通信过程分为探测(Discovery)和PPP会话(Session)2个阶段。PPPoE Discovery阶段主要是客户机确定AC(Access Concentrator)以及客户机与AC协商Session ID。而PPPoE Session用于完成数据包的接收与发送,同时它也用于完成PPP链路的协商(LCP),以及网络层的控制协商(IPCP)等。

PPPOE服务端搭建

为便于测试pppoe功能,在树莓派上部署PPPoE服务器,以连接网关测试网关PPPoE上网功能,主要参考文档:基于linux环境的PPPOE服务器搭建

树莓派3B+有一个有线网口和一个无线网口,其中无线网口为wan口,连接外网,实现上网功能;有线网口连接网关eth0,网关通过PPPoE借助无线网口实现上网功能,具体部署如下。

1. 确认网口的ip及路由配置。

~$ ifconfig
eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.10.111 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80:::e96f:63eb:46e2 prefixlen scopeid 0x20<link>
inet6 fd51:42f8:caae:d92e::ff prefixlen scopeid 0x0<global>
ether b8::eb:ef::a2 txqueuelen (Ethernet)
RX packets bytes (154.0 KiB)
RX errors dropped overruns frame
TX packets bytes (48.4 KiB)
TX errors dropped overruns carrier collisions lo: flags=<UP,LOOPBACK,RUNNING> mtu
inet 127.0.0.1 netmask 255.0.0.0
inet6 :: prefixlen scopeid 0x10<host>
loop txqueuelen (Local Loopback)
RX packets bytes (390.0 B)
RX errors dropped overruns frame
TX packets bytes (390.0 B)
TX errors dropped overruns carrier collisions wlan0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 172.17.16.157 netmask 255.255.255.0 broadcast 172.17.16.255
inet6 fe80::d791:dfeb:23e2:20e8 prefixlen scopeid 0x20<link>
ether b8::eb:ba:c5:f7 txqueuelen (Ethernet)
RX packets bytes (1.4 MiB)
RX errors dropped overruns frame
TX packets bytes (50.2 KiB)
TX errors dropped overruns carrier collisions
~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.10.1 0.0.0.0 UG eth0
default 172.17.16.254 0.0.0.0 UG wlan0
172.17.16.0 0.0.0.0 255.255.255.0 U wlan0
192.168.10.0 0.0.0.0 255.255.255.0 U eth0

2. 安装pppoe软件

sudo apt install pppoe

安装完成后存在pppoe-server命令。

3. 配置/etc/ppp/options和/etc/ppp/pppoe-server-options,测试可行样例如下。

~$ cat /etc/ppp/options  | grep -v '#'
ms-dns 219.141.136.10
ms-dns 114.114.114.114
ms-dns 8.8.8.8
asyncmap
auth
crtscts
local
lock
hide-password
modem
-pap +chap
proxyarp
lcp-echo-interval
lcp-echo-failure
noipx
~$ cat /etc/ppp/pppoe-server-options
#PPP options for the PPPoE server require-chap
lcp-echo-interval
lcp-echo-failure
logfile /var/log/pppd.log

4.   配置CHAP认证文件/etc/ppp/chap-secrets,暂设置用户名为test,上网口令(密码)为123456。

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

5. 设置树莓派网关实现eth0数据转发到无线wlan0,实现上网功能

1) PPPoE 协议接入控制的主要方式就是通过对IP数据包的封装再转发。所以要配置 PPPoE 服务器必须要开启IP转发功能。开启IP转发功能需要去除/etc/sysctl.conf 文件中 net.ipv4.ip_forward=1 该行的注释,随后运行 sudo sysctl -p 即可生效配置打开 IP 转发功能。

2) 树莓派的默认网关是eth0有线网口,其次是无线网口wlan0,应去除eth0的默认路由。

sudo route del default dev eth0

3) 设置数据转发

sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/ -o wlan0 -j MASQUERADE

6. 开启PPPoE服务。

sudo  pppoe-server  -I eth0 -L 192.168.10.100 -R 192.168.10.5 -N 

-I 参数为指定pppoe服务器所监听连接请求的网卡名称,可使用 ifconfig 命令查看。

-L 参数PPPoE服务器的IP地址,此IP地址为PPPOE服务器的虚拟IP地址,与网卡enp2s0 地址无关

-R 参数为当有客户连接到服务器上时,pppoe服务器分配给客户端的起始IP地址

-N 参数为指定最多可以连接pppoe服务器的客户端数量

此时PPPoE服务器搭建完成,可通过eth0连接PC,直接在windows下pppoe拨号上网测试服务器搭建是否成功。windows下pppoe拨号只需输入用户名和密码即可。

7. 关闭PPPoE服务

sudo killall pppoe-server

PPPOE客户端应用

1.   pppoe工作于链路层,需要linux内核支持,主要选择“PPP over Ethernet”, 保险起见可都选择。

Device Drivers ->
Network device support ->
<M> ppp(point-to-point protocol) support
<M> PPP BSD-Compress compression
<M> PPP Deflate compression
[*] PPP filtering
<M> PPP MPPE compression (encryption)
[*] PPP multilink support
<M> PPP over Ethernet
<M> PPP support async serial ports
<M> PPP support for sync tty ports

2.   安装pppoe软件,Ubuntu下命令如下:

apt install pppoe

安装完整后,在/usr/sbin下有pppoe拨号相关的脚本或可执行程序:

pppoe-setup:配置程序,把输入的账号密码等信息存入配置文件

pppoe-start:拨号程序,连接网络

pppoe-stop:断开

pppoe-status:查看连接状态

pppoe-connect:连接网络,被pppoe-start所调用

pppoe-init:初始化,被其他程序调用

3.   运行pppoe-setup完成初始化配置

>> Enter your PPPoE user name: ——输入拨号帐户的用户名
>> Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethn, where n is a number. (default eth0): ——输eth0
>> Enter the demand value (default no): ——输no
>> Enter the DNS information here: ——输SERVER(由PPPoE服务器提供)
>> Please enter your PPPoE password: ——输用户口令
>> Choose a type of firewall (-): ——输0 (0为不要防火墙)
>> Accept these settings and adjust configuration files (y/n)? ——输y

相关配置内容会保存到/etc/ppp/pppoe.conf和/etc/chap-secrets、/etc/pap-secrets中,主要的配置内容为用户名和用户口令,这部分也是网关程序需要处理的部分。

4.   运行pppoe-start开始拨号,拨号成功会输出“Connected!”,且可通过pppoe-status确认ppp0网卡信息(且成功获取IP)。

#:/etc/ppp# pppoe-status
pppoe-status: Link is up and running on interface ppp0
ppp0: flags=<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu
inet 192.168.10.13 netmask 255.255.255.255 destination 192.168.10.100
ppp txqueuelen (Point-to-Point Protocol)
RX packets bytes (100.0 B)
RX errors dropped overruns frame
TX packets bytes (91.0 B)
TX errors dropped overruns carrier collisions

5.   运行pppoe-stop停止拨号上网

#:/etc/ppp# pppoe-stop
Killing pppd ()
Killing pppoe-connect ()

PPPOE网关部署

pppoe在智能网关中可通过systemd管理来开启或关闭pppoe拨号上网。systemd服务配置文件内容:

[Unit]
Description=PPP over ethernet
After=network-online.target systemd-networkd.service
Wants=network-online.target systemd-networkd.service [Service]
Type=forking
ExecStart=/usr/sbin/pppoe-start
ExecReload=/usr/sbin/pppoe-stop;/usr/sbin/pppoe-start
ExecStop=-/usr/sbin/pppoe-stop
ExecStopPost=-ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Restart=on-failure [Install]
WantedBy=multi-user.target

可通过systemctl开启、关闭或查询状态:

#:/etc/ppp# systemctl stop pppoe
#:/etc/ppp# systemctl start pppoe
#:/etc/ppp# systemctl status pppoe
● pppoe.service - PPP over ethernet
Loaded: loaded (/lib/systemd/system/pppoe.service; disabled; vendor preset: e
nabled)
Active: active (running) since Sat -- :: UTC; 6s ago
Process: ExecStop=/usr/sbin/pppoe-stop (code=exited, status=/SUCCESS)
Process: ExecStart=/usr/sbin/pppoe-start (code=exited, status=/SUCCESS)
Main PID: (pppoe-connect)
CGroup: /system.slice/pppoe.service
├─ /bin/sh /usr/sbin/pppoe-connect
├─ /usr/sbin/pppd pty /usr/sbin/pppoe -p /var/run/pppoe.conf-pppoe.
pid.pppoe -I eth0 -T -U -m noipdefault noauth default-asyncmap defau
ltroute hide-password nodetach usepeerdns mtu mru noaccomp nodeflate n
opcomp novj novjccomp user test lcp-echo-interval lcp-echo-failure
├─ sh -c /usr/sbin/pppoe -p /var/run/pppoe.conf-pppoe.pid.pppoe -I
eth0 -T -U -m
└─ /usr/sbin/pppoe -p /var/run/pppoe.conf-pppoe.pid.pppoe -I eth0 -
T -U -m

可通过pppoe-status确认网络连通性(成功获取到IP):

#:/etc/ppp# pppoe-status
pppoe-status: Link is up and running on interface ppp0
ppp0: flags=<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu
inet 192.168.10.6 netmask 255.255.255.255 destination 192.168.10.100
ppp txqueuelen (Point-to-Point Protocol)
RX packets bytes (100.0 B)
RX errors dropped overruns frame
TX packets bytes (91.0 B)
TX errors dropped overruns carrier collisions

参考:

1. 基于linux环境的PPPOE服务器搭建

2. 怎样设计并实现一个基于linux的PPPoE内核模式拨号

3. 嵌入式linux实现pppoe拨号上网

4. Arch linux下的ADSL拨号上网

5. chap和pap认证

6. PPP wiki Archlinux

7. linux下ppp的移植及ppp0路由设置

pppoe应用概述的更多相关文章

  1. PPPoE(以太网上的点对点协议)

    协议概述 PPPoE分为两个阶段,即Discovery(地址发现)阶段和PPP会话阶段.当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个 ...

  2. PPPOE

    本质上,它是一个允许在以太网广播域中的两个以太网接口间创建点对点隧道的协议. PPPoE(英语:Point-to-Point Protocol Over Ethernet),以太网上的点对点协议,是将 ...

  3. CentOS 7拨号上网(ADSL & PPPoE)

    步骤概述: 1.搜寻PPPoE相关软件,本人使用的是rp-pppoe yum search pppoe 2.使用yum安装rp-pppoe yum install rp-pppoe -y 3.开始配置 ...

  4. pppoe白皮书

    转:https://blog.csdn.net/achejq/article/details/19478811 PPPoE技术白皮书 关键词:PPP,Ethernet,PPPoE 摘    要:PPP ...

  5. PPPoE技术白皮书(H3C)

    PPPoE技术白皮书 关键词:PPP,Ethernet,PPPoE 摘要:PPPoE是一种通过一个远端接入设备为以太网上的主机提供接入服务,并可以对接入的每个主机实现控制和计费的技术.本文介绍了PPP ...

  6. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  7. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  8. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  9. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

随机推荐

  1. Groovy 学习手册(5)

    8. 函数式编程 函数式编程(FP)是一种编程风格,侧重于函数和最小化状态的变化(使用不可变的数据结构).它更接近于用数学来表达解决方案,而不是循序渐进的操作. 在函数式编程里,其功能应该是" ...

  2. 移动硬盘做pe启动盘

  3. 转 分享我在阿里工作十年接触过Java框架设计模式

    转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...

  4. 基于Docker搭建LNMP环境(转)

    关于什么是docker,建议大家先上网查查有关的用法.如果您不了解,在这篇文章中,您可以简单的理解为他是一个轻量级的虚拟机. 一.docker安装mysql 首先,我们从仓库拉取一个MySql的镜像 ...

  5. BT5配置网络

    root@bt:~# vi /etc/network/interfaces 编辑IP地址auto eth0#iface eth0 inet dhcpiface eth0 inet staticaddr ...

  6. eclipse 开发 spring 、 springboot项目调试时一直跳转到 SilentExitExceptionHandler.exitCurrentThread 方法

    不想让 eclipse 调试时一直跳转到该方法 解决方法: Eclipse->[Preferences]->[Java]->[Debug]:去掉[Suspend execution ...

  7. Shiro系列(2) - 权限模型以及权限分配的两种方式

    1. 顶级账户分配权限用户需要被分配相应的权限才可访问相应的资源.权限是对于资源的操作一张许可证.给用户分配资源权限需要将权限的相关信息保存到数据库.这些相关内容包含:用户信息.权限管理.用户分配的权 ...

  8. Atitti 住房部建设指南

    Atitti 住房部建设指南 1. 住房部建设的重要意义2 2. 房屋选址::首要核心要素,环境环境环境!!!2 2.1. 价格要素与地段..2 2.2. 与工作地距离,一般是半小时到一个半小时为好3 ...

  9. Atitit 快速开发的推荐技术标准化 规范 大原则

    Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高  4gl  dsl> 3.5gl &g ...

  10. Atitit opencv模板匹配attilax总结

    Atitit opencv模板匹配attilax总结 找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁 ...