我有一个 VPS,已分配 /64 IPv6 地址块。我正尝试从家里的 pfSense 路由器部署 6in4 隧道,并能够通过该隧道访问 IPv6 地址。
我成功启动了网关,但无法从我的 pfSense 盒子 ping 除 /64 之外的任何其他 IP。但从 VPS 进行 ping 可以。
这是我的 /etc/network/interfaces 配置 -
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 123.456.xxx.yyy
netmask 24
gateway 123.456.xxx.1
dns-nameservers 8.8.8.8 8.8.4.4
iface eth0 inet6 static
address aaaa:bbbb:my:ipv6::1
netmask 48
gateway aaaa:bbbb::1
auto tunnel0
iface tunnel0 inet6 v4tunnel
address aaaa:bbbb:my:ipv6::9
netmask 64
endpoint 66.abc.def.20
up ip -6 route add aaaa:bbbb:my:ipv6::/64 via aaaa:bbbb:my:ipv6::10
pre-up iptables-restore < /etc/iptables/rules.v4
pre-up ip6tables-restore < /etc/iptables/rules.v6
以下是 v4 的 iptables 规则
iptables -I INPUT -p 41 -s 66.abc.def.20 -j ACCEPT
以下是 v6 的 ip6tables 规则
ip6tables -I FORWARD -i tunnel0 -j ACCEPT
ip6tables -I FORWARD -o tunnel0 -j ACCEPT
我还在 /etc/sysctl.conf 中添加了以下几行
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.eth0.accept_ra=2
我的 pfSense 路由器上的隧道端点是 aaaa:bbbb:my:ipv6::10。
答案1
据我了解,您的连接如下所示 - 子网 1 是 Vultr 的全局 /48,子网 3 将是您自己的 BGP 公告地址空间:
[Vultr router] ---subnet 1--- [Your VPS] ---subnet 2--- [pfSense] ---subnet 3--- <LAN>
首先,没有在所有三个子网上使用相同的 /64 前缀很有意义——当您这样做时,您只是向路由器发出矛盾的指令。
事实上,这个前缀实际上并没有路由到您的 VPS,这并没有起到什么帮助作用;Vultr 将其视为在线 /48 的不可分割块。因此,当 Vultr 的路由器尝试连接aaaa:bbbb:my:ipv6::10
(您的 pfSense)时,它并不知道数据包应该发送到您的 VPS - 它认为该地址是在线的,并尝试使用 ND(ARP)发现它。
有一些黑客技术可以实现这一点(例如 ND/ARP 代理),但你真的需要它吗?不需要,因为你有足够的 IP 空间。
因此,从 BGP 通告的块中取出一个 /64(例如,如果你拥有2001:db8:12::/48
,那么2001:db8:12:ffff::/64
将是一个常见的选择)并配置那作为隧道前缀。