Squid 的 IPv4 客户端与 IPv6 目标:分开的策略
IPv4 客户端可以通过 Squid 访问 IPv6 网站。在选择仅限 IPv6 的策略之前,请区分目标限制、源 ACL 和地址选择。
可以接受来自 IPv4 的客户端,并通过 IPv6 访问其请求的网站。这些是不同的连接。面向网站一侧的策略不应自动拒绝 IPv4 客户端。
把目标地址族拒绝与 src ipv4 组合在一起的示例中,陷阱就在这里:源 ACL 改变的是谁可以连接,而不只是允许哪些网站连接。
明确预期的限制
对于支持相关 IP ACL 的 Squid 版本,目标地址族规则可以使用 dst ipv4 来识别 IPv4 目标。应把这些规则与现有的身份验证和目标权限结合起来;不要追加一条绕过它们的宽泛 IPv6 放行规则。
ACL 参考区分源类型和目标类型。这是一种限制,而不是自动转换服务。即使机器本可以通过 IPv4 访问某个仅支持 IPv4 的网站,该网站也可能变得不可用。
绑定出站 IPv6 地址也不是完整的执行策略。源选择、允许的目标地址族、DNS 应答以及实际网络可达性都有影响。要明确决定是否可以接受回退到 IPv4。
修改 forwarded_for 并不能解决这个问题。它影响的是 HTTP 头,而不是代理 TCP 连接的地址族。同样,IPv6 DNS 解析器也不保证它应答的每个名称都有 IPv6 目标。
在采用大型旧配置之前,请检查特定版本的行为。特别是:在 Squid 5 到 7 中,dns_v4_first 并不是受支持的地址族优先开关。能够精确描述的策略,比一组互不相关的 IPv6 设置更容易验证。