OpenWrt内网IPv6之二

路由器上内网IPV6地址的分配已经困扰我许久了,昨天看《我歌4》要看电视直播(各大学的IPV6电视直播通道),才决心要折腾一下。
以前用OpenWrt AA的时候,6relayd非常的好用
而OpenWrt BB之后官方用odhcpd替代了6relayd,从某个版本的BB之后6relayd就失效了,而odhcpd也并没有那么好用。

如果通过ISATAP获得IPV6地址的可以参考下面两篇博客

下面是我(我的IPV6环境可以直接获取到IPV6地址,不需要用到ISATAP),使用odhcpd和odhcp6c分配内网IPV6地址。下面步骤前,我的路由已经获取到IPV6地址,并且可以PING6通。

- /etc/config/network

config globals 'globals'
#注释掉Global ULA-Prefix
#       option ula_prefix 'fd59:7010:0819::/48'

#一般保持默认
config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option macaddr '22:22:22:22:22:22'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option force_link '1'
        option macaddr '22:22:22:22:22:23'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

- /etc/config/dhcp

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option ra 'hybrid'
        option dhcpv6 'hybrid'
        option ndp 'hybrid'
        option ra_management '1'
        option ra_default '1'

#另外如果默认配置中把wan设置为ignore的话,把它注释掉
#config dhcp 'wan'
#       option interface 'wan'
#       option ignore '1'

config dhcp 'wan6'
        option interface 'wan'
        option dhcpv6 'hybrid'
        option ra 'hybrid'
        option ndp 'hybrid'
        option master '1'

在我的测试过程中模式设置为relay或者hybrid貌似效果上没什么差别。

$ /etc/init.d/network restart
$ /etc/init.d/odhcpd restart

这时候检查LUCI-interface LAN接口应该已经获得了wan接口的IPV6地址。

在电脑上执行ip -6 addr可以看到已经分配到2001开头的Global Address,不仅仅是fe80开头的本地链路了。

而此时,我尝试ping6 ipv6.google.com发现连不通,而在电脑上ping6 LAN的IPV6地址(Global Address),是连通的。

也就是说,内部的网络已经可以向外网通信,但外网无法得知内网的路由。由于没有向ISP申请单独的IPv6地址块,这里不可能在外网上添加路由,同时,由于内网与外网同属一个子网(2001:250:1006:6151/64),也不可能想外网广播路由信息包,这样会造成路由混乱。--Linux 用作 IPv6 网关

我的解决办法:

- /etc/config/firewall

config defaults
        option disable_ipv6 0   #让 ipv6 忽略防火墙规则

然后$ /etc/init.d/firewall restart重启防火墙。

参考:

2016-01-16 21:50