近期在pppoe协议的开发,需要实现pppoe能够承载ipv6的报文,就尝试着在linux搭建pppoe相关软件,主要是开源软件ppp-2.4.5和rp-pppoe软件。对于这两个软件的了解开始也只是通过网上找大量的资料。现在就在搭建过程以及搭建过程中遇上的问题,简单的做个总结,第一次写技术方面的blog,后面慢慢的改进,还望各位大虾多多指教。

1.下载ppp-2.4.5.tar.gz、rp-pppoe-3.8.tar.gz

2.安装

a.将ppp、rp-pppoe解压

b.安装pppd

cd ppp-2.4.5/pppd

vi Makefile.linux开启HAVE_INET6=y

cd ppp-2.4.5

./configure

(备注:先make clean一下,确保HAVE_INET6开启)

make

make install

c.安装rp-pppoe

cd rp-pppoe/src

./configure --enable-plugin=/opt/ppp-2.4.5

make

make install

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

vim /etc/ppp/pppoe-server-options
下面是全部内容
require-chap
login
lcp-echo-interval 10
lcp-echo-failure 2

vim /etc/ppp/chap-secrets
freedom * 123456 *

vim options
local

ipv6 ,

4. 开启server端

pppoe-server -I eth0 -L 10.10.10.10 -R 10.10.10.11

5.客户端

pppoe-setup

pppoe-start

这样就搭建好了能够承载ipv6的pppoe server端,实现了拨号功能。

在此过程中遇到一下一些问题

1.在/etc/ppp/options中添加ipv6 ,选项后,连接超时,抓包发现收到PADS后持续发PADT包。

原因:编译的时候没有将宏INET6开启。造成无法获取这个选项的相关信息,查看log信息可以发现提示的是cmd 'ipv6'不识别。 解决方法:在ppp-2.4.5/pppd/Makefile.linux中HAVE_INET6=y前的“#”去掉。并在make ppp-2.4.5前先make clean一下。这个可能跟代码编译的依赖关系有关,如果不make clean有时候也是可以编译通过的,但是INET6没有开启。相关的ipv6的处理也没有编译进去。

2.在/etc/ppp/pppoe-server-option中添加的ipv6 ,而不在/etc/ppp/options中添加ipv6 。连接成功但抓包发现收到PPP IPV6的Configure request后收到protocol reject包。

3.在server端设置/etc/ppp/chap-secrets中是这样设置

#client server secret IP address

"freedom" * "123456"

会造成在connnect不成功,server的log信息为The remote system is required to authenticate itself. but I couldn't find any suitable secret(password) for it to use to do so.

解决方法:将IP address用“*”这样就ok啦。也即是

#client server secret IP address

"lfreedom" * "123456" *

在搭建的过程中发现查看log非常有用,即less /var/log/messages。但是有一个问题,如果测试了非常多次的话,会造成这个log信息非常大。这样也要看最新的log信息就要看很多东西了。经过查找资料,有一个方法可以清空该log。 cat /dev/null>/var/log/messages。