我正在尝试通过vpn隧道路由IPv6流量。这样,我应该能够在不支持IPv6的网络中使用IPv6。
我有一个分配了IPv6块的VPS。我想用于openvpn客户端的部分代码块。我想到的范围是2001:db8::111:800:0/112
(前缀是匿名的),因为openvpn仅支持/ 64和/ 112作为子网。
通过隧道的IPv6已经可以正常工作了,我可以从客户端ping服务器(2001:db8::111:800:1
),也可以在服务器(2001:db8::111:100:100
和2001:db8:216:3dfa:f1d4:81c0
)上进行接口。
但是,当尝试从客户端ping google.com时,我没有响应(ping超时)。为了调试此问题,我使用tcpdump捕获了服务器上的流量,并且可以看到ping数据包发出了,但是没有回信。将日志规则添加到ip6tables可以看到相同的数据包,但是没有任何结果。
我使用了一个在线traceroute工具,该工具从服务器获取超时。我还尝试直接在接口上设置ip,这确实导致ip(2001:db8::111:800:1001
)可以访问,因此我认为这是路由问题。
我已通过启用了ipv6转发/proc/sys/net/ipv6/conf/all/forwarding
。ip6tables具有允许所有链条使用的策略。
我的问题是,Linux究竟需要什么来接受未分配给接口的ip的数据包并进一步路由它?仅存在的一条路线似乎还不够。
这是我的客户端和服务器的设置。如果需要更多信息,请告知。
客户
# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1001/112 scope global
valid_lft forever preferred_lft forever
# ip -6 routes
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2000::/3 dev tun0 metric 1024
服务器
# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic
valid_lft 86254sec preferred_lft 14254sec
inet6 2001:db8::111:100:100/128 scope global
valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1/112 scope global
valid_lft forever preferred_lft forever
# ip -6 route
2001:db8::111:100:100 dev eth0 proto kernel metric 256
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2001:db8::/64 dev eth0 proto kernel metric 256 expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0 proto ra metric 1024 expires 1594sec
TRACE
目标(此处可能不多)ip neighbour
和ip route get
。另外,请指定谁是ping google.ca
。
POSTROUTING ... MASQUERADE
在nat
表中寻找。但是我不确定我是否完全理解。您是否在尝试隧道IPv6流量?如果是,您是否设置了相应的设施?-p ipv6
IPv4(!)规则中是否允许数据包?