Problem
在linux中,ping ipv6的主機可以使用ping6或ping -6。可以從許多網路文章中得知,ping FE80::/64(link-local)位置必須加上網卡名稱,例如:
ping6 fe80::28e8:eeea:c9c2:4f04%eno1 ping6 fe80::28e8:eeea:c9c2:4f04 -I eno1
否則會出現錯誤訊息connect: invalid argument;然而在CentOS/RHEL7.3系統上,卻不需要加上網卡名稱就能夠執行指令。本篇文章主要分享我針對這問題的實驗結果。
How to resolve?
首先我透過ping6 -V指令,查詢不同linux中ping的版本:
可以發現RHEL7.3使用了20160308的版本,這有可能是新版本支援自動偵測的功能。
後來用yum更新了Centos7.2中的iputils套件到20160308-10,卻一樣需要加上網卡名稱才能ping link-local;最後注意到如果使用RHEL/Centos7.3自帶的iputils rpm,就不需要加網卡名稱。我仔細看發現它的版本是20160308-8。假如是自動偵測的話,為什麼較新的版本卻沒有這樣的功能呢?
後來我在測試多網卡的情況時,發現了以下現象:
ping6 fe80::1c23:4c59:72c5:f929%eno1 -c 2
因此我推測在20160308那天,應該build了20160308-8與20160308-10兩個版本,而20160308-8是有問題的。這只是推測,對我們來說,我只需要一個可靠的方法就好;因此,對於ping ipv6比較安全的作法我會使用%而不使用-I:
ping6 [ipv6_addr]%[nic_name]
留言
張貼留言