Debian 9 上的 6in4 隧道

Debian 9 上的 6in4 隧道

我有一个 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将是一个常见的选择)并配置作为隧道前缀。

相关内容