2022年3月10日木曜日

DynamicDNS - 3.IPアドレスを知る方法

DynamicDNSについての連載3回目。
自分のIPアドレスを知る方法について。

Linuxが走っているデバイスが自分自身の
IPアドレスを知りたければ"ifconfig"コマンドで事足ります。
NIC(ネットワークインターフェイス)が複数あったり、
1つのNICに複数のIPアドレスが設定してあったり、
はたまたブリッジしてあったりと、
複雑なケースは色々思いつきますが、
ごく一般的には
$ ifconfig eth0 | sed -e '/inet /!d' | head -n 1 | awk '{print $2}'
でIPv4アドレスが、
$ ifconfig eth0 | sed -e '/inet6/!d' -e '/fe80/d' | head -n 1 | awk '{print $2}'
でIPv6アドレスが得られます。
ただIPv4の場合だとNAT配下にあるデバイスでは、
これで知れるのはプライベートアドレスであり、
レジデンシャルルーターにただ1つ設定された
グローバルIPアドレスはわかりません。
またIPv6では一般に複数のIPアドレスが振られ、
どのIPアドレスが送信元に設定されるのかは
経路情報と共に考える必要があったりして面倒。
ということでこれら問題を解決するために
外部サーバーの力を借りるのが簡単です。

外部に自由に使えるウェブサーバ(Apache+PHP)を持っているなら、
そこにファイル"ip.php"を以下の内容で作成し、
ウェブブラウザからアクセス可能にします。
<?php
        $ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
        if(strlen($ip)==0)
                $ip=$_SERVER["REMOTE_ADDR"];
        echo $ip;
?>
これのURLが"https://<サーバ名>/ip.php"とすれば、
$ wget -4 -O - https://<サーバ名>/ip.php 2> /dev/null
でアクセス元のIPv4のグローバルIPアドレスが取得できます。
IPv6の場合は
$ wget -6 -O - https://<サーバ名>/ip.php 2> /dev/null
でいけます。
これをシェルスクリプト上で処理してDNSサーバに通知すれば
DynamicDNSが利用できます。

0 件のコメント:

コメントを投稿