・MySQL(MariaDB)で「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラーが出たときの対処方法を知りたい。
こういった疑問に答えます。
本記事の内容
- MySQL(MariaDB)で「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラーが出たときの対処法
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
こういった私が、解説していきます。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
- 本記事の内容
- MySQL(MariaDB)で「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラーが出たときの対処法
MySQL(MariaDB)で「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラーが出たときの対処法
発生した事象(検知したエラーメッセージ)
mariadb.log
のログファイル監視で以下を検知しました。
/var/log/mariadb/mariadb.log
2020-12-31 4:06:56 24 [Warning] IP address '192.168.1.107' could not be resolved: Name or service not known
エラー原因
「IP address 'xxx.xxx.xxx.xxx' could not be resolved: Name or service not known」
というエラーは、
mariaDBに接続している接続元を、
IPアドレスからホスト名への逆引きが出来なかったときのエラーです。
対処方法
対処方法は以下の2つのどちらかです。
参考サイト
これは冒頭で説明したステップの2. 「(載っていない場合)IPアドレスからホスト名に逆引きをかける(getnameinfo)」 に失敗した場合に出力されるワーニングです。
実際にそのホストからの接続が認証されたのかされていないのかは関係ありません
(mysql.user
テーブルにIPアドレス形式でアカウントが登録してあれば,このワーニングの有無に関わらず認証が行われます)。
逆引きがきちんとメンテナンスされている環境であれば,このワーニングの多発から不正なアクセスを発見できるかも知れませんが,
そうでない場合はあっという間にこのワーニングがエラーログを埋め尽くしてしまうでしょう。まとめ
skip-name-resolve
オプションはMySQLサーバ内の名前解決を無効化します。
たまに聞く誤解ですが,このオプションはクライアントの名前解決動作には影響を及ぼしません。名前解決を有効にしておくことで得られるメリットも多少ありますが,
そのためにはあらかじめ名前解決のための基盤を整備しておく必要があります。
このあたりに自信がない場合は,--skip-name-resolve
で名前解決を無効化しておく方が定石です。
第28回 MySQLと名前解決,skip-name-resolve(技術評論社 gihyo.jp>DEVELOPER STAGE>連載>MySQL道普請便り)
MariaDBのmysql.userテーブルを確認
mysql -uroot -p●●●●●●●●●●●●パスワード
$ mysql -uroot -p●●●●●●●●●●●● Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 37 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
use mysql
MariaDB [(none)]> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
select user, host from mysql.user;
MariaDB [mysql]> select user, host from mysql.user; +-------------+---------------+ | user | host | +-------------+---------------+ | root | 127.0.0.1 | | root | 192.168.1.107 | | root | ::1 | | root | localhost | (以下省略) +-------------+---------------+
今回の環境では、上記のように、
・接続元のIPアドレスをローカルホスト自信と、IPアドレスを登録したホストだけに制限したく、
なおかつ、
・許可していない接続元からのアクセスがあったときにはログに出力して検知したい、
というものでした。
ですので、2つある対処方法のうちの「①:接続元のIPアドレスからホスト名への逆引きができるように、hostsかDNSサーバーに登録する」を選ぶことにしました。
DNSサーバーへの登録
ローカルエリア内に設置しているDNSサーバーの逆引きレコードに追加登録します。
DNS登録前
IPアドレスからホスト名への逆引きができない状態でした。
$ nslookup 192.168.1.107 ** server can't find 107.1.168.192.in-addr.arpa: NXDOMAIN
DNSサーバーの逆引き参照ゾーンにPTRレコードを登録
DNS登録後
IPアドレスからホスト名への逆引きができるようになりました。
$ nslookup 192.168.1.107 107.1.168.192.in-addr.arpa name = sv-saturn.planet.space.com.