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

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

  •  
  •   x2009again 205 天前 1233 次点击
    这是一个创建于 205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       200 天前
    经典好问题,搬运和备份:

    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
       199 天前
    @allplay #1 回答的不是我的问题,我设备 ipv6 都正常,下端设备都有 ipv6 ,同时通过 ipv6 也可以访问 openwrt ,问题是 openwrt 有 2 个 ipv6 都可以访问,我想禁用 1 个 ipv6 或者说 openwrt 通过 ipv6 访问外网时固定使用其中一个 ipv6 ,而不是随机使用。
    allplay
        3
    allplay  
       199 天前
    @x2009again
    :1 那个是运营商给你的地址,:1 前面的部分会定期变化。另外一个是临时地址,大约几个小时就会变。
    使用临时地址有助于保护隐私。如果要入站,就 DDNS 。
    x2009again
        4
    x2009again  
    OP
       199 天前
    @allplay #3 感谢回复,我明白你的意思,我现在说的是出站,因为我通过路由直接访问一些服务会随机使用 2 个 global ipv6 中的一个,所以我想限定一下只使用临时地址访问而不使用:1 那个去访问外网服务。
    allplay
        5
    allplay  
       199 天前 via Android
    ipv6 太复杂了,思路方向:防火墙、固定后缀…
    allplay
        6
    allplay  
       199 天前 via Android   1
    突然看到你用的 DHCP v6 ,改用 slaac 试试,并把后缀定位 random
    x2009again
        7
    x2009again  
    OP
       198 天前
    @allplay #6 当时看到第一次的回复我就改为 slaac 试过,没有什么变化,不过后缀改为 random 没有试过,感觉意义不大,谢谢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3632 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 908ms UTC 05:10 PVG 13:10 LAX 21:10 JFK 00:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86