服务监听地址

问题描述

在ECS上搭建了MySQL服务端,防火墙安全组一切正常,却无法远程访问。

排查

检查连通性

使用本地的电脑扫描服务器端口,得到结果如下:

 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的端口是放行的,但服务端未能正常工作。

检查端口

在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绑定到了本地回环测试的地址上,所以无法对外提供服务。也就是问题所在了。

绑定地址配置

mysql的默认配置是将服务地址监听在127.0.0.1上的,也就不对外提供服务。将绑定地址改到0.0.0.0上,才能支持远程访问,做如下配置:

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

修改其中的bind-address = 0.0.0.0 ,注意不可以直接注释掉,否则会导致如下第二种结果。

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

出现结果三,本机访问也成功访问。

总结

很多软件和框架,默认绑定地址都是127.0.0.1,是无法在其它机器访问的。需要改为0.0.0.0或者:::,前者是提供ipv4的服务,后者提供ipv6的服务。

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