zaco muraです。
先日 【ネットワーク基礎】arpの仕組み・種類 という記事を書きましたので、今回は続きとしてarpに関して実運用でのtipsを書きたいと思います。
そもそもarpって何?ということについては前記事を参照頂ければと思います。
前提
本記事では主にサーバエンジニアの方に向けた、arpに関するtipsです。arpそのものや一般論的な話ではなく、コマンドベースのことを書いています。
環境としてはLinux、特にCentOS5,6,7辺りを想定しています。
1.現在のarpテーブルの確認
通信したいホストとの疎通が取れない時などに確認します。
arp情報が見つからない場合は物理配線やネゴシエーション設定、VLAN設定などL1、L2で問題がある、もしくはIPアドレス設定が間違っているという可能性があります。
CentOS5,6の場合
arpコマンドを使います。
$ arp Address HWtype HWaddress Flags Mask Iface Router1 ether 00:11:22:33:44:55 C eth0 ### FQDNではなく、IPで表示 $ arp -n Address HWtype HWaddress Flags Mask Iface 192.168.0.1 ether 00:11:22:33:44:55 C eth0
CentOS7の場合
ip コマンドの neigh(neighbor)オプションを使います。
$ ip neigh router1 dev eno3 lladdr 00:11:22:33:44:55 STALE
2.特定ホストのarp情報を削除
IPアドレスがホスト同士で重複している(同じIPを振っちゃった場合)などに使います。arpを消してみて再度通信すると違うMACになってる、、みたいな場合にはIPが重複してます。
CentOS5,6の場合
arpコマンドを使います。たぶんrootじゃないとダメです。
### 192.168.0.1のarp情報を削除 # arp -d 192.168.0.1 ### 再度確認する Address HWtype HWaddress Flags Mask Iface 192.168.0.1 (incomplete) eth0 ### 上記のように(incomplete)となる。再度通信を行うと再登録される
CentOS7の場合
ip コマンドの neigh(neighbor)オプションを使います。たぶんrootじゃないとダメです。
# ip neigh del 192.168.0.1 dev ens192 # ip neigh 192.168.0.1 dev ens192 FAILED ### 上記のように FAILED となる
3.arpの静的登録
トラフィックシミュレータを使う場合やレイヤの低いプログラムの試験などでarp解決ができない場合がありますが、その時に手動でarpを登録することができます。
CentOS5,6の場合
arpコマンドを使います。たぶんrootじゃないとダメです。
# arp -s 192.168.0.254 00:11:22:33:44:55 ### 以下のように登録される # arp -n Address HWtype HWaddress Flags Mask Iface 192.168.0.254 ether 00:11:22:33:44:55 CM eth0
CentOS7の場合
ip コマンドの neigh(neighbor)オプションを使います。たぶんrootじゃないとダメです。
# ip neigh add 192.168.0.200 lladdr 00:11:22:33:44:55 dev ens192 # ### 確認("PERMANENT"と表示されるようになる) # ip neigh 192.168.0.200 dev ens192 lladdr 00:11:22:33:44:55 PERMANENT
4.擬似的にarpを送信
端末から実際にarpを投げてみて返してくる端末がいるか、周辺機器のarpが更新されるかなどを確認します。
CentOS5,6及び7で共通です
arpingコマンドを使います。その名の通りarp版pingです。
構文は arping -I ${使いたいNIC} ${宛先IPアドレス} になります。
この時、送信元IPは基本的に${使いたいNIC}に設定されているIPアドレスになります。
### (1) arp request # arping -I eth0 192.168.0.1 # <== 192.168.0.1に対するarpをeth0から送信 ARPING 192.168.0.1 from 192.168.0 eth0 Unicast reply from 192.168.0.1 [00:11:22:33:44:55] 1.932ms ### (2) arp probe (使っている人がいるかどうかの確認。fromが0.0.0.0になる) # arping -I eth0 -D 192.168.0.1 ARPING 192.168.0.1 from 0.0.0.0 eth0 Unicast reply from 192.168.0.1 [00:11:22:33:44:55] 1.191ms Sent 1 probes (1 broadcast(s)) Received 1 response(s) ### (3) Gratuitous arp (自分が使っていることを通知する) # arping -I eth0 -A 192.168.0.1 ARPING 10.254.161.45 from 10.254.161.45 eth0 # 同一セグメントのホストでキャプチャすると以下のパケットが見える 08:55:25.941087 00:11:22:33:44:55 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Reply 192.168.0.1 is-at 00:11:22:33:44:55, length 46
まとめ
以上、サーバエンジニアが良く使うと思われるarpに関するコマンドでした。
自分の経験ではレイヤが低いトラブルほど解決が難しいと思っていますのでこの辺りのコマンドを知っておくと便利だと思いました。