标签: ipv6

  • 华为USG系列防火墙PPPOE拨号上网

    • 创建dialer接口
    interface Dialer0
     link-protocol ppp
     ppp chap user pppoe-user
     ppp chap password cipher 123456
     ppp pap local-user pppoe-user password cipher 123456
     ppp ipcp dns admit-any
     mtu 1492
     ipv6 enable
     ip address ppp-negotiate
     dialer user pppoe-user
     dialer bundle 1
     dialer number 0 autodial
     ipv6 address auto link-local
     ipv6 address auto global
     ipv6 mtu 1492
     healthcheck wan0
     service-manage https permit
     service-manage ssh permit
     redirect-reverse
     ipv6 redirect-reverse
     dhcpv6 client pd v6pd1
    
    • 创建健康检查
    healthcheck name wan0
    destination 223.5.5.5 interface Dialer0  protocol dns
    
    • 创建NAT
    nat-policy
     rule name Internet
      source-zone 办公网
      egress-interface Dialer0
      action source-nat easy-ip
    
    • 创建默认路由
    ip route-static 0.0.0.0 0 Dialer0
    ipv6 route-static :: 0 Dialer0
    
    • 绑定pppoe会话到wan0口
    interface WAN0/0/0
     pppoe-client dial-bundle-number 1
     undo shutdown
     anti-ddos flow-statistic enable
     service-manage https permit
     service-manage ssh permit
    
    • 配置lan口
    dhcpv6 pool pool1
     dns-server FD06::1
    interface Vlanif6
     ipv6 enable
     ip address 192.168.2.1 255.255.255.0
     ipv6 address v6pd1 ::1:0:0:0:1/64
     ipv6 address FD06::1/64
     ipv6 address auto link-local
     ipv6 address auto global
     ipv6 mtu 1492
     undo ipv6 nd ra halt
     ipv6 nd autoconfig other-flag
     alias Vlanif6
     service-manage http permit
     service-manage https permit
     service-manage ping permit
     service-manage ssh permit
     dhcp server mask 255.255.255.0
     dhcp server ip-range 192.168.2.1 192.168.2.254
     dhcp select interface
     dhcpv6 server pool1
     dhcp server gateway-list 192.168.2.1
     dhcp server dns-list 192.168.2.1
    

    注意:
    如果拨号成功后ipv6不通,可以删除并重新配置以下命令:

     ipv6 address auto link-local
     ipv6 address auto global
     dhcpv6 client pd v6pd1
    

    如果ipv6上网不稳定还可以配置以下命令:

    tcp ipv6 max-mss 1432
    

    Views: 1

  • ipv6组播

    MLDv1
    https://datatracker.ietf.org/doc/rfc2710/
    MLDv2,添加了组播源过滤,对应IGMPv3协议
    https://datatracker.ietf.org/doc/rfc3810/
    MLD Snooping
    https://support.huawei.com/enterprise/zh/doc/EDOC1000178150/ee7e5721

    IPv6基础协议中广泛使用了各种组播地址,这样能减少广播泛洪。但是路由器和交换机不支持组播MLD协议的话还是会广播泛洪,也使用广播没有区别。
    在交换机和路由器上开启MLD协议,可以对组播报文进行过滤,而不是在所有端口上进行转发。MLD支持除ff02::1和节点本地地址外的所有组播地址识别处理。

    MLD报文是由三层设备(路由器)发出的,交换机只负责监听,当路由器没有开启MLD时交换机上的MLD Snooping也是不能正常工作的(实际发现即使没有MLD querier时终端也会定时发送MLD report)。当路由器不支持MLD时可以在交换机上配置MLD查询器或者MLD代理代替路由器发送MLD查询报文。
    实验发现关闭路由器上的MLD功能后交换机仍然能看到组播表项,只是表项很快就消失,并不稳定存在。
    华为MLD代理的配置:
    https://support.huawei.com/enterprise/zh/doc/EDOC1100366607/c39c955e

    RFC原文:

    When a node receives a General Query, it sets a delay timer for each
    multicast address to which it is listening on the interface from
    which it received the Query, EXCLUDING the link-scope all-nodes
    address and any multicast addresses of scope 0 (reserved) or 1
    (node-local).

    Views: 6

  • 用于无线网络的ipv6

    ipv6设计时主要考虑的是有线网络环境,当用于无线网时会出现过度依赖组播,功耗高,网络效率不好的问题,以下RFC研究解决这些问题。

    6LoWPAN中的ndp优化
    https://datatracker.ietf.org/doc/rfc6775/
    Registration Extensions for 6LoWPAN Neighbor Discovery
    https://datatracker.ietf.org/doc/rfc8505/
    无线网上的IPv6
    https://datatracker.ietf.org/doc/draft-ietf-6man-ipv6-over-wireless/
    ND6 Enhancements
    https://www.ipv6plus.net/resources/Enterprise_Networks/ND6-Enhancements_for_Neighbour_Discovery.pdf
    6LoWPAN
    https://datatracker.ietf.org/doc/rfc4944/
    6LoWPAN相关的RFC集合
    https://datatracker.ietf.org/wg/6lowpan/documents/
    6LoWPAN中文
    https://github.com/chunhuajiang/6lowpan-rfcs-chinese

    Views: 0

  • 节点本地地址

    这个其实就是用于多播的本地回环地址,但是本地环回地址仅用于lo网卡,而interface-local允许任何接口加入,包括lo网卡,如此接收端能否收到包取决于监听哪个网卡。
    FF01::开头的都是节点本地地址(node-local),又叫接口本地地址(interface-local)
    FF01::1 节点本地范围所有节点组播地址,所有网卡都在这个组,包括lo
    FF01::2 节点本地范围所有路由器组播地址,开启转发的以太网网卡会加入这个组,但是wlan,tun,veth,wireguard,bridge,ppp等接口即使开启转发也不会加入FF01::2。

    查看指定的接口是否开启转发
    cat /proc/sys/net/ipv6/conf/eth0/forwarding

    参考:
    https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml
    https://www.ibm.com/docs/en/zvm/7.2?topic=addresses-multicast-scope

    Views: 3

  • ipv6 ndp协议学习笔记

    ndp是用于ipv6的邻居发现协议,相当于ipv4的arp协议,但ndp相对于arp进行了大量完善,也更为复杂。
    先把题目列出来,后面再补充
    – solicited-node multicast address(请求节点多播地址,SNMA)
    这个多播地址主要在nd协义中用于多播ndp。
    交换机开启mld协议后SNMA才能以组播的形式转发(RFC4861 7.2.1节),否者跟广播没区别。
    前104位是固定值,后24位是对应ipv6的后64位,格式如下:
    ff02::1:ff00:0/104
    注意:每个ipv6地址都有一个对应的多播地址。
    – ns和na报文
    ns报文用来请求目标ip地址的mac地址,na报文用来通告自己的ip地址和mac地址绑定关系,同时ns和na报文也用于nud和dad。
    – 单播和组播ndp
    单播ndp就是目的地址是单播ipv6和mac地址的nd报文,反之目的地址是组播ipv6和mac地址的nd报文就是组播ndp,用于ndp的组播地址分为请求节点多播地址和链路本地作用域所有节点的多播地址(FF02::1),FF02::1主要用于非请求NA报文以及DAD时应答的NA报文。
    – Address Resolution和nud(邻居不可达性检测)
    In some cases (e.g., UDP-based protocols and routers forwarding packets to hosts), such reachability information may not be readily available from upper-layer protocols. When no hints are available and a node is sending packets to a neighbor, the node actively probes the neighbor using unicast Neighbor Solicitation messages to verify that the forward path is still working.
    对已知的ipv6 neighborhood进行状态维护,实现更新缓存表中的neighborhood是否可达,不过只对正在发送数据的neighborhood进行维护,没有流量的neighborhood会转入stale状态。
    NUD可以参考上层协议的信息,比如TCP确认,当收到TCP确认后可以不再发送NS报文执行NUD,但是UPD和组播仍然需要通过NS报文执行NUD。
    首次解析mac地址时叫地址解析,使用请求节点多播地址,后面维护邻居状态叫NUD,使用单播地址。

    • dad(重复地址检测)
      Neighbor Solicitation and Advertisement messages are also used for Duplicate Address Detection as specified by [ADDRCONF]. In particular, Duplicate Address Detection sends Neighbor Solicitation messages with an unspecified source address targeting its own “tentative” address. Such messages trigger nodes already using the address to respond with a multicast Neighbor Advertisement indicating that the address is in use.
      使用solicited-node multicast address发送NS报文,使用多播回复NA报文(ff02::1)
      dad只在接口初始化时执行
    • gc(垃圾回收)
      对于状态处于stale,又没有流量通过(没有流量就不执行nud)的邻居表会始终存在内存中,这样时间长了势必会浪费内存空间,在Linux当邻居表大于128个时就会调用gc删除stale状态的表项,当大于512个时就是删除超过5秒的表项。
    • Unsolicited Neighbor Advertisements(非请求NA)
      只在mac地址改变时发送,不能代替NUD,设备收到非请求NA时不应该更新自己的neighbor表,而应该重新执行地NUD,即发送ns单播报文。非请求na报文如果把override设为1,则设备会用新的mac地址执行nud。rfc中说不应该只依懒非请求NA来更新neighbor的mac地址,因为能收到na报文只代表是单向通的,不代表反过来也是通的。
      注意:
      网卡初始化时并不执行非请求NA而是执行DAD。

    • 重定向
      ICMPv6 Type 137,与ipv4的重定向类似

    参考:
    arp协议
    https://datatracker.ietf.org/doc/rfc826/
    ndp协议
    https://datatracker.ietf.org/doc/rfc4861/
    rfc4861中文版,不过有点像机翻,比谷歌翻译强点
    https://blog.csdn.net/Phoenix_zxk/article/details/135048709
    rfc1971 4.8.2节 重复地址检测
    To check an address, a node sends DupAddrDetectTransmits Neighbor Solicitations, each separated by RetransTimer milliseconds. The solicitation’s Target Address is set to the address being checked, the IP source is set to the unspecified address, and the IP destination is set to the solicited-node multicast address of the target address.
    https://datatracker.ietf.org/doc/rfc1971/
    icmpv6协议
    https://datatracker.ietf.org/doc/rfc4443/
    配置gc的运行条件
    http://sunyongfeng.com/201805/networks/linux_arp
    华为的文档
    https://support.huawei.com/enterprise/zh/doc/EDOC1100389608/a7028751

    Views: 11

  • 查看ipv6邻居表(类似ipv4的arp表)

    linux:
    ip -6 neighbour
    Windows:
    netsh interface ipv6 show neighbors
    华为路由器:
    display ipv6 neighbour

    Views: 1

  • 查看ipv6组播地址

    IPv6中广泛使用组播地址,很多时候要查看组播地址
    Windows:
    netsh interface ipv6 show joins
    Linux:
    ip -6 maddress
    华为路由器:
    display ipv6 interface

    Views: 3

  • 华为路由器PPPOE拨号IPv6不稳定

    表现为IPv6速度慢,有的网站能打开,有的打不开。

    #pppoe口
    int Dialer 1
      mtu 1492
      ipv6 mtu 1492
    #lan口
    int vlanif 2
      mtu 1492
      ipv6 mtu 1492
    

    造成这种问题是原因多方面的:
    – IPv6天生不允许分片
    – 华为路由器的MTU,IPv4和IPv6是分开配置的,PPPOE会自动配置IPv4的MTU为1492,但IPv6不会
    – ipv6 pathmtu被某些设备破坏了或者某些网站pathmtu不正确

    正常情况下IPv6是不需要设置MTU的,IPv6始终使用Path MTU Discovery自动发现正确的MTU,出现这种情况大概率华为设备的PMTUD协议有问题,这种问题仅在华为设备上出现。
    OpenWrt就是有项RA MTU的设置,会把PPPOE接口的MTU通告给下游设备。

    参考:
    https://macgeeker.com/openwrt/ipv6-mtu/
    https://forum.huawei.com/enterprise/zh/thread/blog/703813366742663168

    Views: 4

  • dnsdist支持ipv6

    dnsdist.conf中按下面配置,同时Docker开启ipv6支持

    addLocal('0.0.0.0', {reusePort=true,doTCP=true})
    addLocal('::', {reusePort=true,doTCP=true})
    setACL({'0.0.0.0/0', '::/0'})
    webserver("0.0.0.0:8083")
    webserver("[::]:8083")
    

    Views: 1

  • IPV6实现内网主机名动态解析

    根据RFC4704的说明,只有dhcpv6 statefull才支持主机名解析,也就是dhcp请求报文中的option39字段,stateless及SLAAC都是不支持的,这给主机名解析带来了一些难度,要实现主机名解析可以从以下两个方面入手:
    1. 使用dhcpv6 statefull
    dnsmasq和odhcpd都支持statefull功能,还需要注意以下方面
    – 把RA报文的M和O位设置为1
    其实不是也有的客户端都严格按照RA报文的标志来处理,像Windows10上就是始终会执行SLAAC 和DHCPv6两种请求
    – 客户端请求报文携带option 39字段
    在Windows上保持默认即可,部分Linux系统(Debian)需要在/etc/dhcp/dhclient.conf中 添加send fqdn.fqdn = gethostname();
    据我测试macos上也存在这个问题,目前没有解决办法。

    statefull和slaac是可以同时使用的,RA通告前缀的同时使用dhcpv6提供地址分配,这样客户端会     获得两个IP地址
    
    1. 使用dnsmasq ra-names功能
      ra-names是根据dhcpv4中的主机名再结合mac地址计算出主机名与ipv6地址的绑定关系
      这种方式有两个缺点:
      一是,推算出来的ipv6地址不一定100%正确
      二是,要通过DHCP获取ipv4地址,这对于单栈网络或静态配置的IP地址就不行。
      好在statefull和ra-names功能是可以同时使有的,可以弥补彼此的不足

    参考:
    https://datatracker.ietf.org/doc/rfc4704/
    https://serverfault.com/questions/1033682/dhclient-is-sending-host-name-for-ipv4-but-not-ipv6

    Views: 3