愚蠢的错误导致所有这一切,阅读更新5
我正在尝试使用IPv6设置Linux路由器(LXC,3.10.0-123.el7.x86_64)。
提供者是赫茨纳,我有2个子网,一个/ 56和一个/ 64。 他们已经build立了路由到我的LL地址,我的默认网关是fe80 :: 1。
我在sysctl.conf中启用了ipv6和ipv4转发:
net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1
我configurationIPTables接受一切。
我知道ICMPv6是在IPv6中用于路由select的主要工具 – 所以不会被阻止;-)。 我还加了-A FORWARD -j ACCEPT 。
我已经将my / 56子网的第二个(:: 2)IPconfiguration到eth1,将/ 64的第二个(:: 2)configuration到eth0。
eth0是上行链路接口eth1是lan接口
所以现在到了主要的问题。
来自/ 56的ipv6地址的内部客户端不能ping通外部世界,但是数据包和响应正确地路由,直到我的路由器丢弃数据包而没有任何提示。
例如ping6 ipv6.google.com会导致超时
但在路由器的上行链路上,我得到:
20:43:13.350932 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 1, length 64 20:43:13.355143 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 1, length 64 20:43:14.350572 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 2, length 64 20:43:14.354609 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 2, length 64 20:43:15.350630 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 3, length 64 20:43:15.355072 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 3, length 64 20:43:16.350656 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 4, length 64 20:43:16.354748 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 4, length 64
在客户端上只有回显请求是可见的。
可能是什么问题呢? 有没有额外的设置,让我的路由器接受任何发送给它?
到目前为止,我只使用NAT,并且从未在我的Linux机器上完全布线。
感谢任何指针,我希望它只是一个简单的sysctl参数设置…
更新1
我用“subnet-2”replace了/ 56子网,用“subnet-1”replace了/ 64。
ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 61: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 subnet-1::2/64 scope global valid_lft forever preferred_lft forever inet6 fe80::216:2eff:fe01:1/64 scope link valid_lft forever preferred_lft forever 63: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 subnet-2::2/56 scope global valid_lft forever preferred_lft forever inet6 fe80::216:3eff:fe01:1/64 scope link valid_lft forever preferred_lft forever
ip -6 r
unreachable ::/96 dev lo metric 1024 error -101 unreachable ::ffff:0.0.0.0/96 dev lo metric 1024 error -101 unreachable 2002:a00::/24 dev lo metric 1024 error -101 unreachable 2002:7f00::/24 dev lo metric 1024 error -101 unreachable 2002:a9fe::/32 dev lo metric 1024 error -101 unreachable 2002:ac10::/28 dev lo metric 1024 error -101 unreachable 2002:c0a8::/32 dev lo metric 1024 error -101 unreachable 2002:e000::/19 dev lo metric 1024 error -101 subnet-1::/64 dev eth0 proto kernel metric 256 subnet-2::/56 dev eth1 proto kernel metric 256 unreachable 3ffe:ffff::/32 dev lo metric 1024 error -101 fe80::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth1 proto kernel metric 256 default via fe80::1 dev eth0 metric 1024
系统是up2date,除了内核(例如它没有加载),因为这将需要重新启动,我没有与当前的问题。 但是,如果这是3.10.0-123.13.2.el7的已知问题,我可以重新启动将其升级到3.10.0-229.14.1.el7。
更新2
tcpdump -i eth0 ip6
显示传入数据包
我添加了一个防火墙规则,例如
*mangle -A PREROUTING -j NFLOG
login到/ var / log / messages,但没有logging在那里!
更新3
Bridge "br0" Port "router.eth0" Interface "router.eth0" Port "br0" Interface "br0" type: internal Port "eth0" Interface "eth0" Bridge "br1" Port "db01.eth0" Interface "db01.eth0" Port "mail01.eth0" Interface "mail01.eth0" Port "br1" Interface "br1" type: internal Port "team1" Interface "eth3" Interface "eth2" Port "router.eth1" Interface "router.eth1"
更新4
我搞砸了,在界面上有错误的mac(长话短说 – 现在修复)
所以现在数据包被接受和转发,但是响应不会被发送到默认网关:
路由器:
22:09:22.638405 IP6 ping_ip > client_ip: ICMP6, echo request, seq 243, length 64 22:09:22.754936 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32 22:09:22.757001 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32 22:09:22.757044 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32 22:09:23.639651 IP6 ping_ip > client_ip: ICMP6, echo request, seq 244, length 64 22:09:23.756969 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32 22:09:23.759007 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32 22:09:23.759240 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32 22:09:24.640677 IP6 ping_ip > client_ip: ICMP6, echo request, seq 245, length 64
客户:
22:11:41.640978 IP6 ping_ip > client_ip: ICMP6, echo request, seq 382, length 64 22:11:41.640998 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 382, length 64 22:11:42.642993 IP6 ping_ip > client_ip: ICMP6, echo request, seq 383, length 64 22:11:42.643013 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 383, length 64
ip -6 neigh:
fe80::216:3eff:fe01:1 dev eth1 lladdr 00:16:3e:01:00:01 router STALE subnet-2::1:1 dev eth0 FAILED fe80::216:3eff:fe15:1 dev eth1 lladdr 00:16:3e:15:00:01 DELAY fe80::216:3eff:fe15:c dev eth1 lladdr 00:16:3e:15:00:0c STALE fe80::1 dev eth0 FAILED subnet-2::1:1 dev eth1 lladdr 00:16:3e:15:00:01 REACHABLE fe80::216:2eff:fe01:1 dev eth0 INCOMPLETE subnet-2::1:12 dev eth1 lladdr 00:16:3e:15:00:0c STALE subnet-1::2 dev eth0 FAILED
1:1失败的条目是在这里,因为我很快有eth0的地址来debugging之前的ping问题…
更新5
所以当改变mac时,我没有改变LL地址。 我不知道这两个地址是100%链接。
主要的问题是旧的路由器死了,我从那里复制LL地址没有改变相应的MAC – >它没有工作。
然后…把LL改回来(这是错误的),并改变了mac(分开几个小时分两步)。
对于其他任何人来说,L2 MAC和IPv6 LL地址都需要相应,并且它们需要与路由器发送的内容相匹配。
要debugging使用tcpdump -i eth0 ip6 -en那么你可以看到mac和ll地址,并将它们与你的接口进行比较,如果它们中的任何一个和Hetzner中configuration的路由地址不匹配,则什么都不起作用!
所以再次,对于那些阅读过的人来说,很抱歉,我不知何故错过了解释,它是在不同的路由器之前,我安装了这个,因为最后一个死亡。 明显的解决方法…
如果遇到包丢失的奇怪路由问题,请按照下列步骤操作:
ip l并记下MAC地址
tcpdump -en -i eth0 ip6 (或相应的接口)并比较它们,如果匹配的话都是好的
ip -6 a比较链接本地地址(范围本地)到您的mac地址(这里是一个计算器: http : //ben.akrin.com/?p=1347 ,有几个)
如果它仍然不工作,我想问题在于iptables,尽可能使用日志logging:)