问题
我有以下设置来访问 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::1
pfSense 和 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
在默认表中:记录所有应转发的数据包PREROUTING
在nat
表中:还记录所有数据包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-networkd
有dhcpcd
。
如果您运气不好并且“仅”从您的 ISP 获得一个 /64,您仍然可以采用较小的子网(较长的前缀,即 /68)并将其用于 pfSense 及其后面的 LAN,但您需要使用 DHCPv6 或静态 IPv6 地址,因为路由器广告的标准机制不适用于小于 /64 的网络。
如果你更加不走运,你的 ISP 只为你提供了一个 IPv6 地址(有提供虚拟机出租的托管商会这样做,也许你的 RockyLinux 就是这样的例子),你要么重新编译自己的内核以支持 IPv6 伪装,要么转移到其他 ISP 以获得 IPv6(比如 tunnelbroker.net)。