这让我很困惑。
设置:Linux(openSUSE 15.1,内核 4.12.14)作为我本地网络上的网关运行。我有一个与 Hurricane Electric (HE) 建立的 IPv6 隧道,运行良好。最近(对于“最近”的某些定义——我不知道它何时开始发生),来自网关本身的传出 IPv6 流量无法到达任何地方。来自我网络内部的传出 IPv6 流量通过同一网关,运行良好。
++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++
| | | |
| local | | linux |
| machine |-----|(eth1) gateway (eth0)|---+------ (Internet)
| (xxxx:yyyy:zzzz:wwww::2) | | | ^
++++++++++++++++++++++++++++ | (he-ipv6)|->-^
| (tunnel ip: xxxx:yyyy:a:kkkk::2) |
| (routable ip: xxxx:yyyy:zzzz:wwww::1) |
+++++++++++++++++++++++++++++++++++++++++
local machine
和某个任意目的地(例如:ipv6.google.com)之间的流量通过linux gateway
来回传输,一切正常。当我尝试从 到达同一目的地时linux gateway
,它会超时。TCP 流量会发生这种情况(我还没有尝试过 UDP)。ICMP 流量(带有选项的 ping 和 traceroute )在和-I
之间都可以正常工作。考虑到所有这些因素,我认为对于我的 HE 设置,路由工作正常。local machine
linux gateway
然后我用 tcpdump 查看了流量。尝试从 连接时,我注意到了一些问题linux gateway
:校验和报告为不正确(我认为这可能不是问题,因为我已打开 tcp 校验和卸载),MSS 设置为 1420(而从 连接时为 1440 local machine
),使用的源 IP 是隧道本身设置的 IP,这是 HE 为本地和远程端分配的 IP 地址。我有几个来自 HE 的可路由 IP 地址段,由于我不确定接口 IP 是否可路由,我决定配置我的默认路由(通过隧道)以使用我的一个可路由 IP 地址(例如:xxxx:yyyy:zzzz:wwww::1)。不幸的是,这似乎没有什么区别。
总结一下:
- 从我的任意源 IP(xxxx:yyyy:zzzz:wwww::1、xxxx:yyyy:zzzz:wwww::2 或 xxxx:yyyy:a:kkkk::2)执行 ping 操作均正常。使用 ICMP(
-I
选项)的跟踪路由似乎也有效。 - 来自 (xxxx:yyyy:zzzz:wwww::2) 的 TCP 流量
local machine
运行正常。 - TCP 流量来自
linux gateway
(使用默认路由,将源设置为 xxxx:yyyy:zzzz:wwww::1 或 xxxx:yyyy:a:kkkk::2)不起作用。默认路由是ip -6 route add default dev he-ipv6
使用 xxxx:yyyy:a:kkkk::2 的命令(默认行为)或设置的ip -6 route add default dev he-ipv6 src xxxx:yyyy:zzzz:wwww::1
。
我确实有一些防火墙规则,但即使刷新了所有规则,事情仍然没有奏效。链 INPUT 和 OUTPUT 为空,过滤器和 nat 表中所有地方的默认策略都设置为 ACCEPT。
# ip6tables -nvL
Chain INPUT (policy ACCEPT 10 packets, 920 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 840 bytes)
pkts bytes target prot opt in out source destination
# ip6tables -nvL -t nat
Chain PREROUTING (policy ACCEPT 1465 packets, 199K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 196 packets, 39942 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 23681 packets, 2588K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 24950 packets, 2747K bytes)
pkts bytes target prot opt in out source destination
IPv6 路由表现在linux gateway
如下所示:
# ip -6 route
xxxx:yyyy:a:kkkk::/64 dev he-ipv6 proto kernel metric 256 pref medium
xxxx:yyyy:wwww:zzzz::/64 dev eth1 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth1 proto kernel metric 256 pref medium
fe80::/64 dev br-48888a1d96fc proto kernel metric 256 pref medium
fe80::/64 dev veth3d7d8bf proto kernel metric 256 pref medium
fe80::/64 dev vethda6ce4c proto kernel metric 256 pref medium
fe80::/64 dev he-ipv6 proto kernel metric 256 pref medium
default dev he-ipv6 metric 1024 pref medium
各种接口的链接信息linux gateway
:
# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::20c:29ff:fe46:a11a/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 xxxx:yyyy:zzzz:wwww::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:a124/64 scope link
valid_lft forever preferred_lft forever
6: br-48888a1d96fc: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 fe80::42:28ff:fe32:fc18/64 scope link
valid_lft forever preferred_lft forever
9: veth3d7d8bf@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 fe80::4c54:d8ff:fe36:6b86/64 scope link
valid_lft forever preferred_lft forever
11: vethda6ce4c@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 fe80::b0a7:74ff:fed6:755f/64 scope link
valid_lft forever preferred_lft forever
13: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 state UNKNOWN qlen 1000
inet6 xxxx:yyyy:a:kkkk::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::327d:f340/64 scope link
valid_lft forever preferred_lft forever
IPv6隧道的具体配置:
# ip addr show dev he-ipv6
13: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit a.b.c.d peer 216.218.226.238
inet6 xxxx:yyyy:a:kkkk::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::327d:f340/64 scope link
valid_lft forever preferred_lft forever
# ip addr show dev sit0
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
IP 地址 abcd 是与 eth0 关联的静态 IPv4 地址。
我确信我忽略了一些显而易见的东西,但我看不出来。我忽略了什么?
谢谢!