我在数据中心有一台具有原生 IPv6 连接的服务器。(我有一个 /48 块可供使用。)
我想将此服务器用作 openvpn 上的 ipv6 隧道服务器,但无法使其完全正常工作。
我的服务器:Linux,Centos 5.2 eth0 双栈 ipv4/ipv6
ip addr list:
eth0
inet aa.bb.cc.dd/24 (my global IP address)
inet6 2001:aaaa:bbb::2/48 (2001:aaaa:bbb::1 is the default GW of my ISP)
sit2
link/sit 10.8.0.1 peer 10.8.0.2
inet6 2001:aaaa:bbb:2::1/64
tun0
inet 10.8.0.1 peer 10.8.0.2/32
我的客户:Mac OS 10.6
tun0: 10.8.0.2 --> 10.8.0.1
gif0 2001:aaaa:bbb:2::2 --> 2001:aaaa:bbb:2::1 prefixlen 128
路由到默认网关 2001:aaaa:bbb:2::1(我的服务器在 sit 接口上的 ip)
我认为 mac 端没问题,因为到 ipv6.google.com 的 traceroute6 给出 2001:aaaa:bbb:2::1 作为下一跳,但它在那里停滞了。从服务器 ping ipv6.google.com 成功了。Ip6tables 已关闭,我确实向 /proc/sys/net/ipv6/conf/all/forwarding 回显了“1”。
ip6tables -L 的输出:
ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
sysctl -a |grep forward|grep ipv6 的输出:
net.ipv6.conf.sit2.forwarding = 1
net.ipv6.conf.eth1.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.lo.forwarding = 1
是什么阻止我的路由器在两个接口之间转发数据包?
答案1
将此 /48 空间内的 /64 放置在另一个路由器(您自己的隧道箱)后面是行不通的,因为您的 ISP 的路由器不会将此 /64 的流量路由回您的隧道箱,而是希望主机直接位于本地子网中。
您的 ISP 不应该在链接上放置 /48,而应该使用 /64。
您要么需要执行一些代理 arp 魔法(我没做过,不会这么做),要么告诉您的 ISP 在链接上放置一个 /64,例如 /48 中的第一个 /64。然后,您的 ISP 还必须通过隧道服务器添加一条到 /48 其他部分的路由。(我做过,在我的 ISP 主机托管中运行过)。一种可能性是要求将 /48 内的 /56 路由到您的隧道盒,这样您就可以创建在另一端有一个或多个 /64 的隧道。对于隧道本身,您也可以使用 /56 中的 /64,或者使用一个 /64 和一个类似 /80 的东西作为隧道本身。
(注意:2001:A000::/20 是 APNIC 使用的地址空间,如果您想隐藏您的实际地址,最好使用 2001:db8::/32 之类的地址范围,该地址范围用于文档目的)
答案2
这个问题很老了,但我在 2023 年的今天遇到了完全相同的问题,并且一直在努力寻找解决方案。我可以通过安装 ndppd 并将其配置为自动模式来使路由工作。此路由器设置的配置应如下所示:
proxy eth0 {
rule 2001:aaaa:bbb::2/48 {
auto
}
}
有关 ndppd 配置的更多详细信息 ndppd 配置手册
答案3
我遇到了和他描述的一模一样的问题。我确实必须使用 ip 设置 arp 代理。还要检查您的路由,看看它是否将您的服务器用作网关,而不仅仅是接口。