虚拟机端口映射提供mysql远程服务

 碰到一个运维问题,目标是需要远程访问mysql,花了一些时间总算搞定,聊作记录。

 场景是远程有一台物理服务器WinServer2012,里头用VMware装了若干台Ubuntu 16.04虚拟机,虚拟机网络采样NAT方式,在虚拟机里搭的mysql,3306端口,在虚拟机内部通过localhost或者127.0.0.1是可以访问的,外网无法访问。


外网要访问虚拟机里的mysql在3306端口的服务,需要做好三件事情:

1. 将物理主机(假定ip为202.113.xxx.xxx)的一个端口(这里用13306)映射到虚拟机的3306端口

2. 物理服务器和虚拟机的防火墙设置,确保物理主机的13306端口外网能访问,确保虚拟机的3306端口能通过主机访问。

3. mysql远程访问权限设置以及ip绑定修改


1. 端口映射

 在VMware中设置端口映射,首先在虚拟机里通过ifconfig查看虚拟机在局域网中的ip,这里我用192.168.56.133,有时候多个局域网地址不知道该用哪个,先看看VMware里NAT的子网地址,比如这里是192.168.56.0,那么就选属于这

个子网的那个ip。

 然后在虚拟网络编辑器里进入NAT设置窗口,添加一项端口转发,填写用于外网访问的主机端口,虚拟机ip和mysql端口3306,类型选择TCP。





2. 防火墙设置

 做完端口映射讲道理现在访问主机202.113.xxx.xxx:13306就相当于在访问虚拟机的3306端口了,但是还要确保端口是对外开放的。查看某个ip是否可达我们可以ping一下这个地址,而查看某ip的某个端口是否可以访问,如果在机器内检查自己的端口服务情况就用netstat查看,也可以从外部检验端口,想搞事情的话可以用端口扫描工具,其实这里用telnet就很方便。

 我们先在远程telnet一下服务器主机13306端口,如果连接不上,一般我们服务器还是不能直接粗暴地关防火墙的,就需要去控制面板->系统和安全->Windows 防火墙->高级设置里新建一个入站规则,选择端口类型,允许外网连接这个端口。再在远程telnet一下这个端口,确认可以连接。







 好了,远程对服务器主机的13306端口telnet通了,我们再到物理主机里用局域网ip来telnet虚拟机的3306端口看看通不通。如果不通,就需要到Ubuntu虚拟机里修改防火墙,有几种途径,用iptables命令,修改iptables的配置文件以及用ufw命令。iptables命令行工具比较常用,ufw也很方便,修改iptables配置文件就麻烦一点,不同系统版本的配置文件名字和位置有些不一样,容易晕乎。

 iptables有很多实用细节,可以参考此文,不同系统还是稍有些出入,得自己慢慢试,举几个我们此处用到的例子。

sudo iptables -L #查看防火墙规则列表
sudo iptables -F #清空防火墙规则
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT #设置3306外部端口可访问

 用命令配置是即时生效的,重启以后规则又会丢失。想要永久有效可以去修改iptables配置文件,也可以用命令

service iptables save #使iptables设置长久有效,重启不丢失


 ufw的基本使用如下, ufw设置完一开始没有生效,我重启了一下虚拟机,然后就OK了。可以 参考 这个文章 https://www.cnblogs.com/kluan/p/5993767.html

1 启用
 sudo ufw enable
 sudo ufw default deny 
 
作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。

2 关闭
 sudo ufw disable 
 
2 查看防火墙状态
 sudo ufw status 

3 开启/禁用相应端口或服务举例
 sudo ufw allow 3306 允许外部访问80端口
 sudo ufw delete allow 3306 禁止外部访问80 端口
 sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端口

3. mysql远程访问配置

 做完端口映射,也设置了防火墙,远程访问mysql还是can not connect to mysql server,那还有一件事要考虑就是mysql server的远程访问限制。想起当初实习的时候leader叫我看两遍《mysql5.5中文参考手册》,现在也没看完一遍,借此又翻一翻手册,Mysql访问权限系统那一节。我们要做的呢就是将访问权限all一下。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;     //任何远程主机都可以访问数据库
mysql> FLUSH PRIVILEGES;    //需要输入次命令使修改生效
 此外ubuntu中mysql默认绑定的是127.0.0.1,这样就只允许本机登录,想要允许其他地方登录只需要把bind改成公网ip或者任何ip均可。需要编辑配置文件mysqld.cnf,一般位置在 /etc/mysql/mysql.conf.d/mysqld.cnf


到此远程的机器就成功通过物理主机的映射端口访问虚拟机里的mysql服务了,

同样的道理做web服务,ssh远程有是一个套路。





猜你喜欢

转载自blog.csdn.net/XiaoPANGXia/article/details/79165894