最近在使用openwrt开发,使用自带的pppoe功能
拨号配置很简单,只要修改/etc/config/network文件的配置如下即可
/etc/config/network
config interface 'wan'
option ipv6 '0'
option ifname 'eth1'
option proto 'pppoe'
option macaddr '00:0C:43:28:80:58'
option 'username' 'root'
option 'password' '111111'
option 'peerdns' '1'
option 'defaultroute' '1' #
/etc/init.d//network restart
不知道为什么修改任意网络都要重载网络配置,shit
重启网络后,自动拨号成功。
大家可以直接网上搜索一个pppoe-server配置方式,自己搭建一个服务器,测试比较方便,很容易就可以拨号成功了 。
如:http://blog.csdn.net/pdcxs007/article/details/44599885
在使用pppoe过程中,包括家用路由器,想必各位的拨号方式都不是自动拨号,而是按需拨号 ,简单来说就是有人用就拨号上网,空闲一段时间网络自动断开,这也就用到了pppoe拨号中的demand功能,只需在配置中增加
option 'demand' '30'
pppoe就会进行按需拨号。
但是使用中发现,一旦配置了demand,系统就不进行拨号操作,去掉了demand就可以正常运行,按理说openwrt中的按需拨号应该是一个很基础的功能,不应该有这种问题
遂去网上进行各种搜索,国内的国外的,还真有很多人都遇到了这个问题。
然后就开始研究pppoe拨号流程,根据后台ps跟踪发现,当不配置demand,也就是可正常拨号的情况下,后台存在了如下进程
root@Topwag:~# ps -wwww|grep ppp
3637 root 1680 S/usr/sbin/pppd nodetach ipparam wan ifname pppoe-wan nodefaultroute usepeerdns persist maxfail 10 user root password 111111 ip-up-script /lib/netifd/ppp-upipv6-up-script /lib/netifd/ppp-up ip-down-script /lib/netifd/ppp-down ipv6-down-script /lib/netifd/ppp-down mtu 1492 mru 1492 plugin rp-pppoe.so nic-eth1
ps -wwww wwww 4个w 画重点!
当配置了demand,拨号不正常的情况下,后台根本就没有pppd进程,并且也不存在pppoe-wan虚网卡
再跟踪分析发现,此进程是由系统脚本vi /lib/netifd/proto/ppp.sh 生成并调用,具体调用方式猜测是procd调用的,这个过于复杂,没进行追踪
具体脚本如下:
/lib/netifd/proto/ppp.sh
proto_run_command "$config" /usr/sbin/pppd \
nodetach ipparam "$config" \
ifname "$pppname" \
${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \
${ipv6:++ipv6} \
nodefaultroute \
usepeerdns \
$demand maxfail 1 \
${username:+user "$username" password "$password"} \
${connect:+connect "$connect"} \
${disconnect:+disconnect "$disconnect"} \
ip-up-script /lib/netifd/ppp-up \
ipv6-up-script /lib/netifd/ppp-up \
ip-down-script /lib/netifd/ppp-down \
ipv6-down-script /lib/netifd/ppp-down \
${mtu:+mtu $mtu mru $mtu} \
"$@" $pppd_options
然后针对ppp.sh进行分析,在里面使用脚本将参数打印出来,结果偶然间发现一旦脚本写错,整个脚本都不会执行,而非到错误那一行就会停止,这与正常的脚本流程不符,遂推断应该是在配置了demand的情况下,拼接的命令行有问题,导致后台pppd进程未启动。
由于openwrt并未使用ipv6,我对系统中的ipv6做了适当的裁剪,而脚本中还有ipv6相关的参数,遂将ppp.sh中的ipv6-up、down脚本两行删除,并在/etc/config/netwrok中增加如下命令:
option ipv6 '0'
删除下面两条
ipv6-up-script /lib/netifd/ppp-up \
ipv6-down-script /lib/netifd/ppp-down \
然后重启network(fuck openwrt)
此时如果没问题的话,系统会出现pppoe-wan虚网卡
最后增加一条路由,将数据送到虚网卡中,触发按需拨号
route add default dev pppoe-wan
当然此步操作可以由修改ppp.sh脚本完成,只需将脚本中的nodefaultroute改为defaultroute即可
至此,pppoe拨号使用正常,历时4小时。
综上记录
第一篇博客
以下为参考资料,主要参考资料为www.baidu.com www.bing.com www.sov5.cn
https://wiki.openwrt.org/doc/howto/vpn.client.pptp#on_demand_dial
http://blog.csdn.net/macrohasdefined/article/details/19006351