V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
x2009again
V2EX  ›  OpenWrt

请教一个 openwrt 拨号后使用 ipv6 的问题

  •  
  •   x2009again · 14 天前 · 498 次点击

    openwrt 拨号后会获取到一个分发的 ipv 前缀,此时会得到一个::1 后缀的 ipv6 ,然后虚拟动态接口 (DHCPv6 客户端)也得到一个分配的 ipv6 ,openwrt 使用 ipv6 访问外网有时会使用::1 这个 ipv6 访问外网,有时会使用 dhcpv6 客户端分配的 ipv6 访问外网,请问怎么设置 openwrt 访问外网只使用 dhcpv6 获取的 ipv6 ,而不是使用分发前缀的 ipv6 地址。

    ipv6 图片

    7 条回复    2025-05-30 19:48:39 +08:00
    allplay
        1
    allplay  
       8 天前
    经典好问题,搬运和备份:

    OpenWrt 开启 IPv6 公网访问全指南
    晨鹤部落格.
    https://chenhe.me/post/openwrt-config-ipv6-public-access

    ===================================================================
    拨号获取 IPv6

    进入 OpenWrt 后台「网络-接口」,编辑 wan 接口(通常都是这个名字),修改这些选项:

    获取 IPv6 地址:自动
    委托 IPv6 前缀:勾选

    wan 口的「 DHCP 服务器 - IPv6 设置」:

    指定的主接口:不勾选
    RA 服务:禁用
    DHCPv6 服务:禁用
    NDP 代理:禁用

    保存应用后通常会多出一个名为 wan_6 的虚拟动态接口,因为大部分营运商是通过 DHCPv6 下发地址的,而我们之前选择了「自动」,OpenWrt 识别到之后就会新建一个客户端。若运营商支持现在应该就能看到获取的前缀了( PD ):

    注意,若只有 fe80:: 开头的地址则说明未获取到 IPv6 ,这个只是自动生成的链路地址而已。

    分配 IPv6

    路由器获得了一个网段,下面要做的就是给每一个设备都分配一个公网地址。有两种方案,可以单独选择也可以同时使用,分别是 SLAAC 与 DHCPv6 。
    ===========================================================
    DHCPv6

    Android 明确不会支持有状态 DHCPv6

    DHCPv6 本身也分为有状态和无状态两种:

    有状态:通过 DHCPv6 分配 IP 。
    无状态:IP 依然采用 SLAAC 生成(通过 RA ),但其他参数,例如 DNS ,网关地址等则通过 DHCPv6 获取。

    要启用 DHCPv6 ,「 lan 口的设置 - 高级设置」与上文 SLAAC 配置一致,「 lan 口的设置 - DHCP 服务器 - IPv6 设置」如下:

    RA 服务:服务器模式
    DHCPv6 服务:服务器模式
    本地 IPV6 DNS 服务器:勾选
    NDP 代理:禁用,用于多级路由器之间转发邻居发现协议的流量。

    对应地, 「 IPv6 RA 设置」应为:

    启用 SLAAC:禁用
    RA 标记:M + O ,表示通过 DHCPv6 获取 IP 与其他配置参数。

    若希望配置为无状态 DHCPv6 ,则需要启用 SLAAC ,并把 RA 标记设置为 O 。即通过 SLAAC 生成 IP 但通过 DHCPv6 获取参数。

    =======================================================
    SLAAC

    SLAAC 是无状态地址自动配置协议,顾名思义,它不再需要 DHCP 服务器来维护状态,而是各个客户端自行生成、协商、通告地址。SLAAC 是唯一全平台支持的协议,Android 明确不会支持有状态 DHCPv6 ,谷歌认为有状态协议对于终端用户没有明显优点,还会造成隐私问题,属于 IPv4 时代的陋习。

    SLAAC 的一个重要数据是路由器定期发送的 RA (路由通告),其包含前缀信息,以及是否应该尝试通告 DHCPv6 请求地址。

    要配置纯 SLAAC ,需要进入 「 lan 口的设置 - 高级设置」:

    委托 IPv6 前缀:自选,决定到下级设备能否获得前缀(不影响 IPv6 地址本身的分配)。不懂可以勾上。
    IPv6 分配长度:启用委托前缀时决定分配下去的前缀长度,划分多个子网时需要,不懂可以填 64 或保持默认。
    IPv6 分配提示:保持默认就行,划分子网是可选用的。
    IPv6 后缀:设置当前接口的 IPv6 地址后缀,可以填写 ::1 ,那么此接口的地址就类似 240e:aaaa:bbbb:cccc::1 。

    另外还要配置「 lan 口的设置 - DHCP 服务器 - IPv6 设置」:

    指定的主接口:不勾选
    RA 服务:服务器模式
    DHCPv6 服务:禁用
    本地 IPV6 DNS 服务器:勾选
    NDP 代理:禁用

    对应地,修改 「 IPv6 RA 设置」:

    默认路由器:自动
    启用 SLAAC:勾选
    RA 标记:无,因为我们根本没有 DHCPv6 服务器。

    这样保存应用之后,应该所有的下属设备都可以生成公网 IPv6 地址了。

    ======================================================
    防火墙放行

    现在我们的每一个设备都有公网地址了,但要想被外部访问,需要防火墙放行才行。这里只说 OpenWrt 的防火墙,至于设备自己的(群晖 NAS ,Windows 等)自行设置。

    进入「网络 - 防火墙 - 通信规则」点击下面的添加按钮:

    [常规设置]

    协议:按需选择,注意 ping 使用的是 ICMP 协议,不是 TCP/UDP 。
    源区域:wan
    目标区域:lan (如果要访问路由器自己则选择「设备」)
    目标端口:自行设置
    操作:接受

    [高级设置]

    地址族限制:仅 IPv6

    保存一下就好。

    注意,这样配置防火墙实际上是允许以 IPv6 访问任意子网设备的指定端口。

    如果希望只放行特定的目标设备,可以指定 IP 后缀。因为运营商分配给我们的前缀是动态变化的,所以不能直接指定 IP ,而后缀无论是使用 DHCPv6 还是 SLAAC (使用 eui64 ),经过配置都可以确保不变。然后添加防火墙规则时填写「目标地址」为 ::aaaa:bbbb:cccc:dddd/-64 ,其中 -64 的意思是匹配从右往左的 64 位。若部分系统不支持这种缩写,可以回退到 IPv4 的掩码表示形式:::aaaa:bbbb:cccc:dddd/::ffff:ffff:ffff:ffff 。
    x2009again
        2
    x2009again  
    OP
       8 天前
    @allplay #1 回答的不是我的问题,我设备 ipv6 都正常,下端设备都有 ipv6 ,同时通过 ipv6 也可以访问 openwrt ,问题是 openwrt 有 2 个 ipv6 都可以访问,我想禁用 1 个 ipv6 或者说 openwrt 通过 ipv6 访问外网时固定使用其中一个 ipv6 ,而不是随机使用。
    allplay
        3
    allplay  
       7 天前
    @x2009again
    :1 那个是运营商给你的地址,:1 前面的部分会定期变化。另外一个是临时地址,大约几个小时就会变。
    使用临时地址有助于保护隐私。如果要入站,就 DDNS 。
    x2009again
        4
    x2009again  
    OP
       7 天前
    @allplay #3 感谢回复,我明白你的意思,我现在说的是出站,因为我通过路由直接访问一些服务会随机使用 2 个 global ipv6 中的一个,所以我想限定一下只使用临时地址访问而不使用:1 那个去访问外网服务。
    allplay
        5
    allplay  
       7 天前 via Android
    ipv6 太复杂了,思路方向:防火墙、固定后缀…
    allplay
        6
    allplay  
       7 天前 via Android   ❤️ 1
    突然看到你用的 DHCP v6 ,改用 slaac 试试,并把后缀定位 random
    x2009again
        7
    x2009again  
    OP
       6 天前
    @allplay #6 当时看到第一次的回复我就改为 slaac 试过,没有什么变化,不过后缀改为 random 没有试过,感觉意义不大,谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2680 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:29 · PVG 19:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.