Azure虚拟网络中如何仅向前端虚拟机开放MySQL 3306端口?
实现Azure虚拟机间仅虚拟网络内访问MySQL的操作方法
前提确认
确保两台虚拟机**处于同一个Azure虚拟网络(VNet)**中。如果不在同一VNet,优先将它们移至同一VNet;若无法迁移,可配置VNet对等连接(同VNet操作更简便)。
步骤1:配置数据库VM的网络安全组(NSG)
NSG是控制VM流量的核心,通过它仅允许前端VM访问3306端口:
- 登录Azure门户,找到MySQL数据库VM,进入左侧菜单「设置」-「网络」,打开其关联的网络安全组。
- 切换到「入站安全规则」标签,点击「添加」:
- 优先级:设置为比默认拒绝规则更高的数值(例如100,数字越小优先级越高)。
- 源:选择「IP地址」,填入前端Node.js VM的私有IP地址(注意不是公网IP)。
- 源端口范围:留空(允许前端VM从任意端口发起连接)。
- 目标:选择「任意」或直接指定数据库VM的私有IP。
- 目标端口范围:输入
3306。 - 协议:选择「TCP」(MySQL默认使用TCP协议)。
- 操作:选择「允许」。
- 名称:自定义易识别的名称,比如
Allow-Frontend-to-MySQL-3306。
- 保存规则。
步骤2:调整MySQL自身配置
确保MySQL允许来自前端VM私有IP的连接:
- 登录数据库VM,编辑MySQL配置文件(常见路径为
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf):- 找到
bind-address项,将值改为0.0.0.0(结合NSG规则仅开放给前端VM),或直接指定前端VM的私有IP。
- 找到
- 重启MySQL服务:
Ubuntu/Debian系统:sudo systemctl restart mysql
CentOS/RHEL系统:sudo service mysqld restart - 在MySQL中创建授权用户:
CREATE USER 'your_db_user'@'frontend_vm_private_ip' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON your_target_db.* TO 'your_db_user'@'frontend_vm_private_ip'; FLUSH PRIVILEGES;
步骤3:测试跨VM连接
在前端Node.js VM上验证连接是否生效:
- 安装MySQL客户端(若未安装):
Ubuntu:sudo apt install mysql-client
CentOS:sudo yum install mysql - 执行连接命令:
mysql -h mysql_vm_private_ip -u your_db_user -p,输入密码后若能进入MySQL命令行,说明配置成功。
额外建议
- 移除数据库VM的公网IP(若已分配):在VM的网络设置中禁用公网IP,彻底规避公网暴露风险。
- 若两台VM在不同VNet:配置VNet对等连接后,将NSG规则的源设置为前端VNet的地址空间,而非单个IP。
内容的提问来源于stack exchange,提问作者alper
相关产品推荐
相关产品推荐

