在 pf 防火墙中,pf.conf 手册页“参数”部分指出"protocol"
中的任何内容/etc/protocols
,并且它与"address family"
( "<af>"
) 不同,后者是 inet 或 inet6。/etc/protocols
反过来,将“IPv6”作为协议包括在内,并且在基于 BSD 的应用程序中(例如 pfSense 防火墙),IPv6 有时被列为与 IP 系列不同的协议(例如在 NAT 规则定义中)。
但 IPv6不是tcp/udp/icmp 意义上的协议。IPv4/IPv6 作为两个 IP 地址系列(底层传输)和许多传输协议,在逻辑和功能上存在明显区别。之内IPv4/IPv6。
(如果是的话,那么nat on em1 inet proto ipv6 from 1.2.3.4 to any -> 5.6.7.8 port 2000:2999
和block drop in inet proto ipv6 from 1.2.3.4 to any
将有意义,并且与nat on em1 inet proto tcp from 1.2.3.4 to any -> 5.6.7.8 port 2000:2999
和具有可比性block drop in inet proto tcp from 1.2.3.4 to any
)
IPv6 何时才有意义或用于 PF 规则中的“协议”字段,而不是将其指定为地址系列?(NAT 几乎总是仅用于 IPv4,这与此有什么关系吗?)
答案1
IPv6是TCP/UDP/ICMP 之类的协议。虽然它们在不同的层上工作,但没有什么这会阻止您在 IP 之上分层 IP 以获得简单的类似 VPN 的隧道。(将其与 IP 内部的 GRE 内部进行比较。)因此,IPv4 和 IPv6 都有协议编号分配 - 嵌套的 IPv4 数据包为“协议 4”,IPv6 为“协议 41”。
更具体地说,IPv6-over-IPv4 也称为“6合4”或“proto41”,一种常见的过渡机制用于通过仅 IPv4 网络从隧道提供商获取 IPv6 连接。(Hurricane Electric 是其中一种常用的;还有使用任播中继的自动“6to4”。)
pfSense 具有文档配置这样的隧道——在 FreeBSD 中,这将使用gif(4)接口;在 Linux 上,使用sit 或 ipip。隧道提供商具有相同(但镜像)的配置,可解压内部 IP 数据包并将其转发到其本机 IPv6 网络。
与 GRE、L2TP(每个外部源/目的对只有一个隧道)、FOU、GUE(许多家用路由器不允许任何非 TCP 或 UDP 的端口转发)、或特殊 VPN 协议(无身份验证、无加密)相比,这不是最理想的隧道方法。然而,它是最簡單可能的隧道以及开销最小的隧道(仅 20 字节)。
必读“盗梦空间”参考:IPv4 要求最小 MTU 为 68 字节,而 IPv6 则将其提升至 1280 字节。默认以太网 MTU 为 1500,因此 IPv4 隧道的最大堆叠层数约为 70 层,而 IPv6 隧道的最大堆叠层数约为 5 层。
答案2
因为 Pf 本身并不工作在通道层。例如,它不会拦截 RAW 套接字通信、ARP 通信等等。
根据其设计,它已经处于网络级别。