一土水丰色今口 2025-10-12 19:10 采纳率: 98.4%
浏览 4
已采纳

RouterOS IPv6无法自动获取前缀?

某企业部署MikroTik RouterOS路由器,启用IPv6并配置PPPoE拨号,但始终无法自动获取IPv6前缀,导致局域网设备无法分配全局IPv6地址。用户确认ISP支持IPv6且其他设备可正常获取,RouterOS中已启用`use-peer-ipv6`,但DHCPv6客户端状态显示“bound”却无前缀委派(Prefix Delegation)信息。排查发现,问题源于接口未在PPPoE客户端上正确启用`request-ipv6-prefix`选项,同时缺少对上游接口的IPv6前缀监听与下游接口的PD分发配置。如何正确配置RouterOS以实现IPv6前缀自动获取与局域网分发?
  • 写回答

1条回答 默认 最新

  • 爱宝妈 2025-10-12 19:10
    关注

    解决MikroTik RouterOS PPPoE拨号下IPv6前缀委派失败问题

    1. 问题背景与现象描述

    某企业部署MikroTik RouterOS作为出口网关,通过PPPoE方式连接ISP,并尝试启用IPv6服务。尽管已配置use-peer-ipv6选项,且DHCPv6客户端状态显示为“bound”,但局域网设备始终无法获取全局IPv6地址。进一步检查发现,RouterOS并未成功获取IPv6前缀委派(Prefix Delegation, PD),导致下游网络缺乏可分配的IPv6地址空间。

    用户确认:ISP支持IPv6、其他品牌路由器可正常获取前缀,排除线路与运营商问题。核心症结在于RouterOS中未正确启用request-ipv6-prefix,以及缺少对PD前缀的监听与分发机制。

    2. IPv6前缀委派(PD)基础原理

    • IPv6前缀委派(RFC 3315, DHCPv6-PD)允许ISP向下级路由器分配一段IPv6前缀(如/56或/60)
    • 企业级路由器需向ISP发起PD请求,获取前缀后在内网接口上进行子网划分与地址分配
    • MikroTik通过/ipv6 dhcp-client模块实现PD请求,依赖正确的接口绑定与参数设置
    • 若未启用request-ipv6-prefix=yes,即使DHCPv6会话建立,也不会触发PD流程

    3. 常见配置误区与排查路径

    误区表现检测命令
    仅启用use-peer-ipv6DHCPv6 bound但无prefix/ipv6 dhcp-client print
    未开启request-ipv6-prefix无PD请求发出/tool sniffer quick protocol=ipv6
    未配置pd监听接口前缀获取但未分发/ipv6 address print
    防火墙阻断DHCPv6流量客户端无法响应/ipv6 firewall filter print
    RA广告未启用终端不发起SLAAC/ipv6 nd print

    4. 正确配置步骤详解

    1. 确保PPPoE客户端启用IPv6前缀请求:
    /interface pppoe-client
    set [ find name="pppoe-out1" ] use-peer-dns=yes use-peer-ipv6=yes \
        add-default-route=yes dial-on-demand=no disabled=no
    
    # 关键:必须显式启用request-ipv6-prefix
    /ipv6 dhcp-client
    add interface=pppoe-out1 request=address,prefix use-peer-dns=yes \
        prefix-hint=::/56 request-ipv6-prefix=yes comment="PD from ISP"
    
    1. 验证PD是否成功获取:
    /ipv6 dhcp-client print detail
    # 查看输出中的“prefix”字段是否存在,例如:
    # prefix=2001:db8:abcd::/56 via pppoe-out1
    
    1. 配置下游接口(如bridge-local)使用PD前缀自动分配:
    /ipv6 address
    add address=::1 from-pool=isp_pd interface=bridge-local advertise=yes
    
    1. 定义前缀池并关联到PD:
    /ipv6 pool
    add name=isp_pd prefix=::/56 prefix-length=64
    
    1. 启用ND(Neighbor Discovery)并广播RA:
    /ipv6 nd
    set [ find where interface=bridge-local ] advertise-dns=yes managed-address-configuration=no \
        other-configuration=yes mtu=1500 hop-limit=64 
    

    5. 配置逻辑流程图(Mermaid)

    graph TD
        A[PPPoE拨号建立] --> B{是否启用
    request-ipv6-prefix?} B -- 否 --> C[无法获取PD前缀] B -- 是 --> D[发送DHCPv6-PD请求] D --> E[ISP返回/56前缀] E --> F[RouterOS创建ipv6 pool] F --> G[在LAN接口分配::1/64] G --> H[发送RA广播] H --> I[终端通过SLAAC获取全局IPv6]

    6. 高级调试技巧

    使用抓包工具验证DHCPv6-PD交互过程:

    /tool sniffer
    start buffer-size=1024 file-name=ipv6_pd_capture
    filter "ip6 and udp port 546 or 547"
    export file-name=packet_log
    

    分析日志中是否有以下关键消息:

    • dhcp6c: requesting prefix
    • received IA_PD for prefix 2001:...
    • applying new prefix to pool

    若日志缺失上述内容,说明PD请求未发出或被丢弃,需检查防火墙策略:

    /ipv6 firewall filter
    add chain=input action=accept protocol=udp dst-port=546,547 comment="Allow DHCPv6"
    add chain=output action=accept protocol=udp src-port=546,547
    

    7. 生产环境优化建议

    • 设置dial-on-demand=no避免因IPv6探测导致频繁重拨
    • 使用静态prefix-hint提示ISP期望前缀长度(如/56)
    • 结合DDNS服务动态更新IPv6 AAAA记录
    • 对多WAN场景配置PD优先级与故障切换逻辑
    • 定期监控/ipv6 dhcp-client状态变化,集成至Zabbix等监控系统
    • 启用script在PD变更时自动刷新防火墙规则与NAT66策略
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 10月12日