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 の補完が使える。