要用ipv6首先你的openwrt路由内核必须已经支持ipv6,且能安装相关软件!

首先说说最简单的ndp手工ipv6穿透,很简单,看代码详解:

环境:
wan口 eth1
lan口 br-lan
wan对外网关::::::/
lan内客户端1:::::::/
lan内客户端2::::::::/
客户端网关:路由器lan口v6地址(没有手动设置一个)。 设置系统支持:
sysctl -w net.ipv6.conf.all.forwarding= #其他发行版需要开启ipv6包转发;openwrt默认就是会转发的,这句可忽略。
sysctl -w net.ipv6.conf.all.proxy_ndp= #开启邻居代理功能,如果使用npd6的话,这句可忽略。
设置路由支持:
ip - route add default via ::::: dev eth1 #wan口默认路由
ip - route add ::::::/ dev br-lan #将发往lan内客户端的数据交给lan口
ndp设置:
ip - neigh add proxy :::::: dev eth1 #在wan口开启对PC1的邻居代理
ip - neigh add proxy :::::: dev eth1 #在wan口开启对PC2的邻居代理
。。。。。。有多少设备上ipv6就需要设置几条ndp规则 然后,你要上网的电脑,配置ipv6的ip、网关:填写路由lan口ipv6地址、dns (如he的dns:::::)

IPv6 NDP(自动获取ip地址)

IPv4由于NAT的存在共享上网是想当的简单(随便一个不懂电脑的萌妹子给家里搞一台TP-Link,就知道设置PPPoE认证然后就NAT组建家庭局
域网共享上网了……让我等苦逼技术死宅没有了上门帮忙的机会
QAQ),IPv6标准协议里面木有NAT,让我顿时费解了一把,后来谷歌了一下发现北邮有一群学生做了一个创新项目实现了IPv6的NAT,当时感觉是
各种膜拜啊……还是内核级的项目啊卧槽……难道我又要改内核代码然后重新编译OpenWRT了啊……

后来仔细研究了一下,果然北邮那个项目还是没啥意思的,有点坑经费的感觉,因为IPv6有一种更好的解决方案:Proxy Neighbour
Discovery
Protocol(邻居发现协议),具体可以看:http://en.wikipedia.org/wiki
/Neighbor_Discovery_Protocol。

简单来说,NAT就是把内网终端伪装起来请求出去,同时数据会到有外网地址的Router,再让此Router把数据包转发给客户端机器。由于IPv6的地址空间是相当相当的大,没有必要再公用一个外网地址,可以让每个内网的终端都具有一个外网地址

这个地址依然是不可再路由,这时就需要让具有外网地址的Router帮忙告诉它的上层Router,这些外网地址在这个Router的内网中。

这种方式牛逼之处在于……什么UPnP,什么NAT穿透,全部都不需要了……P2P什么的嘛……完全无压力……

继续配置,我这里外网网卡是eth0,内网是br-lan

先安装ndppd
opkg update && opkg install ndppd

看一下我的Global IPv6地址:
root@OpenWrt:/etc# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 8C:21:0A:A6:94:B3  
      inet addr:121.48.171.138  Bcast:121.48.171.255  Mask:255.255.255.128
      inet6 addr: 2001:250:2000:7520:8e21:aff:fea6:94b3/64 Scope:Global
      inet6 addr: fe80::8e21:aff:fea6:94b3/64 Scope:Link
      UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1
      RX packets:517397 errors:0 dropped:450 overruns:0 frame:0
      TX packets:777032 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:177017984 (168.8 MiB)  TX bytes:688621714 (656.7 MiB)
      Interrupt:4

是2001:250:2000:7520:8e21:aff:fea6:94b3/64,因为是/64,所以无法继续划分子网,就要使用刚才说的邻居发现协议。

然后给内网网卡br-lan设置与eth0的地址前64位相同,后64位不同的IPv6地址(不要直接抄袭我的,如果你也在电子科大清水河……这样咱们会冲突的),设置时前缀长度要大于64:
ip -6 addr add 2001:250:2000:7520:1::1/80 dev br-lan

修改/etc/ndppd.conf
proxy eth0{
    router yes
    timeout 500
    ttl 30000

rule 2001:250:2000:7520:1::/80 {
      auto
    }
}

然后运行ndppd:/etc/init.d/ndppd start,这样就配置好了。比内核级的NAT实现要轻松许多。

但是这个时候还不能客户端自动获得IP,radvd配置只能前缀为64,所以还需要dhcpv6 server:
opkg install radvd
opkg install wide-dhcpv6-server

配置/etc/config/radvd:
config interface
    option interface        'lan'
    option AdvSendAdvert    1
    option AdvManagedFlag   1
    option AdvOtherConfigFlag 1
    list client             ''

config prefix
    option interface        'lan'
    # If not specified, a non-link-local prefix of the interface is used
    list prefix             ''
    option AdvOnLink        1
    option AdvAutonomous    1
    option AdvRouterAddr    0

