搭建 PPPOE 拨号上网

您所在的位置:网站首页 搭建拨号上网服务器 搭建 PPPOE 拨号上网

搭建 PPPOE 拨号上网

2023-09-09 05:00| 来源: 网络整理| 查看: 265

PPPoE是point-to-point protocol over ethernet的简称,可以使以太网的主机通过一个简单的桥接设备连到一个远端的接入集中器上。通过pppoe协议,远端接入设备能够实现对每个接入用户的控制和计费。rp-PPP0E是一个集成了拨号客户端和服务端的解决方案。下载地址:http://www.roaringpenguin.com/products/pppoe

编译、安装的步骤:rp-pppoe-3.10.tar.gz 在 /opt 目录下。

tar -zxvf rp-pppoe-3.10.tar.gz cd rp-pppoe-3.10/src ./configure make make install

修改配置文件:cd /etc/ppp

vim pppoe.conf修改下面几个值,其他的不要动ETH=eth0 USER=rp-pppoe LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so

vim pppoe-server-options下面是全部内容require-pap

require-chap

login

lcp-echo-interval 10

lcp-echo-failure 2

logfile /var/log/pppoe.log

ms-dns 218.108.248.200

ms-dns 8.8.4.4

defaultroute

vim chap-secrets rp-pppoe  *  rp-pppoe  *

以上表示用户名和密码都是rp-pppoe

vim options local

运行程序:(用户模式)/usr/sbin/pppoe-server -I eth0 -L 10.0.0.1 -R 10.0.0.2 -N 64

-I 指定局域网网卡-L 指定pppoeserver的IP地址-R 为客户分配的起始IP地址-N 指定分配给客服端IP地址的个数-k 使用内核模式

现在就可以用pppoe客户端来连接我们已经运行的pppoeserver了,用户名和密码为上面设置的rp-pppoe和rp-pppoe,认证方式为CHAP但是客户端连接上去后不能上网,因为服务器那边没有进行数据包的转发。虚拟机添加了2块网卡,eth0和eth1,eth0是静态IP,eth1为DHCP方式获取IP。

需要修改下配置脚本

cd/etc/sysconfig/network-scripts vim ifcfg-eth0

#Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] DEVICE=lan IPADDR=192.168.61.120 NETMASK=255.255.255.0 GATEWAY=192.168.61.1 DNS1=61.139.2.69 DNS2=192.168.61.1 HWADDR=00:0c:29:6b:71:d6 ONBOOT=yes BOOTPROTO=static USERCTL=no IPV6INIT=yes NM_CONTROLLED=yes TYPE=Ethernet

vimifcfg-eth1

TYPE="Ethernet" HWADDR=00:0C:29:6B:71:E0 BOOTPROTO=dhcp DEVICE=wan ONBOOT=yes

开启数据包转发

echo"1">>/proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

好了,现在客户端这边就可以上网了。

下面是 etherPeek 抓包的截图,pppoe发现阶段已经省去,只是TCP3次握手和4次挥手的抓包。10.0.0.10是pppoe客户端的IP,192.168.61.206是linux下eth1的IP,每次局域网网关收到eth0上的数据,然后把源IP改成eth1的IP,目的IP不变,广域网网卡收到远端服务器返回的数据,就把目的IP修改成内网主机pppoe的IP。

TCP3次握手

4次挥手

PPPoE 的验证过程PPPoE 的验证过程包括 2 个阶段,Discovery 阶段和 PPP Session 阶段。Discovery 阶段,包含 4 个步骤:Step 1: PADI PPPoE 客户端发送主动发现初始包(PPPoE Active Discovery Initiation,PADI),以太头中的目的地址是以太广播地址 FF:FF:FF:FF:FF:FF,PPPOE 头中的 CODE 为 0x09,SESSION_ID 值必须为 0,负载部分必须只包含一个 Service-Name 类型的 TAG 表示请求的服务类型,另外可以包含其他 TAG,整个 PPPOE 包不能超过 1484 字节;Step 2: PADO服务器端 PPPoE 进程在网络接口侦听到 PADI 包后,发送主动发现提议包(PPPoEActive Discovery Offer, PADO),用来回应客户机的 PADI 包,以太头中的目的地址是客户机的MAC 地址,PPPOE 头中的 CODE 为 0x07, SESSION_ID 值必须为 0,负载部分必须包含一个 AC-Name 类型的 TAG,用来指示本 AC 的名称,一个在 PADI 包中指定的Service- Name 的 TAG,另外可以包含其他 Service-Name 的 TAG。如果 AC 不对该客户机提供服务,AC 就不回应 PADO 包。Step 3: PADR PPPoE 客户端收到 PADO 包后,在 PADO 包中选择一个(可能有多个 PPPoE 服务器,通常选取最快的一个)发送主动发现请求包(PPPoEActive Discovery Request,PADR),以太头中的目的地址是所选取的 PADO 包的源以太头地址(即 PPPoE 服务器的 MAC 地址),PPPOE 头中的 CODE 为 0x19,SESSION_ID 值必须为 0,负载部分必须只包含一个 Service-Name 类型的 TAG 表示请求的服务类型,另外可以包含其他 TAG。Step 4: PADS MAC 地址匹配的 PPPoE 服务器收到 PADR 包后,发送主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS),将产生一个SEESSION_ID 值用来标志本次 PPP 会话,以 PADR 包方式发送给客户机。以太头中的目的地址是客户机的 MAC 地址,PPPOE 头中的 CODE 为 0x65,SESSION_ID 值必须为所生成的那个SESSION_ID,负载部分必须只包含一个 Service-Name 类型的 TAG,表示该服务类型被 PPPoE 服务器接受,另外可以包含其他 TAG。如果 PPPoE 服务器不接受 PADR 中的Server-Name,PADS 中则包含一个 Service-Name -Error 类型的 TAG,这时 SESSION_ID 设置为 0。PPP Session 阶段:当客户端与服务器端远成发现阶段之后,即进入会话阶段,在 PPP 会话阶段,PPP 包被封装在 PPPOE 以太帧中,以太包目的地址都是单一的,以太协议为 0x8864,PPPOE 头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值,PPPOE的负载是整个 PPP 包,PPP 包前是两字节的 PPP 协议 ID 值。在 Session 阶段,主机或服务器任何一方都可发 PADT(PPPoE Active Discovery Terminate)报文通知对方结束 Session。PPPoE 的身份验证发生在会话(PPP Session)阶段。可以这样更解,rp-pppoe 包负责Discovery 及会话终止 PADT,ppp 包负责会话阶段的数据传输。

本文转自Devin 51CTO博客,原文链接:http://blog.51cto.com/devingeng/1358368



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3