そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

MySQL/MariaDB「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラー対処法

※[PR]当ブログの記事の中にはプロモーションが含まれています。

MySQL(MariaDB)で「IP address 'xxx.xxx.xxxx.xxx' could not be resolved: Name or service not known」エラーが出たときの対処方法を知りたい。

こういった疑問に答えます。

本記事の内容

  1. 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」エラーが出たときの対処法

発生した事象(検知したエラーメッセージ)

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つのどちらかです。

  1. 接続元のIPアドレスからホスト名への逆引きができるように、hostsかDNSサーバーに登録する
  2. skip-name-resolve オプションを使ってMySQLサーバ内の名前解決を無効化する

参考サイト

gihyo.jp

これは冒頭で説明したステップの2. 「⁠(⁠載っていない場合)IPアドレスからホスト名に逆引きをかける(getnameinfo⁠)⁠」⁠ に失敗した場合に出力されるワーニングです。
実際にそのホストからの接続が認証されたのかされていないのかは関係ありません
mysql.userテーブルにIPアドレス形式でアカウントが登録してあれば,このワーニングの有無に関わらず認証が行われます⁠)⁠。
逆引きがきちんとメンテナンスされている環境であれば,このワーニングの多発から不正なアクセスを発見できるかも知れませんが,
そうでない場合はあっという間にこのワーニングがエラーログを埋め尽くしてしまうでしょう。

まとめ
skip-name-resolveオプションはMySQLサーバ内の名前解決を無効化します。
たまに聞く誤解ですが,このオプションはクライアントの名前解決動作には影響を及ぼしません。

名前解決を有効にしておくことで得られるメリットも多少ありますが,
そのためにはあらかじめ名前解決のための基盤を整備しておく必要があります。
このあたりに自信がない場合は,--skip-name-resolveで名前解決を無効化しておく方が定石です。
第28回 MySQLと名前解決,skip-name-resolve(技術評論社 gihyo.jp>DEVELOPER STAGE>連載>MySQL道普請便り)

MariaDBmysql.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.