本文介绍了如何在爱快路由设备上配置 IPV6 网络防火墙,我们设置该防火墙的主要原因有以下几点:

  • 内网设备需要访问纯 IPV6 资源,例如观看 IPTV;
  • 某些内网设备缺乏防火墙保护,如果这些设备暴露在外网,将面临严重的安全风险。
  • 事实上只有部分内网设备需要外网访问权限,例如 NAS 和虚拟机,其他设备并不需要被外网访问。
  • 为了方便使用,在内网部署了 DDNS,将动态 IP 地址绑定到易于记忆的域名,这也存在外泄的潜在风险。

我们将从两个角度完成内网 IPV6 防火墙的设定:

  • 只给指定设备分发公网 IPV6 地址;
  • 只开放指定地址和指定端口的访问权限;

IPV6 地址获取

ipv6地址获取有两种方式:路由器通告前缀 + 设备自己的后缀[1];DHCP 给一个 /128 的地址。

需要明确:无状态和有状态,仅仅指的是 IPV6 地址的获取方式。前者实现方式是 SLAAC,后者是 DHCPv6,由于 SLAAC 只能获取到地址,无法获取到 DNS 等信息,亦存在一种组合搭配,所有方式如下:

方式地址前缀网关DNSAMO
SLAAC(无状态)RARARA-100
Stateless DHCPv6(无状态 DHCPv6)RARARADHCPv6101
Stateful DHCPv6(有状态 DHCPv6)DHCPv6DHCPv6RADHCPv601~
有状态 + 无状态111

原则上,出于易于管理的角度,我们推崇使用有状态 DHCPv6。在这种方式下,所有信息由路由器统一下发管理。然而,谷歌曾明确表示,安卓设备将只支持 SLAAC 的 IPv6 地址获取方式[2],因此,在有状态或者无状态的选取上根据个人需求而定[3]

对于爱快系统,有状态可与 DHCPv6 黑白名单 搭配使用,以便完成对指定设备(依据 MAC 地址)的 IPv6 地址分配。而无状态则通过设置 RA 通告绑定,与 前缀静态分配 搭配使用,实现对指定设备的地址分配,在前缀静态分配中填写本地链接 IPV6 地址(形如 fe80::8a35:2de7:e6f3:7582)。

ACL 规则

一些基本知识:

  • 允许的优先级大于阻断的优先级;
  • 方向中的转发/进所描述的对象为路由器,进指内网/外网访问路由,一般只需要使用转发;
  • 连接方向匹配中原始方向为发起方发起访问的报文,可以是内网发起,也可以是外网发起,应答亦是;
  • 后缀匹配:由于前缀动态变化,而后缀固定[4],所以匹配内网设备时使用后缀地址进行匹配;

假设运营商分配的 PD 前缀为 /60(aaaa:bbbb:cccc:ddd0::/60),即可划分 16 个 /64 子网(aaaa:bbbb:cccc:ddd0::/64 ~ aaaa:bbbb:cccc:dddf::/64),无状态下最小子网前缀要求便是 /64。

全局阻断

添加一条全局阻断访问的规则[5]

协议栈协议动作方向连接方向匹配目的地址目的端口进接口出接口
IPV6任意阻断转发原始方向任意任意

效果:阻断了内网与外网之间的互相访问,外网无法访问内网设备,反之亦然。

允许内网访问外网指定端口

协议栈协议动作方向连接方向匹配目的地址目的端口进接口出接口
IPV6tcp允许转发关闭80,443lanwan

此条用于举例说明:上一条规则全局阻断由于没有指定进/出接口,导致内网无法访问外网的 IPv6 资源。在这种情况下,内网作为发起方位于进接口,数据包流向出接口。同时,由于阻断规则的连接方向匹配设置为原始方向,因此本条规则连接方向匹配中的关闭与原始方向效果相同。

允许外网访问内网指定端口

协议栈协议动作方向连接方向匹配目的地址目的端口进接口出接口
IPV6tcp允许转发原始方向::abcd/::ffff8443任意任意

关于目的地址:数据包实际从 WAN 到 LAN,走向目的地址,可以根据后缀匹配填写目的地址。

假设设备 IPV6 地址为:240e:aaaa:bbbb:cccc:0000:0000:0000:0001,简写为 240e:aaaa:bbbb:cccc::1,用后缀表示该地址变 ::1/::ffff,无状态地址大多为 ::aaaa:bbbb:cccc:dddd/::ffff:ffff:ffff:ffff

检测

可以在 IPv6 Port Checker 处完成端口外网检测,按照实际情况,运营商已经把 80, 443, 8080 等端口阻断了。


  1. EUI-64:根据自身 MAC 地址生成的全球 IPV6 地址;随机生成:为了保护隐私生成的临时 IPV6 地址 ↩︎

  2. 安卓设备在获取 IPV6 地址时必须使用无状态配置,且子网前缀要求大于等于 64。 ↩︎

  3. 由于无状态需要通过设备 MAC 地址计算得出,所以相比有状态地址,无状态地址长的多。 ↩︎

  4. 有状态地址后缀一定固定,无状态地址后缀需选用永久地址中的接口标识部分。 ↩︎

  5. TIP:未提及项保持默认值不做改动,下同。 ↩︎

评论