LVS-TUN:ifconfig显示tunl0接口的错误和冲突?

Check_MK给我发了一封电子邮件,内容如下:

***** Nagios ***** Notification Type: PROBLEM Service: Interface 5 Host: foo Address: xyzt State: CRITICAL Date/Time: Fri May 3 10:02:40 ICT 2013 Additional Info: CRIT - [tunl0] (up) speed unknown, in: 3.39MB/s, out: 0.00B/s, out-errors: 100.00%(!!) = 0.1 

运行ifconfig ,我得到:

 tunl0 Link encap:IPIP Tunnel HWaddr inet addr:xyzt Mask:255.255.255.255 UP RUNNING NOARP MTU:1480 Metric:1 RX packets:92101704629 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:652 dropped:0 overruns:0 carrier:0 collisions:652 txqueuelen:0 RX bytes:18941091817671 (17.2 TiB) TX bytes:0 (0.0 b) 

注意错误和碰撞。 我知道碰撞字段的非零值表示networking拥塞的可能性。 但:

  1. 什么可能是确切的原因? 我如何解决问题?
  2. IPIP Tunnel接口有没有类似ethtool的?

modinfo ipip

 filename: /lib/modules/2.6.18-194.17.1.el5/kernel/net/ipv4/ipip.ko license: GPL srcversion: 288C625C7521D577F7AD9E4 depends: tunnel4 vermagic: 2.6.18-194.17.1.el5 SMP mod_unload gcc-4.1 module_sig: 883f3504ca37590565662cff69dd0be11277ff0a08d3a3... 

IP隧道表演

 tunl0: ip/ip remote any local any ttl inherit nopmtudisc 

更新于5月6日星期一10:05:01 ICT 2013

@Danila Ladner :通过Googlesearch,我发现这个链接与你有相同的意见:

我的隧道不工作:

ifconfig tunl<n>报告错误和冲突

你用ifconfig ,也许ifconfig ... pointopoint ...来build立你的隧道?

关掉它; 删除它; 用ip重新开始。

但是,请您进一步阐述一下吗?

@Sergey弗拉索夫

 tunl0 Link encap:IPIP Tunnel HWaddr inet addr:xyzt Mask:255.255.255.255 UP RUNNING NOARP MTU:1480 Metric:1 RX packets:81621711099 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:692 dropped:0 overruns:0 carrier:0 collisions:692 txqueuelen:0 RX bytes:16915649263419 (15.3 TiB) TX bytes:120 (120.0 b) 

我不明白为什么有2个来自tunl0接口的传输数据包? 我将设置一个事件处理程序来在collisions计数器增加时运行tcpdump 。 让我们拭目以待,看看会发生什么。


更新于5月7日星期二14:05:39 ICT 2013

@Danila Ladner :为了排除这种可能性,我试过了你的build议:

 ifdown tun0 modprobe -r ipip modprobe ipip ip addr add dev tunl0 xyzt/32 brd xyzt ip link set tunl0 up 

我在等着看问题是否解决了:

 tunl0 Link encap:IPIP Tunnel HWaddr inet addr:xyzt Mask:255.255.255.255 UP RUNNING NOARP MTU:1480 Metric:1 RX packets:19630041 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4083271398 (3.8 GiB) TX bytes:0 (0.0 b) 

作为量子指出,我build议他采取的隧道,如果它是用ifconfigbuild立,并用ip重build它。 就像我几年前在Centos 5内核2.6.25上遇到过类似的问题,在我的情况下,它解决了这个问题,但是我也在IRC咨询networking人员和开发人员,为什么这是一个问题,因为我需要生产线上的路线并需要安排停机时间来核实它。 我不记得确切和迄今没有任何硬性的证据,但Kuznetsov(内核源的原始大贡献者build议用ip重build它,因为他已经看到了ifconfig问题。我希望这有助于量子解决他问题。

closures主题:所以,底线是我很笨,我使用了很多ifconfig ,只要继续处理旧的Solaris 8盒和bsd盒,很难切换到ip

ipip通道接口的collisions计数器在两种情况下增加:

  1. 如果封装的数据包的下一跳是相同的隧道接口: ipip.c line 437 。

  2. 如果封装的数据包的下一跳的pathMTU小于68: ipip.c line 447 。

这两种情况通常只有在被封装的stream量回到相同的隧道时才会发生(第一种情况是直接循环,第二种情况是当pathMTU由于一些更复杂的循环而减less到零时发生由第一条件检测)。 一个可能的原因是封装数据包的正常路由暂时closures,这些数据包的下一个最佳路由恰好是隧道本身,导致了一个循环。

然而,在LVS-TUN情况下,根本不应该发送到隧道(在这种情况下,隧道接口是只接收的),除非有些被误导的软件通过tunl0添加了不需要的路由。