配置/etc/config/dhcp6s,enabled设置为1

配置/etc/dhcp6s.conf

interface br-lan {
    address-pool pool1 86400;
};
pool pool1 {
    range 2001:250:2000:7520:1::200 to 2001:250:2000:7520:1::300 ;
};

启动radvd和dhcpv6 server:
/etc/init.d/radvd start
/etc/init.d/dhcp6s start

注意顺序,如果遇到错误,可以:
/etc/init.d/radvd restart
/etc/init.d/ndppd restart

这样我们就配置好了IPv6的邻居发现协议和IP地址的分配,这个时候连上路由器的客户端已经可以自动获得IPv4和IPv6的地址并无障碍访问IPv4和IPv6的网络了

openwrt+ndp+ndppd+radvd+dhcpv6,ipv6穿透配置指南的更多相关文章

  1. ipv6地址配置实验(GNS3/ENSP)

    实验拓扑: IPV6地址配置如图所示, 配置ipv6指令(以R2为例,R1类似): int e1/2 R2(config-if)#ipv6 address 2001:db08:acad:1::2/64 ...

  2. Linux Ipv6地址配置

    Step1:启用IPV6网络配置 [root@node-1 ~]# vi /etc/sysconfig/network NETWORKING_IPV6=yes   //全局启用ipv6初始化IPV6_ ...

  3. 申请IPV6地址配置IPV6域名

    0. 前言 最近弄了一下IPV6,虽然不知道什么时候会用到,但是服务器支持IPV6,还是有必要的. 1. 申请IPV6地址 https://tunnelbroker.net/ 到这个网址去注册一个帐号 ...

  4. 苹果 appstore 上架 ipv6 服务 配置

    前言 好久之前的事了,苹果审核突然要求ipv6,一片哀嚎. 研究了好久找到了基于阿里云经典网络Windows Server的配置方法. https://bbs.aliyun.com/read/2849 ...

  5. JBoss7配置指南

    JBoss7配置指南   1.    jboss各主要版本特性... 3 1.1.     jboss4特性... 3 1.2.     jboss5特性... 5 1.3.     jboss6特性 ...

  6. 【转】CentOS 6 服务器安全配置指南

    原文连接: CentOS 6 服务器安全配置指南(通用) Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L ...

  7. [转帖]CentOS 6 服务器安全配置指南(通用)

    CentOS 6 服务器安全配置指南(通用) http://seanlook.com/2014/09/07/linux-security-general-settings/  发表于 2014-09- ...

  8. DNS和Bind配置指南

    /////////////////////////////目录//////////////////////////////////////一.DNS原理相关二.使用bind搭建最简单的DNS服务器三. ...

  9. Visual Studio Code 配置指南

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...

随机推荐

  1. C#读取和写入文件

    一.读取文件 如果你要读取的文件内容不是很多, 可以使用 File.ReadAllText(FilePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding) ...

  2. TypeError: document.getELementById is not a function

    这个错误困扰了我好几个小时,在网上也百度了好久类似的问题但都没有结果,反反复复看了好多遍,才发现,原来是document.getELementById 里面的Element的字母 l 我写成了大写的L ...

  3. 优化SQLServer数据库加快查询速度

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  4. 在 iOS 应用中直接跳转到 AppStore 的方法

      找到应用程序的描述链接,在itunes中找到相应的应用,(如下图),点击免费右边的下方向键,选择复制链接,就拿到了对应的app的描述链接 比如:https://itunes.apple.com/c ...

  5. 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:  List list = new ArrayList();  list.add(“Hello”);  list.add(“World”);  list.add(“Learn”); //此时list 为Hello World Learn  r

    package zuoye; import java.util.ArrayList; import java.util.List; public class Reverse01 { public st ...

  6. 快速破解ps方法

    1.首先现在ps安装包和破解包. 2.运行Block Adobe Activation,防止ADOBE激活程序启动,按操作提示即可. 3.运行Adobe CS6安装程序. 4.选择“试用”. 5.输入 ...

  7. 河南多校联合训练 南阳理工 1261 音痴又音痴的LT

    描述 LT最近一直在无限循环薛之谦的歌,简直都中毒了!可是呢…他的歌LT还是不会唱(其实不止他的歌LT不会唱,所有人的歌LT都不会唱…因为LT是标准的音痴)可是LT又很喜欢唱歌(所以LT不仅是音痴还是 ...

  8. Ubuntu cron定时执行任务

    1.添加自定义事件 crontab -e 2.选定编辑器 3.添加执行代码 * * * * /usr/bin/curl http://www.exmple.com/cron.php crontab 命 ...

  9. JavaScript中以构造函数的方式调用函数

    转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明. ...

  10. Volist标签

    Volist标签主要用于在模板中循环输出数据集或者多维数组. volist标签(循环输出数据) 闭合 非闭合标签 属性 name(必须):要输出的数据模板变量 id(必须):循环变量 offset(可 ...