问题

问题

问题

我有以下设置来访问 IPv4 和 IPv6 互联网

[RockyLinux 9                ]                         [pfSense                     ]
[GRE IPv6: fdfe:xxxx::1/64   ]<------ GRE tunnel ----- [GRE IPv6: fdfe:xxxx::1000/64] <---[LAN(IPv4 and IPv6)]
[Public IPv6: 2a0c:xxxx::xxxx]                                        |
              |                                                       |
              |                                                       |
              V                                                       V
        [IPv6 Internet]                                         [IPv4 Internet]

一般的想法是通过 pfSense 将 IPv6 网络流量传递到 RockyLinux 机器,然后 RockyLinux 应该伪装此流量并将其路由到公共 IPv6 网络(pfSense 无法使用)。虽然目前我只能从 pfSense 和 LAN 访问 RockyLinux 机器。如果我尝试连接到任何公共 IPv6 主机,RockyLinux 会响应ICMPv6: Destination Unreachable: Admin Prohibited

语境

  • RockyLinux 上的 GRE 隧道是通过 NetworkManager 设置的,尽管我尝试过使用命令进行设置ip,但没有任何变化
  • fdfe:xxxx::1pfSense 和 LAN 网络均响应良好,并且所有到公共 IPv6 主机的流量都被路由到它,因此 pfSense 和 LAN 上的路由设置正确
  • 可以从 RockyLinux 访问公共 IPv6 地址并且响应良好
  • Rocky Linux 已启用 IPv6 转发:
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.accept_ra = 2
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 1

已尝试过

笔记:在我的ip6tables每个链策略中,默认表和nat表都设置为ACCEPT

  • POSTROUTING我曾尝试在:中设置典型规则,ip6tables -t nat -A POSTROUTING -s fdfe:xxxx::/64 -j MASQUERADE但无效
  • 我清理并ip6tables尝试在不同的链上进行登录:
    • FORWARD在默认表中:记录所有应转发的数据包
    • PREROUTINGnat表中:还记录所有数据包
    • POSTROUTING表中nat:未记录任何数据包
  • 我也尝试过使用firewalld
    • firewall-cmd --zone=internal --add-rich-rule='rule family=ipv6 source address=fdfe:xxxx::/64 masquerade' --permanent
    • firewall-cmd --zone=internal --add-interface=gre0 --permanent

虽然这些都没有改变行为:RockyLinux 拒绝转发任何 IPv6 数据包,gre0并使用上述任何解决方案eth0进行响应ICMPv6: Destination unreachable: Admin prohibited

答案1

这可能是由于您的内核禁用了 IPv6 伪装功能。这是一个构建时功能开关: https://www.kernelconfig.io/config_nf_nat_masquerade_ipv6?q=&kernelversion=5.15.116&arch=x86 至少在我拥有的基于 debian 的系统上没有设置。要检查,请在您的内核配置中搜索CONFIG_NF_NAT_MASQUERADE_IPV6。您的内核配置通常在/boot/config-$(uname -r)或 处可用/proc/config.gz。如果内核配置不包含标志CONFIG_NF_NAT_MASQUERADE_IPV6,则需要获取不同的内核或自行编译一个启用该选项的内核。

可以说更好的解决方案(因为这就是 IPv6 的使用方式,您不需要为其定制内核,也不需要执行 NAT 并跟踪 RockyLinux 上的连接状态)是为您的 pfSense 分配一个全局唯一的 IPv6 地址/子网。由于 pfSense 通常用作路由器,我怀疑您不仅希望 pfSense 系统本身具有 IPv6 连接,还希望其后面的 LAN 上的机器也具有 IPv6 连接。如果您很幸运并且您的 ISP(对于 RockyLinux)正确使用 IPv6,您可以为 LAN 委派一个前缀(前缀长度为 /64 或更短),并将该前缀路由到 pfSense,以便 pfSense 可以在 LAN 上宣传它。搜索“IPv6 前缀委派”以了解如何设置。并非所有网络管理工具都支持此功能,但至少systemd-networkddhcpcd

如果您运气不好并且“仅”从您的 ISP 获得一个 /64,您仍然可以采用较小的子网(较长的前缀,即 /68)并将其用于 pfSense 及其后面的 LAN,但您需要使用 DHCPv6 或静态 IPv6 地址,因为路由器广告的标准机制不适用于小于 /64 的网络。

如果你更加不走运,你的 ISP 只为你提供了一个 IPv6 地址(有提供虚拟机出租的托管商会这样做,也许你的 RockyLinux 就是这样的例子),你要么重新编译自己的内核以支持 IPv6 伪装,要么转移到其他 ISP 以获得 IPv6(比如 tunnelbroker.net)。

相关内容