fping:SUSE Linux でデバイスの一発死活監視に便利

SUSE Linux でデバイスの死活監視を簡単に実行するには fping コマンドが便利です。

# ping xxx.xxx.xxx.xxx

を IP アドレス や DNS 名を頼りに実行するよりも、

# fping -g xxx.xxx.xxx.xxx xxx.xxx.xxx.yyy

と範囲指定ができるので、一括してサブネット上のデバイスの死活状態を把握することができます。IPアドレスのテキストリストを読み込んで、実行できるので、重要なデバイスを登録しておけば、コマンド一発でデバイスの稼働状態を確認できます。

ここでは SUSE Linux Enterprise 15 (SLE15) での fping の「ありそうな使い方」を切り取って説明しています。


※ fping はディストリビューションによって使い方が異なる場合があります。






- fping パッケージのインストール -

デフォルトではインストールされません。 SUSE Linux では zypper yast でインストールします。ちなみに、zabbix をインストールした場合、zabbix が fping を使うため、デフォルトでインストールされます。

sles15:~ #fping
If 'fping' is not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf fping

sles15:~ #

# yast > Software > Software Manegement > で fping "search" 、Space キーでチェックして Accept.


テキスト yast の場合
fping:SUSE Linux でデバイスの一発死活監視に便利_a0056607_17534687.png


GUI 版 yast2 の場合
fping:SUSE Linux でデバイスの一発死活監視に便利_a0056607_18512074.png
※ fping はディストリビューションによって使い方が異なる場合があります。必ず -- help でオプションを確認します。

sles15:~ # whereis fping
fping: /usr/sbin/fping /usr/share/man/man8/fping.8.gz
sles15:~ #
sles15:~ # ls /usr/sbin/fping -al
-rwxr-xr-x 1 root root 44472 May 26 2018 /usr/sbin/fping
sles15:~ #

/usr/sbin にインストールされるため、 root で実行するか、フルパス指定します。
※ fping はディストリビューションによって使い方が異なる場合があります。必ず -- help でオプションを確認します。

sles15:~ # fping --help
Usage: fping [options] [targets...]

