MySQL公网IP访问失败求助:本地及外部主机可正常连接
解决同公网IP下通过公网地址访问MySQL的问题
问题核心
这是**NAT回环(Hairpin NAT)**导致的:家用路由器默认不支持内部主机通过公网IP访问同一公网下的内部服务器,数据包发出后无法正确路由返回。
解决方案
方案1:在PFSense配置Hairpin NAT
- 登录PFSense管理界面,进入
Firewall > NAT > Port Forward - 找到已有的MySQL(3306端口)转发规则,复制该规则
- 修改复制后的规则参数:
- Interface:选择连接家用路由器的局域网接口
- Source:设置为你的个人电脑所在子网(例如
192.168.1.0/24,根据实际网段调整) - Destination:保持公网IP不变
- Redirect Target IP:填写MySQL服务器的内网IP
- Redirect Target Port:3306
- 保存并应用规则
方案2:修改PC本地Hosts文件(快速临时解决)
直接让PC将公网IP解析为MySQL服务器的内网IP,绕过公网路由:
- 打开Hosts文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS:
/etc/hosts
- Windows:
- 添加一行映射(替换为你的实际IP):
注:192.168.2.10 123.45.67.89192.168.2.10是MySQL服务器内网IP,123.45.67.89是你的公网IP - 刷新DNS缓存:
- Windows:执行命令
ipconfig /flushdns - Linux:执行命令
systemctl restart systemd-resolved - macOS:执行命令
dscacheutil -flushcache
- Windows:执行命令
方案3:确认MySQL的访问权限与绑定地址
- 登录MySQL服务器,检查用户权限:
确保存在允许PC所在网段(如SELECT user, host FROM mysql.user;192.168.1.%)或所有IP(%)访问的用户。若没有,创建并授权:CREATE USER 'your_user'@'192.168.1.%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON your_db.* TO 'your_user'@'192.168.1.%'; FLUSH PRIVILEGES; - 检查MySQL配置文件(
my.cnf/my.ini)中的bind-address,设置为0.0.0.0(允许所有IP连接),然后重启MySQL服务:# Linux systemctl restart mysql # Windows net stop mysql && net start mysql
内容的提问来源于stack exchange,提问作者Game Hounds Interactive
相关产品推荐
相关产品推荐

