首先,硬件平台需提供两块网卡,一块用于静态地址做NAT使用,一块用于对pppoe用户接入的响应,下面是对pppoe服务器进行的配置安装 一.检查并配置ppp软件 #rpm-qa|grepppp 如果没有安装,可以使用以下命令进行安装: #yuminstallppprp-pppoe 通过网络来自动安装。 二.对服务器网卡进行配置 服务器配置的两块网卡,一块用来设置静态IP,用作NAT(eth1),一块用来进行对pppoe用户接入的响应(eth0)。 需要修改以下配置脚本(有桌面的centOS可以在桌面上进行IP的设置,比较方便)。 #cd/etc/sysconfig/network-scripts #viifcfg-eth1 #AdvancedMicroDevices[AMD]79c970[PCnet32LANCE] DEVICE=lan IPADDR=192.168.0.10 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=211.98.2.4 DNS2=8.8.8.8 HWADDR=xx:xx:xx:xx:xx:xx ONBOOT=yes BOOTPROTO=static USERCTL=no IPV6INIT=yes NM_CONTROLLED=yes TYPE=Ethernet #viifcfg-eth0 TYPE="Ethernet" HWADDR=xx:xx:xx:xx:xx:xx BOOTPROTO=dhcp DEVICE=wan ONBOOT=yes 三.配置pppoe服务器 修改option配置,添加以下内容,其它的删除。 #vi/etc/ppp/options local crtscts nobsdcomp nodeflate nopcomp 配置pppoe-server-options #vi/etc/ppp/pppoe-server-optionsauth require-pap require-chap login lcp-echo-interval10 lcp-echo-failure2 logfile/var/log/pppoe.log ms-dns211.98.2.4 ms-dns8.8.8.8 defaultroute 创建用户及密码 vi/etc/ppp/chap-secrets #vichap-secrets #SecretsforauthenticationusingCHAP #clientserversecretIPaddresses pppoe*pppoe* 这里配置的一个帐号与密码都是pppoe 下面开启pppoe服务器 #/usr/sbin/pppoe-server-Ieth4-L172.16.0.10-R172.16.0.20-N100 I:指定响应PPPOE请求的端口,本例中是在eth0口上。 L:指定PPPOE服务器的IP地址。 R:分配给客户端的地址池起始地址 N:分配给客户端IP地址的个数 将此命令添加到开机启动中。 #vi/etc/rc.local /usr/sbin/pppoe-server-Ieth4-L172.16.0.10-R172.16.0.20-N100 现在到客户机器上测试拨号成功。 四,客户机上外网 客户拨号成功后还不能上外网,因为服务器那边没有进行数据包的转发。所以需配置iptables进行数据转发 添加防火墙规则,做nat转换 #iptables-APOSTROUTING-tnat-s172.16.0.0/24-jMASQUERADE #iptables-AFORWARD-ptcp--syn-s172.16.0.0/24-jTCPMSS--set-mss1256 #sysctl-wnet.ipv4.ip_forward=1 #echo1>/proc/sys/net/ipv4/ip_forward #serviceiptablessave 第一条:添加nat,转换来自172.16.0.0/24网段的ip 第二天:修改mtu,根据自身需求改了(可忽略) 第三条:修改转发文件(可忽略) 第四条:打开转发 第五条:保存iptables配置 当然,配置上述后有些用户还是无法接入外网,有可能是centos默认没有安装启动防火墙功能,所以出现上述的问题需要打开防火墙功能: #/etc/init.d/iptablesstart 下面是pppoe建立的原理过程 PPPoE的验证过程 PPPoE的验证过程包括2个阶段,Discovery阶段和PPPSession阶段。 Discovery阶段,包含4个步骤: Step1:PADI PPPoE客户端发送主动发现初始包(PPPoEActiveDiscoveryInitiation,PADI),以太头中的目的地址是以太广播地址FF:FF:FF:FF:FF:FF,PPPOE头中的CODE为0x09,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG,整个PPPOE包不能超过1484字节; Step2:PADO 服务器端PPPoE进程在网络接口侦听到PADI包后,发送主动发现提议包(PPPoEActiveDiscoveryOffer,PADO),用来回应客户机的PADI包,以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x07,SESSION_ID值必须为0,负载部分必须包含一个AC-Name类型的TAG,用来指示本AC的名称,一个在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG。如果AC不对该客户机提供服务,AC就不回应PADO包。 Step3:PADR PPPoE客户端收到PADO包后,在PADO包中选择一个(可能有多个PPPoE服务器,通常选取最快的一个)发送主动发现请求包(PPPoEActiveDiscoveryRequest,PADR),以太头中的目的地址是所选取的PADO包的源以太头地址(即PPPoE服务器的MAC地址),PPPOE头中的CODE为0x19,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG。 Step4:PADS MAC地址匹配的PPPoE服务器收到PADR包后,发送主动发现会话确认包(PPPoEActiveDiscoverySession-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。 PPPSession阶段: 当客户端与服务器端远成发现阶段之后,即进入会话阶段,在PPP会话阶段,PPP包被封装在PPPOE以太帧中,以太包目的地址都是单一的,以太协议为0x8864,PPPOE头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值,PPPOE的负载是整个PPP包,PPP包前是两字节的PPP协议ID值。 在Session阶段,主机或服务器任何一方都可发PADT(PPPoEActiveDiscoveryTerminate)报文通知对方结束Session。 PPPoE的身份验证发生在会话(PPPSession)阶段。可以这样更解,rp-pppoe包负责Discovery及会话终止PADT,ppp包负责会话阶段的数据传输。 (责任编辑:IT) |