Problem
假如我想透過ping6檢查一個ipv6的主機是否還活著,我可能需要注意些什麼?
Link-Local
從許多網路文章都可以知道,ping FE80::/64(link-local)位置必須加上網卡名稱:
ping6 fe80::28e8:eeea:c9c2:4f04%eno1 ping6 fe80::28e8:eeea:c9c2:4f04 -I eno1
而ping非link-local如Global或Unique的位置不需要加網卡名稱:
ping6 2a00:1450:8003::69
對programmer來說,使用相同方式會比較好維護,因此指令都加上網卡名稱可能是個方法。然而,為了方便使用者使用,有沒有可能不需讓使用者提供網卡名稱呢? 是否程式可以自己嘗試所有網卡名稱,來告訴使用者目標機器是否還活著呢? 我的意思是指,假設有網卡eno1與eno2,是否可能透過以下指令,來告訴使用者 fe80::28e8:eeea:c9c2:4f04這台機器活著呢?
ping6 fe80::28e8:eeea:c9c2:4f04%eno1 ping6 fe80::28e8:eeea:c9c2:4f04%eno2
這方法最大的問題在於,如果兩個網段都存在著相同的IPv6位置,就會誤判。我有兩台主機,網路設定如下:
Linux:
可以得知,如果使用每張網卡都ping的方式,的確有可能會發生誤判的情形。因此,有幾個做法:
- 忽略這種會重複的情況。畢竟位置這麼多,重複機率極低。PRTG和opManager應該都是使用這種模式。
- 根據網卡去管理。就我所知,華為eSight在使用之前,會先選擇管理的網卡。
執行指令與參數
在比較舊版本的Linux中,是無法使用ping -6,因此建議直接使用ping6。此外,我在CentOS7.3曾發生過-I參數無效的情形(link),因此建議使用%去傳遞管理網卡名稱。
ping6 [位置]%[網卡名稱]
留言
張貼留言