OpenVPN 已连接,但是本地无法连接服务器的 MySQL(MySQL 未监听外部连接)
结论
通过修改监听+防火墙,搞定。
现场
原来的 MySQL 端口监听情况:
1 | tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 159745/mysqld |
它说明 MySQL 仅监听本地回环地址 127.0.0.1,也就是说:
只能在服务器本机上访问数据库;
无法从 VPN 客户端(如 10.8.0.x 网段)连接数据库;
你的 openvpn 虽然连通,但客户端连接 10.8.0.1:3306 会失败。
解决方法:修改 MySQL 配置文件
你需要让 MySQL 监听在 0.0.0.0
(表示所有网卡,包括 VPN 内网)或指定 VPN 网卡的 IP(如 10.8.0.1
)上。
1️⃣ 修改配置文件
文件路径通常是:
1 | /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian |
找到这一行:
1 | bind-address = 127.0.0.1 |
改为:
1 | bind-address = 0.0.0.0 |
然后重启 MySQL:
1 | sudo systemctl restart mysql |
2️⃣ 再次检查监听:
1 | sudo ss -tulnp | grep 3306 |
希望看到类似:
1 | tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN xxxx/mysqld |
或:
1 | tcp 0 0 10.8.0.1:3306 0.0.0.0:* LISTEN xxxx/mysqld |
3️⃣ ⚠️ 补充:记得放行防火墙和确认权限
修改监听后,别忘了:
- 防火墙放行
3306
给 VPN 段(如:ufw allow from 10.8.0.0/24 to any port 3306
); - 确保数据库用户有权从
10.8.%
段连接(创建user@'10.8.%'
)。