それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ping の送信元を指定する。

ping 打つときどこから出てるかはっきりさせたい。

もちろんroute に従うんだけど、ブリッジしてたり、net.ipv4.ip_forward=1 とかやってると、特に。

仮想NIC増えてくると、ping も送信元を意識する必要が出てくる。

ping -I (大文字の i ) で指定する。

ping -I eth0  example.com

ip でも指定できる

eth デバイスでも良いんだけど、場合によっては、IP指定したほうが捗る。

takuya@raspberrypi:~$ ping -I 192.168.1.20 192.168.1.1
PING 192.168.1.1 (192.168.1.1) from 192.168.1.20 : 56(84) bytes of data.

ただし、IP未割当のethから投げようとすると

ping だし、veth1 の向こう側に veth0 おるから何とかしてくるんじゃないの?と甘えようとすると、チャント起こられる。

takuya@raspberrypi:~$ ping -I veth1 192.168.1.1
ping: Warning: source address might be selected on device other than veth1.
PING 192.168.1.1 (192.168.1.1) from 192.168.1.11 veth1: 56(84) bytes of data.

veth1 にはIPないから、適当に別のIP振られてるデバイス使うね!となって、一見するとpingが通ってるように見える。なので、気付かずに、疎通確認ができたと思い込み、ハマるので注意。

bash_completion と合わせて戦うのがオススメ

bash の自動補完を使うのが圧倒的に楽。

takuya@raspberrypi:~$ ping -I
br0     br0:0   eth0    lo      mveth0  vbr0    veth0   veth1   wlan0

bash_completion のインストールは

sudo apt install bash-completion
source /etc/bash_completion
echo "source /etc/bash_completion" >> ~/.bashrc

これで、ping の補完が使える。