记一次MySQL使用外网IP连接超时

来源:互联网 发布:足球怎么过人知乎 编辑:程序博客网 时间:2024/06/05 17:25

背景:刚买的一台阿里云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、如果是阿里云百度云腾讯云等等什么云的服务器,还要看看他们外部的限制策略,是否对端口有影响。