ER-X SFP原生IPv6设置

RT,原生IPv6部分及相应防火墙的设置,需通过cli或者ssh手动输入,因为到目前为止,ubnt固件ipv6的gui部分并不完整
网上查了一下相关资料,不少都有一些小问题或错误,此设置可完整通过如test-ipv6.com等网站的IPv6测试
ipv4部分可自行通过向导或手动输入补全,因为gui已经很完善
适用于ER-X SFP或ER-X,edgerouter其他机型可做相应修改后适用
wan:eth0; switch0:eth1,eth2,eth3,eth4
所用某中部省份联通宽带,默认prefix长度为60

configure
#Configure the PPPoE for IPv6(eth0):
set interfaces ethernet eth0 pppoe 0 ipv6 enable
set interfaces ethernet eth0 pppoe 0 ipv6 address autoconf
set interfaces ethernet eth0 pppoe 0 ipv6 dup-addr-detect-transmits 1
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 prefix-length /60
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd rapid-commit enable
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd prefix-only

#Enable IPv6 SLAAC on the LAN(switch0):
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 host-address ::1
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 prefix-id :0
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service slaac

#Enable IPv6 on switch0:
set interfaces switch switch0 ipv6 dup-addr-detect-transmits 1
set interfaces switch switch0 ipv6 router-advert cur-hop-limit 64
set interfaces switch switch0 ipv6 router-advert link-mtu 0
set interfaces switch switch0 ipv6 router-advert managed-flag false
set interfaces switch switch0 ipv6 router-advert max-interval 600
set interfaces switch switch0 ipv6 router-advert other-config-flag false
set interfaces switch switch0 ipv6 router-advert prefix ‘::/64’ autonomous-flag true
set interfaces switch switch0 ipv6 router-advert prefix ‘::/64’ on-link-flag true
set interfaces switch switch0 ipv6 router-advert prefix ‘::/64’ valid-lifetime 2592000
set interfaces switch switch0 ipv6 router-advert reachable-time 0
set interfaces switch switch0 ipv6 router-advert retrans-timer 0
set interfaces switch switch0 ipv6 router-advert send-advert true

#create a policy for WAN->LAN Clients:
set firewall ipv6-name WANv6_IN default-action drop
set firewall ipv6-name WANv6_IN description ‘IPv6 packets from the internet to LAN and WAN’
set firewall ipv6-name WANv6_IN enable-default-log
set firewall ipv6-name WANv6_IN rule 10 action accept
set firewall ipv6-name WANv6_IN rule 10 description ‘Allow established/related packets’
set firewall ipv6-name WANv6_IN rule 10 protocol all
set firewall ipv6-name WANv6_IN rule 10 state established enable
set firewall ipv6-name WANv6_IN rule 10 state related enable
set firewall ipv6-name WANv6_IN rule 20 action drop
set firewall ipv6-name WANv6_IN rule 20 description ‘Drop invalid packets’
set firewall ipv6-name WANv6_IN rule 20 protocol all
set firewall ipv6-name WANv6_IN rule 20 state invalid enable
set firewall ipv6-name WANv6_IN rule 30 action accept
set firewall ipv6-name WANv6_IN rule 30 description ‘Allow ICMPv6 packets’
set firewall ipv6-name WANv6_IN rule 30 protocol icmpv6

#create a policy for WAN->Router:
set firewall ipv6-name WANv6_LOCAL default-action drop
set firewall ipv6-name WANv6_LOCAL description ‘IPv6 packets from the internet to the router’
set firewall ipv6-name WANv6_LOCAL enable-default-log
set firewall ipv6-name WANv6_LOCAL rule 10 action accept
set firewall ipv6-name WANv6_LOCAL rule 10 description ‘Allow established/related packets’
set firewall ipv6-name WANv6_LOCAL rule 10 protocol all
set firewall ipv6-name WANv6_LOCAL rule 10 state established enable
set firewall ipv6-name WANv6_LOCAL rule 10 state related enable
set firewall ipv6-name WANv6_LOCAL rule 20 action accept
set firewall ipv6-name WANv6_LOCAL rule 20 description ‘Allow ICMPv6 packets’
set firewall ipv6-name WANv6_LOCAL rule 20 protocol icmpv6
set firewall ipv6-name WANv6_LOCAL rule 30 action accept
set firewall ipv6-name WANv6_LOCAL rule 30 description ‘Allow DHCPv6 client/server’
set firewall ipv6-name WANv6_LOCAL rule 30 destination port 546
set firewall ipv6-name WANv6_LOCAL rule 30 source port 547
set firewall ipv6-name WANv6_LOCAL rule 30 protocol udp
set firewall ipv6-name WANv6_LOCAL rule 40 action drop
set firewall ipv6-name WANv6_LOCAL rule 40 description ‘Drop invalid packets’
set firewall ipv6-name WANv6_LOCAL rule 40 protocol all
set firewall ipv6-name WANv6_LOCAL rule 40 state invalid enable
set firewall ipv6-receive-redirects disable
set firewall ipv6-src-route disable
set interfaces ethernet eth0 pppoe 0 firewall in ipv6-name WANv6_IN
set interfaces ethernet eth0 pppoe 0 firewall local ipv6-name WANv6_LOCAL

