Linux-Networking

SIOCADDRT:在 IPv6 中添加路由時沒有到主機的路由

  • November 16, 2018

我有奇怪的問題。我在 RHEL-7.2 上有一些伺服器,因為我無法添加路由。

這個路線加法是我做過千百次的事情。我得到的錯誤是NO-Route to host這有點奇怪。


我在路線添加中遇到以下錯誤#

route -A inet6 add 1203:900:223:3524:21::/112 gw 1203:270:713:3214:34::1
SIOCADDRT: No route to host

以下是我設備的輸出#

[root@localhost ~]# ifconfig eth2

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

       inet6 1203:270:713:3214:34::12  prefixlen 112  scopeid 0x0<global>
       inet6 fe80::250:56ff:feaf:3ab7  prefixlen 64  scopeid 0x20<link>
       ether 00:50:56:af:3a:b7  txqueuelen 1000  (Ethernet)
       RX packets 23405  bytes 1429434 (1.3 MiB)
       RX errors 0  dropped 22220  overruns 0  frame 0
       TX packets 4129  bytes 352750 (344.4 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

網關 IP 可達#

[root@localhost ~]# ping6 1203:270:713:3214:34::1
PING 1203:270:713:3214:34::1(1203:270:713:3214:34::1) 56 data bytes

64 bytes from 1203:270:713:3214:34::1: icmp_seq=1 ttl=254 time=0.678 ms

64 bytes from 1203:270:713:3214:34::1: icmp_seq=2 ttl=254 time=0.576 ms


--- 2405:200:613:3214:34::1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.576/0.627/0.678/0.051 ms

設備介面已啟動並執行##

[root@localhost ~]# ethtool eth2

Settings for eth2:

   Supported ports: [ TP ]
   Supported link modes:   1000baseT/Full 
                           10000baseT/Full 
   Supported pause frame use: No
   Supports auto-negotiation: No
   Advertised link modes:  Not reported
   Advertised pause frame use: No
   Advertised auto-negotiation: No
   Speed: 10000Mb/s
   Duplex: Full
   Port: Twisted Pair
   PHYAD: 0
   Transceiver: internal
   Auto-negotiation: off
   MDI-X: Unknown
   Supports Wake-on: uag
   Wake-on: d
   Link detected: yes

在這個主題上搜尋了很多。找不到解決方案 ROUTE-ADDITION-FAILURE。似乎與此主題無關。這個問題只出現在某些 RHEL 中,而不是在所有機器上。

以防萬一,有人在某處看到過這個問題。請回复,真的很有幫助。

據我所知,在最近的核心中,只有一點可以EHOSTUNREACH在 ipv6 路由添加上獲得。

https://elixir.bootlin.com/linux/v4.3/source/net/ipv6/route.c#L1922

/* IPv6 嚴格禁止使用非本地連結
地址作為下一跳地址。
否則,路由器將無法發送重定向。
它非常好,但在某些(罕見!)情況下
(SIT、PtP、NBMA NOARP 連結)很方便允許
一些例外。--ANK
*/

例外是,必須已經有一條到網關的 ipv6 路由。

grt = rt6_lookup(net, gw_addr, NULL, cfg->fc_ifindex, 1);

上面的這一行必須成功。

因此,這台主機上不同的情況很可能是它還沒有路由器通告配置的下一跳。網關仍然是由前綴確定的連結,因此可以通過 ping 訪問,但它不會自動成為路由,因此不能保證 rt6_lookup 會成功。

引用自:https://serverfault.com/questions/913461