2-Openwrt ipv6之-pppoev6客户端

pppoe拨号方式上网,ubunut服务器需要有pppoe-server也要有dhcpv6-server,路由器端需要ppp-client,也要odhcp6c指向pppoe-wan端口。

1. PPPOEv6客户端启动过程


pppoe拨号为wan上面的另一种方式,所以需要将uci里面的上网模式proto 改成pppoe

config interface 'wan'
        option ipv6 '1'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option macaddr 'DC:4B:DD:1d:fa:49'
        option web_proto 'pppoe'
        option proto 'pppoe'
        option pppoe_username 'WkhPTUVfRkE0OF81Rw=='
        option username 'ZHOME_FA48_5G'
        option pppoe_password 'MTIzNDU2Nzg='
        option password '12345678'
        option pppoe_peerdns '1'
        option peerdns '1'
        option pppoe_advance '0'
        option sdial '0'

config interface 'wan6'
        option ifname @wan
        option proto 'dhcpv6'

类似上面的pppoe拨号的启动脚本也在./lib/netifd/proto/ppp.sh脚本里面的ppp_generic_setup函数

proto_run_command "$config" /usr/sbin/pppd \
                nodetach ipparam "$config" \
                ifname "$pppname" \
                ${localip:+$localip:} \
                ${lcp_failure:+lcp-echo-interval $lcp_interval lcp-echo-failure $lcp_failure $lcp_adap
                ${ipv6:++ipv6} \
                ${autoipv6:+set AUTOIPV6=1} \
                ${ip6table:+set IP6TABLE=$ip6table} \
                ${peerdns:+set PEERDNS=$peerdns} \
                nodefaultroute \
                usepeerdns \
                $demand $persist maxfail $maxfail \
                ${holdoff:+holdoff "$holdoff"} \
                ${username:+user "$username" password "$password"} \
                ${connect:+connect "$connect"} \
                ${disconnect:+disconnect "$disconnect"} \
                ip-up-script /lib/netifd/ppp-up \
                ipv6-up-script /lib/netifd/ppp6-up \
                ip-down-script /lib/netifd/ppp-down \
                ipv6-down-script /lib/netifd/ppp-down \
                ${mtu:+mtu $mtu mru $mtu} \
                "$@" $pppd_options

pppoe的uci在官网可以看到:
https://openwrt.org/docs/guide-user/network/wan/wan_interface_protocols

Name Type Required Description
device file path yes Modem device node
username string no(?) Username for PAP/CHAP authentication
password string no(?) Password for PAP/CHAP authentication
connect file path no Path to custom PPP connect script
disconnect file path no Path to custom PPP disconnect script
keepalive number no Number of unanswered echo requests before considering
peerdns boolean no Use peer-assigned DNS server(s)
dns list of ip addresses no Override peer-assigned DNS server(s)
ipv6 [0,1,auto] no auto Enable IPv6 on the PPP link 0: IPv6 disabled 1: IPv6 enabled auto:
pppd_options string no Additional command line arguments to pass to the pppd daemon

刚开始只会有ppp的进程:

root@zihome:/# ps | grep ppp
32025 root      1720 S    /usr/sbin/pppd nodetach ipparam wan ifname pppoe-wan +ipv6 set PEERDNS=1 nodefaultroute usepeerdns maxfail 1 user ubuntu password pppoe ip-up-script /lib/netifd/

等到pppoe-wan起来之后,才会自动启动odhcp6c进程

root@zihome:/# ps | grep ppp
32025 root      1720 S    /usr/sbin/pppd nodetach ipparam wan ifname pppoe-wan +ipv6 set PEERDNS=1 nodefaultroute usepeerdns maxfail 1 user ubuntu password pppoe ip-up-script /lib/netifd/
32067 root       844 S    odhcp6c -s /lib/netifd/dhcpv6.script -P0 -t120 pppoe-wan

2. pppoe拨号过程


ubuntu上面启动pppoe-server,sudo pppoe-server -I eth0 -L 100.0.0.1 -R 100.0.0.100 -N 20,服务器IP为100.0.0.1,起始地址为从100.0.0.100开始分配。

1.IPV4地址获取

这时候路由器设置成pppoe模式拨号,这时候路由器端的pppd进程会发送``PPP IPV6`消息去请求IP地址,请求成功之后,在ubuntu上面会出现一个ppp0的接口,路由器上面会生成一个pppoe-wan的接口。ubuntu的IP为100.0.0.1,路由器的IP为100.0.0.100

2.本地链路IPV6地址获取

因为pppoe-wan端口没有MAC地址,所以没办法自己根据EUI规则生成一个本地地址,当pppoe添加了ipv6的选项之后

  • pppoe-server会发送PPP IPV6CP的REQUEST数据包,里面附带一个它要生成的本地链路IPV6地址,询问P-T-P的对方路由器我是否可以用这个地址,路由器会返回一个PPP IPV6CP的ACK包,这时候pppoe-server的ppp0端口就会生成一个本地链路IPV6地址fe80::70b2:2149:2eea:8daf
  • 同样的路由器也会发送PPP IPV6CP的REQUEST数据包,里面附带一个它要生成的本地链路IPV6地址,询问P-T-P的对方pppoe-server我是否可以用这个地址,pppoe-server会返回一个PPP IPV6CP的ACK包,这时候路由器的pppoe-wan端口就会生成一个本地链路IPV6地址fe80::14ec:b7:dc40:32f6

ubuntu上面会出现一个ppp0的端口,路由器可以正常ping 100.0.0.100

linye@linye-ubuntu:~$ ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:100.0.0.1  P-t-P:100.0.0.100  Mask:255.255.255.255
          inet6 addr: fe80::70b2:2149:2eea:8daf/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1480  Metric:1
          RX packets:139 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:8730 (8.7 KB)  TX bytes:1666 (1.6 KB

路由器上面会出现一个pppoe-wan的端口,路由器可以正常ping 100.0.0.1

root@zihome:/# ifconfig pppoe-wan
pppoe-wan Link encap:Point-to-Point Protocol
          inet addr:100.0.0.100  P-t-P:100.0.0.1  Mask:255.255.255.255
          inet6 addr: fe80::14ec:b7:dc40:32f6/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1480  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:220 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1666 (1.6 KiB)  TX bytes:13939 (13.6 KiB)

PPP IPV6CP请求成功之后会,两端都有各自的本地链路IPV6地址,后面就可以启动odhcp6c客户端去获取ipv6全球地址了。

3.全局IPV6地址获取

ipv6的dhcpv6服务器是要建立在ppp0/pppoe-wan端口的基础上,所以要在ppp0拨号成功后,在路由器odhcp6c客户端的DHCP请求超时之前,ubuntu要启动在ppp0端口上的dibbler服务器。

修改

sudo vim /etc/dibbler/server.conf里面的端口为ppp0

启动dibbler服务器

sudo /etc/init.d/dibbler-server start

后面就是走正常的dhcpv6协议了,odhcp6c进程会在pppoe-wan启动之后自动被拉起来,开始请求dhcpv6地址。

ping本地链路地址的时候使用ping6指定端口

ping6 -I ppp0 fe80::2214:7ff:fe11:2a21

3. IPV4和IPV6的pppoe链路单独分开


路由器支持ipv4和ipv6的pppoe在同一个会话pppoe-wan,也可以支持ipv4和ipv6在不同的会话,ipv4位于pppoe-wan,ipv6位于pppoe-wan2。

当在同一会话时,跟上面说到的配置一致

config interface 'wan'
        option ipv6 '1'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option macaddr 'DC:4B:DD:1d:fa:49'
        option web_proto 'pppoe'
        option proto 'pppoe'
        option pppoe_username 'WkhPTUVfRkE0OF81Rw=='
        option username 'ZHOME_FA48_5G'
        option pppoe_password 'MTIzNDU2Nzg='
        option password '12345678'
        option pppoe_peerdns '1'
        option peerdns '1'
        option pppoe_advance '0'
        option sdial '0'

config interface 'wan6'
        option ifname 'pppoe-wan'
        option proto 'dhcpv6'

当在两个会话时,添加一个wan2,把wan的ipv6设置为0,wan6的ifname改成pppoe-wan2

config interface 'wan'
        option ipv6 '0'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option macaddr 'DC:4B:DD:1d:fa:49'
        option web_proto 'pppoe'
        option proto 'pppoe'
        option pppoe_username 'WkhPTUVfRkE0OF81Rw=='
        option username 'ZHOME_FA48_5G'
        option pppoe_password 'MTIzNDU2Nzg='
        option password '12345678'
        option pppoe_peerdns '1'
        option peerdns '1'
        option pppoe_advance '0'
        option sdial '0'

config interface 'wan2'
        option ipv6 '1'
        option def_ifname 'eth1'
        option ifname 'eth1'
        option macaddr 'DC:4B:DD:1d:fa:49'
        option web_proto 'pppoe'
        option proto 'pppoe'
        option pppoe_username 'WkhPTUVfRkE0OF81Rw=='
        option username 'ZHOME_FA48_5G'
        option pppoe_password 'MTIzNDU2Nzg='
        option password '12345678'
        option pppoe_peerdns '1'
        option peerdns '1'
        option pppoe_advance '0'
        option sdial '0'
        
config interface 'wan6'
        option ifname 'pppoe-wan2'
        option proto 'dhcpv6'

热门文章

暂无图片
编程学习 ·

JVM(一)--JVM的内存区域划分以及相关知识点

JVM(一)–JVM的内存区域划分以及相关知识点 一、JVM的内存区域是怎么划分的? JVM结构图JVM = 类加载器 + 执行引擎 + 运行时数据区类加载器(Class Loader):把硬盘上的class文件加载到JVM中的运行时数据区域,它不负责这个类文件是否能够执行 执行引擎(Execution Engine):…
暂无图片
编程学习 ·

获取电脑ip地址的代码工具类

获取ip地址的工具类 import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springfram…
暂无图片
编程学习 ·

Java实训心得一

Java第一次实训 第一次实训任务很简单 一: 编写学生管理系统功能结构图利用xmind编写结构图 图示:二:用Navicat工具创建数据库及表格创建student数据库 2.创建t_colledge表并进行设计,插入数据创建t_status表并进行设计,插入数据创建t_student表并进行设计,插入数据创建t…
暂无图片
编程学习 ·

3D打印与互联网发展的探索

“互联网+3D打印+创意文化”模式崭露头角 互联网具备大众属性,3D打印技术及服务或许能结合互联网带来更多创新,通过互联网渠道带来全流程的在线、交互体验、互联网化来实时响应消费用户需求形成新的商业模式。 近日,国内一家3D打印综合性服务平台已悄然上线,为消费用户提供…
暂无图片
编程学习 ·

Zabbix+percona插件实现数据库mysql的监控

文章目录1.配置zabbix监控mysql的配置1.1 在zabbix-agent主目录(默认情况下为/ var / lib / zabbix)中创建.my.cnf2.配置percona2.1安装2.2配置文件2.3.在zabbix图形界面中导入模板2.3.1 监控的server添加监控项2.3.2 更改字体 1.配置zabbix监控mysql的配置 检测试验环境:确…
暂无图片
编程学习 ·

面试题:从 URL 在浏览器被输入到页面展现的过程中发生了什么?

曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我…
暂无图片
编程学习 ·

Spring源码解析 - springMVC核心代码(一)

一、首先来讲解下springMVC的底层工作流程1、首先我们重点放在前端控制器(DispatcherServlet)其类图:因为从流程图看,用户的请求最先到达就是DispatcherServlet。他是springmvc的核心,也是中央出处理器。因此我们分析源码,先看看他是什么样的流程:通过源码可看到:他是继…
暂无图片
编程学习 ·

跟汤老师学Java笔记:文件字节输入输出流

跟汤老师学Java笔记:文件字节输入输出流 完成:第一遍 1.文件字节输入流创建和常用方法有哪些? 创建:构造参数有字符串和File对象两种 方法: 方法:fis.read() 作用:读取一个字节,返回int类型的字节值,如果读取到末尾返回-1 方法:fis.close() 作用:输入流用了操作系统…
暂无图片
编程学习 ·

前端体验优化

一、UED 用户体验设计(英语:User Experience Design),是以用户为中心的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证: 1、对用户体验有正确的预估 2、认识用户的…
暂无图片
编程学习 ·

2020年了,还不懂数据挖掘?数据挖掘工具有哪些?

一. 数据挖掘定义二. 数据挖掘特征三. 数据挖掘工具1 Weka2 SPSS3 Clementine4 RapidMiner5 其他数据挖掘软件一. 数据挖掘定义数据挖掘:严格的科学定义上,数据挖掘是从大量的、有噪声的、不完全的、模糊和随机的数据中,提取出隐含在其中的、人们事先不知道的、具有潜在利用…
暂无图片
编程学习 ·

mysql服务无法启动,报服务正在启动或停止中,请稍后片刻再试一次

这个错误我尝试了网上好多得方法最后只能卸载重装是最简单得。 于是我后面就是卸载重装了。后面就不上图了。希望有朋友碰到这个问题能给我一个解决方法。 在这里特此说明,我写得所有博客都是小编自己实际操作得。碰到得问题记录和写下解决方法得。小编也验证了很多网上别人得…
暂无图片
编程学习 ·

Node.js爬虫实验项目二(二)后续

登录与注册 随后我们开始设置登录与注册页面,我们需要设定一些制度,比如没有注册的用户不可以登陆,不登陆不可以查看数据。 在登陆和注册时也需要添加提示功能,类似于登录时的密码错误时提示,注册时两次密码不相同时提示等日常登录注册页面所需要的提示功能必须都具备。 登…
暂无图片
编程学习 ·

备考第二天

系统论是研究系统的一般模式、结构和规律的科学。系统论的核心思想是整体观念。任何一个系统都是一个有机的整体,不是各个部件的机械组合和简单相加。系统的功能是各部件在孤立状态下所不具有的。系统论的能动性不仅在于认识系统的特点和规律,更重要地在于利用这些特点和规律去…
暂无图片
编程学习 ·

jquery实现菜单的切换:

效果图:js文件:<script type="text/javascript"> $(function(){ $("#tab_condition_btn li").click(function(i) { $(this).siblings(li).removeClass("tab_condition_check_btn"); // 删除其他兄弟元素的样式 $(this).addClass("t…
暂无图片
编程学习 ·

1017 在银行排队 (25分)(优先队列,新手也能看得懂)

优先队列保存窗口时间,每次选出最小时间处理讲解算法思路代码部分pat运行结果复杂度分析 讲解设置一个将题干hh:mm:ss时间转化为秒为单位的时间的函数 利用一个优先队列(这里是一个小根堆,每次top为时间最小的元素)保存每个窗口的当前时间 将每个人的个人信息用struct保存,…
暂无图片
编程学习 ·

4G无线监控系统在矿山供水中的应用

4G无线监控系统在矿山供水中的应用 文章摘要 针对内蒙古某矿业目前供水系统的现状,设计了基于4G和PLC的无线供水监控系统。系统中包括上位机监控、无线通信和下位机数据采集及控制部分。实践证明,该系统实现简单,通讯可靠,而且具有很好的扩展性。 前言 水资源是人类赖以生存和发…