Probing options:
-4, --ipv4 only ping IPv4 addresses
-6, --ipv6 only ping IPv6 addresses
-b, --size=BYTES amount of ping data to send, in bytes (default: 56)
-B, --backoff=N set exponential backoff factor to N (default: 1.5)
-c, --count=N count mode: send N pings to each target
-f, --file=FILE read list of targets from a file ( - means stdin)
-g, --generate generate target list (only if no -f specified)
(give start and end IP in the target list, or a CIDR address)
(ex. fping -g 192.168.1.0 192.168.1.255 or fping -g 192.168.1.0/24)
-H, --ttl=N set the IP TTL value (Time To Live hops)
-I, --iface=IFACE bind to a particular interface
-l, --loop loop mode: send pings forever
-m, --all use all IPs of provided hostnames (e.g. IPv4 and IPv6), use with -A
-M, --dontfrag set the Don't Fragment flag
-O, --tos=N set the type of service (tos) flag on the ICMP packets
-p, --period=MSEC interval between ping packets to one target (in ms)
(in loop and count modes, default: 1000 ms)
-r, --retry=N number of retries (default: 3)
-R, --random random packet data (to foil link data compression)
-S, --src=IP set source address
-t, --timeout=MSEC individual target initial timeout (default: 500 ms,
except with -l/-c/-C, where it's the -p period up to 2000 ms)

Output options:
-a, --alive show targets that are alive
-A, --addr show targets by address
-C, --vcount=N same as -c, report results in verbose format
-D, --timestamp print timestamp before each output line
-e, --elapsed show elapsed time on return packets
-i, --interval=MSEC interval between sending ping packets (default: 10 ms)
-n, --name show targets by name (-d is equivalent)
-N, --netdata output compatible for netdata (-l -Q are required)
-o, --outage show the accumulated outage time (lost packets * packet interval)
-q, --quiet quiet (don't show per-target/per-ping results)
-Q, --squiet=SECS same as -q, but show summary every n seconds
-s, --stats print final stats
-u, --unreach show targets that are unreachable
-v, --version show version
sles15:~ #

- まずは、特定のアドレス範囲を指定 -

範囲指定のため -g オプションで xx.xx.xx.xx から xx.xx.xx.yy までを指定します。

sles15:~ # fping -g 192.168.1.1 192.168.1.6
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.6 is alive
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.5
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.5
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.5
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.5
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.4
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.4
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.4
ICMP Host Unreachable from 192.168.1.240 for ICMP Echo sent to 192.168.1.4
192.168.1.4 is unreachable
192.168.1.5 is unreachable
sles15:~ #

- ICMP Host Unreachable を表示させない -

2>/dev/null を付けて標準エラー出力を null にリダイレクト

※ 2> の間はスペースを入れません。

sles15:~ # fping -g 192.168.1.1 192.168.1.6 2> /dev/null
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.6 is alive
192.168.1.4 is unreachable
192.168.1.5 is unreachable
sles15:~ #

- サブネット全体を指定 -

-g xx.ss.xx.xx/mm でサブネットマスクを指定しサブネット全体の動作状態を確認します。

※ 2> にはスペースが入らない!

sles15:~ # fping -g 192.168.1.1/24 2>/dev/null
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.6 is alive
192.168.1.22 is alive
192.168.1.24 is alive
192.168.1.35 is alive
192.168.1.41 is alive
192.168.1.44 is alive
192.168.1.34 is alive
192.168.1.47 is alive

: 中略

192.168.1.4 is unreachable
192.168.1.5 is unreachable

: 以下略


- 生きている端末だけを表示 -

”alive” を grep してみた。

sles15:~ # fping -g 192.168.1.1/24 2>/dev/null | grep alive
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.6 is alive
192.168.1.22 is alive
192.168.1.24 is alive
192.168.1.35 is alive
192.168.1.37 is alive
192.168.1.41 is alive
192.168.1.44 is alive
192.168.1.34 is alive
192.168.1.47 is alive
192.168.1.49 is alive
192.168.1.45 is alive
192.168.1.46 is alive
192.168.1.217 is alive
192.168.1.221 is alive
192.168.1.232 is alive
192.168.1.233 is alive
192.168.1.234 is alive
192.168.1.235 is alive
192.168.1.236 is alive
192.168.1.237 is alive
192.168.1.239 is alive
192.168.1.240 is alive
sles15:~ #


- 特定のホストリストに fping してみる -

事前にホストリストのテキストを作り、 -f で指定する

-f hostlist.txt

例えば、「構内LANから、インターネットに接続できない」などの場合、hostlist.txt に経由するルータ、スイッチ、ISPのDNSインターネットサービスを記述して、おけば、いつでもすぐに接続障害が判る(といいな)な作業ができます。例えば経由するファイアウォール、ルータ、Google の DNS が動いていて、インターネットにつながるかどうかは、hostlist ファイルはこんな感じでしょうか。

sles15:~ # cat hostlist.txt
192.168.1.1
192.168.1.2
192.168.1.3
192.168.3.2
192.168.3.1
8.8.8.8
www.google.com
www.yahoo.co.jp

sles15:~ # fping -f hostlist.txt
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.3.2 is alive
192.168.3.1 is alive
8.8.8.8 is alive
www.google.com is alive
www.yahoo.co.jp is alive
sles15:~ #
sles15:~ # fping dns2 dns3 nas1
dns2 is alive
dns3 is alive
nas1 is alive
sles15:~ #


- 最終ステータスの表示 -

-s オプションで合計のステータスを合わせて表示します。

sles15:~ # fping -g -s 192.168.1.0 192.168.1.10
192.168.1.0: error while sending ping: Permission denied
192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.6 is alive
192.168.1.0: error while sending ping: Permission denied

:中略

192.168.1.8 is unreachable
192.168.1.9 is unreachable
192.168.1.10 is unreachable

11 targets
4 alive
7 unreachable
0 unknown addresses

7 timeouts (waiting for response)
32 ICMP Echos sent
4 ICMP Echo Replies received
24 other ICMP received

0.23 ms (min round trip time)
0.34 ms (avg round trip time)
0.43 ms (max round trip time)
4.175 sec (elapsed real time)

sles15:~ #

- おまけ -

従来の arp -a コマンドは ip n に置き換わりました。

fping を実行してすぐに ip n を実行すると、セグメント内の各デバイスの MAC アドレスが判ります。もしアセット管理でMACアドレスを登録済のデバイス以外に、見慣れない MAC アドレスがあれば、許可なく持ち込まれたデバイスだった.....

なんて事がすぐわかると便利なんですけどね。

sles15:~ # arp -a
If 'arp' is not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf arp

sles15:~ # ip n
192.168.1.9 dev br0 FAILED
192.168.1.46 dev br0 lladdr 5c:59:48:8c:35:2c STALE
192.168.1.5 dev br0 FAILED
192.168.1.237 dev br0 lladdr 00:08:9b:bd:11:7e STALE
192.168.1.1 dev br0 lladdr cc:e1:d5:ca:f6:da STALE
192.168.1.233 dev br0 lladdr 52:54:00:5c:0e:0a STALE

:中略

192.168.1.217 dev br0 lladdr 52:54:00:22:df:39 STALE
192.168.1.35 dev br0 lladdr 00:23:81:17:47:e2 STALE
192.168.1.22 dev br0 lladdr 00:16:3e:f5:f5:f5 STALE
sles15:~ #

by islandcenter | 2019-12-26 18:15 | SUSE | Comments(0)