commit
save
exit
reboot
y

5赞

DNS如何分配?这样只能slaac分配地址。还是无法完整的使用ipv6

关于DNS的配置看文档需要配置RDNSS扩展选项或者DHCPv6 Only或者SLAAC+DHCPv6混合
目前根本没找到RDNSS的配置,DHCPv6 Only由于前缀拨号时会变化也没找到合适的方法

dns直接来源于isp,并没有自定义dns服务器,完整使用ipv6没有任何问题
不太理解你的意思

我的意思是你这个配置,主机只能获取IPv4的DNS,而没有IPv6的DNS
尽管IPv4的DNS能够支持解析IPv6站点,但是还是不完善。
华为和思科的路由器可以通过slaac和DHCPv6混合方式给主机配置IPv6 DNS你上面的配置里面有一个
set interfaces switch switch0 ipv6 router-advert other-config-flag false
这个直接导致了DNS无法配置完成。实际上,应该是配置了DHCPv6之后这样设定
set interfaces switch switch0 ipv6 router-advert other-config-flag true
v6dns.jpg

明白你的意思了。
不过关于这个参数的设置你的说法有问题,设置为false并不会导致dns无法配置完成。
实际上ipv6的dns问题一直是存在的,并且在不同操作系统中存在不同的兼容问题
ipv6的dns分配有三种方式,rdnss,dhcpv6 stateless和dhcpv6 stateful
win10之前的版本都不支持rdnss,好像最近的win10才开始支持rdnss,但适用条件比较苛刻,使用dhcpv6也会有些小问题
安卓不支持dhcpv6 stateful
可以说到目前为止,并不存在在不同使用环境中给终端提供ipv6 dns统一的完全可靠的方式

set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service slaac
如果改成
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service dhcpv6-stateless
windows终端(最新版win10)能正确获取ipv6 dns服务器,并能完整通过ipv6测试
可惜的是,安卓手机dns获取就不正常了,不能通过ipv6测试

ps:不同版本的win10在ipv6支持度上都不相同,比如之前一直不支持rdnss,某个版本升级后竟然不支持dhcpv6 stateless了,见:https://social.technet.microsoft … in10itpronetworking

研究了固件向导里关于ipv6设置的部分,为了最大程度的利用gui,减少手动输入的工作量,发现启用gui向导里的dhcpv6 pd后,需要手动输入若干命令后才能完整支持ipv6:

  1. 首先在gui里启用dhcpv6 pd,如图:2.PNG

  2. 重启后,打开cli或ssh输入如下命令
    configure
    #enable the IPv6 option for the PPPoE connection
    set interfaces ethernet eth0 pppoe 0 ipv6 enable

#set up a default route to use the PPPoE interface
set protocols static interface-route6 ::/0 next-hop-interface pppoe0
commit
save
exit
reboot
y

  1. 现在设置已经完成,安卓手机能顺利通过ipv6测试,windows终端无法获取ipv6的dns服务器而无法通过,因为windos不支持默认的rdnss,如果想要windows终端能自动获取ipv6的dns服务器,可通过cli,ssh或config tree做如下修改:
    set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service slaac改为:
    set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 service dhcpv6-stateless
    现在windows终端能完整通过ipv6测试。

ps:和ipv4防火墙规则有所不同,因为icmp对dhcpv6-pd来说非常重要,而路由器默认模板里的ipv6防火墙规则并未允许icmpv6数据包进入,所以需要在WANv6_IN规则里加入一条:
configure
set firewall ipv6-name WANv6_IN rule 30 action accept
set firewall ipv6-name WANv6_IN rule 30 description ‘Allow IPv6 icmp’
set firewall ipv6-name WANv6_IN rule 30 protocol ipv6-icmp
commit
save

