背景:刚买的一台阿里云ecs服务器,专用网络,centos 7操作系统。
假设外网IP地址为10.365.25.2(纯属瞎编,如有巧合,纯属意外),内网IP:19.16.25.36(纯属瞎编,如有巧合,纯属意外)
现象:安装完MySQL,尝试使用Navicat从外网连接,显示:Can't connect to MySQL server (10060)
解决过程:
1、检查网络是否通畅
我是用ssh连接的服务器,网络绝对可以连接,ping都不需要。
2、MySQL用户是否有权限外网访问
已经做了如下设置,允许root用户在任何IP在任意库的任意表上做任何操作
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION;
mysql> flush privileges;
3、MySQL的配置是否只允许本地访问
/etc/my.cnf里面是否有bind-address =127.0.0.1信息?并没有。
4、难道有防火墙?
发现centos 7操作系统并没有安装iptables,而是使用的firewall,OK,那我把它关掉,systemctl stop firewalld.service,试一下,还是不行。
难道是Navicat不好使?好吧,那我用mysql命令连接一下。然后,我在另外一台服务器上:
mysql -h 10.365.25.2 -u root -p
好几十秒之后,抛错:ERROR 2003 (HY000): Can't connect to MySQL server on '10.365.25.2' (110)
# perror 110
OS error code 110: Connection timed out
超时。。。。。。。。
想了一大会儿,尝试使用本地的mysql连接试一下:
mysql -u root -p -h localhost 结果可以进去
mysql -u root -p -h 127.0.0.1 没问题
mysql -u root -p -h 19.16.25.36(内网) 没问题
mysql -u root -p -h 10.365.25.2(外网) 超时。。。。。。。。。。。。。。
OK,这明显跟数据库权限没关系啊,这就是外网IP连接不上的经典问题啊,可是,是哪里的问题呢???
ifconfig
咦,怎么没有10.365.25.2这个IP,没有公网网卡!
为什么这个服务器没有公网网卡呢?我的其他的服务器都有的呀,然后,在阿里云官网搜答案。发现,专用网络是没有公网网卡的。
然后,我打电话给阿里客服,解释这个问题,说能否换一个网络类型,或者搞个可用的弹性IP。。。
95187,嘀……嘀……“欢迎致电阿里云客户服务平台……”
在转接了3-5次后,有一个声音很好听的感觉像是美女的客服接听了,我说我不小心买了一个专用网络的服务器,我说怎么怎么样能不能换个或是有没有别的办法,她要了IP地址,温柔的跟我说,“先生您好,这个虽然没有公网网卡,虽然不能在本地识别这个已有的外网IP,但是并不影响向外提供服务”,我问,那为啥根据外网IP连不上应用服务呢,她问我有没有在“安全组策略”中开放这个端口,我顿时惊呆了,阿里云的服务器啥时候还有这个东西了???
一念明了。
出于好奇,我还问了下,为什么没有公网网卡还有外网地址,服务器环境是类似docker还是类似VM的那个机制等,我一心认为她一个客服怎么可能知道这样的问题,然后她的回答让我觉得她一定懂。让我觉得没天理,一个客服而已,至于吗?
然后就有了下面的考虑:
5、如果是阿里云百度云腾讯云等等什么云的服务器,还要看看他们外部的限制策略,是否对端口有影响。