問題
使用しているネットワークによっては,固定IPアドレスをコンピュータに割り振ることができず,DHCPでIPアドレスを取得しなければならない場合があります.計算専用機のようにディスプレイが必要ないコンピュータでは,ディスプレイでIPアドレスを直接確認できないので困ります.IPアドレスが分からないディスプレイが無いコンピュータからcronを使って定期的にIPアドレスを書いた電子メールを送るという手段もありますが,メールサーバが必要になるため,この手段は使いたくありません(外部のSMTPサービスもアカウント情報を設定ファイルに書く必要があるので使いたくないです).ではどうやってIPアドレスを知ればよいのでしょうか.
手法
ディスプレイが無いコンピュータからディスプレイ付きで使用しているLinuxマシンにpingを打ち,そのログを見ることでIPアドレスを知る方法があります.
これを実現するには,次の2項目を実現しなければなりません.
- IPアドレスがわからないコンピュータからpingをディスプレイ付きで使用しているLinuxマシンに自動的に打つ.
- ディスプレイ付きで使用しているLinuxマシンにpingが打たれたことを確認出来る.
使用ディストリビューションはDebianです.使用しているディストリビューションによって,インストールコマンドやファイルの場所などが異なります.
ディスプレイがないコンピュータの設定
cronを使って定期的にpingを打たせればよいでしょう.次の行を/etc/crontabに追加すればよいです.
0 7 * * * root /bin/ping -c 4 IPアドレス
これで毎朝7時にpingを打ちます.
また,マシンの起動時にpingを打ちたければ
@reboot root sleep 300 && /bin/ping -c 4 IPアドレス
と/etc/crontabに追加します.起動してすぐだとネットワークが確立していないかもしれませんので,sleepで少しまってからpingを打ちます..
ディスプレイ付きで使用しているLinuxマシンの設定
pingが打たれたことを確認するために,pingのログをiptablesを使って取ります.
- iptablesの設定は,シャットダウンのたびに忘れてしまうので,忘れないようにiptables-persistentをインストールします.
sudo apt install iptables-persistent
- iptablesに設定を加えます.
sudo iptables -I INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix "PING RECEIVED: "
- 念のためiptablesの設定を確認します.
sudo iptables -L
- iptablesの設定を保存します.
sudo netfilter-persistent save
- これで /var/log/kern.log にpingリクエストのログが残ります.つまり,IPアドレスを知りたいときにkern.logを見れば良いとうことです.しかし,Debian12ではログの管理がsystemd-journaldに変わって/var/logの下にlogファイルが保存されなくなりました.Debian12の方は,
sudo journalctl -k
のコマンドでpingのログを見ましょう.