サービスリッスンアドレス

1 問題の説明

ECS上にMySQLサーバーを構築しましたが、ファイアウォールとセキュリティグループは正常であるにもかかわらず、リモートアクセスができません。

2 調査

2.1 接続性の確認

ローカルコンピュータを使用してサーバーポートをスキャンした結果は以下の通りです:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 ⚡yangz ❯❯ nmap -sS MD
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-26 19:23 中国標準時
Nmap scan report for MD 
Host is up (0.045s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
443/tcp  closed https
3306/tcp closed   mysql

結果は3306ポートが解放されていることを示していますが、サーバー側が正常に動作していません。

2.2 ポートの確認

ECS上で全てのポートの使用状況を確認します:

1
2
3
4
root@minedl:~# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      24735/mysqld 

mysqlはローカルループバックアドレスにバインドされているため、外部にサービスを提供できません。これが問題の原因です。

3 バインドアドレスの設定

mysqlのデフォルト設定では、サービスアドレスは127.0.0.1にリッスンされており、外部にサービスを提供しません。バインドアドレスを0.0.0.0に変更することで、リモートアクセスをサポートできます。以下の設定を行います:

1
vim /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 0.0.0.0 に変更します。直接コメントアウトしてはいけません。そうしないと、次のような2番目の結果が生じる可能性があります。

1
2
3
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      24735/mysqld #localhostのみをリッスン
tcp6       0      0 :::3306                 :::*                    LISTEN      24794/mysqld #ipv6のみをリッスンし、ipv4をリッスンしない
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      24877/mysqld #すべてのipv4をリッスン

結果3が出た場合、ローカルアクセスも成功します。

4 まとめ

多くのソフトウェアやフレームワークは、デフォルトでバインドアドレスが127.0.0.1になっており、他のマシンからアクセスできません。0.0.0.0または:::に変更する必要があります。前者はipv4のサービスを提供し、後者はipv6のサービスを提供します。

Buy me a coffee~
Tim 支付宝支付宝
Tim 贝宝贝宝
Tim 微信微信
0%