ps1: 此外,win10默认的防火墙也没有允许icmp数据包,必须同时手动加入一条允许icmpv6的规则,否则在www.ipv6-test网站进行ipv6测试时,IPv Connectivity里的ICMP项将永远是Filtered

2赞

ps2: 如上设置都会使用isp自动分配的dns服务器,如需使用自设定的dns(这里用的百度dns),可做如下修改:
configure
//pppoe0不获取isp ipv4 dns
set interfaces ethernet eth0 pppoe 0 name-server none
//pppoe0不获取isp ipv6 dns
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd no-dns
set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 0 interface switch0 no-dns
//自定义dns
set system name-server 180.76.76.76
set system name-server 2400:da00::6666
set service dns forwarding system
commit
save

大兄弟,我最近也在折腾ipv6,我想请教一下,ipv6的三种dns分配方式,rdnss,dhcpv6 stateless和dhcpv6 stateful,和终端对应资料哪里有?
现在总共有3个平台:安卓平台、IOS平台以及windows平台;从您的描述中,我得知:win10支持rdnss,安卓不支持dhcpv6 stateful,那么win10是否支持dhcpv6 stateless,另外IOS平台呢
我想做的是,既然找不到一个通用的,就设置一个适用范围最广的,但我不知道应该选哪个;另外,是不是手动指定DNS就不用关心这个了(终端还是自动获取)?

不,win10一直都不支持rdnss,安卓一直能支持rdnss,新版安卓同时支持rdnss和dhcpv6 stateless,老版安卓是否支持dhcpv6不确定,手里没有ios平台,无法测试
其实,这根本就不是问题,因为影响的仅仅是终端是否能自动获取ipv6 dns服务器,而实际上ipv4 dns是支持ipv6域名解析的。从www.test-ipv6.com等ipv6测试网站上也能确认,即使终端无法自动获取ipv6 dns服务器,也是能通过测试的。如果你实在想用ipv6 dns,也能在终端的tcp/ipv6网络设置里手动输入。

按照你的默认设置,安卓手机和win pc 都可以获得ipv6地址,但是无法获得公网ipv6地址,导致https://test-ipv6.com/测试说无法获取ipv6地址,好像还差公网前缀设置。电脑直连光猫可以获得公网ipv6地址,https://test-ipv6.com/测试通过。TIM截图20181029192227.png

牛逼,看了你的文章,我突然发现为啥我的一直拿不到 IPV6了。原来是前缀长度,我的当时前缀长度是48.我也想运营商不会这么好,给一个48的给我。后来改成你提醒的60前缀就OK了。但是请教3个问题
1: 如何设置成自动获取前缀长度呢?假如我不知道运营商PD给我的前缀是60.路由器有办法设置成自动,而不是现在这样固定的60申请呢?
2:如果只能提前知道运营商给的60前缀,那么我可以什么命令可以支持运营商分配给我的是60前缀呢?
3:既然是60的前缀。那么理论上就有 16个 / 6 4 的前缀给内网。也就是可以分配16个 / 6 4 的内网。我目前家里面正好有3个VLAN。我只是是分配了 swtich.10 有一个 / 6 4 的。不知道另外2个VLAN 我如何来设置呢?

得到答案了吗,好像每次拨号,前缀都变的?

还是期待穿透模式,之前在国外论坛给UI负责控制器和设备固件的人留言了。网件、华硕、linksys这些都有穿透模式。

请问我pppoe拨号出错,能否帮我看下为何没有获得ipv6的地址不?

搞了两个晚上也没搞定。我是光猫拨号,ER-X路由接在光猫Lan上。有人能写个不是桥接拨号的教程吗?多谢

mate20的安卓10不支持dhcpv6 stateless的dns分配,iOS支持。截至Windows 10 2004 19041仍然对dhcpv6 stateless支持不稳定,时有时无(通过有线连接重启路由器时能有几率能获得ipv6的dns,重启电脑后失效,Set-NetIPInterface “以太网” -AddressFamily ipv6 -RouterDiscovery Disabled然后再Enabled能重新获取到)。但通过无线网卡连接每次都能获取到ipv6 dns无需额外操作。