我传统上使用 SSH 隧道连接远程 MySQL 服务器。但是,我启用了到从属实例的复制,因此尝试从特定外部 IP 地址直接连接到端口 3306。
我已将 MySQL 设置为绑定到主机上的所有地址,并通过 netstat 验证了这一点,并且还通过使用公共 IP 而不是 localhost 或 127.0.0.1 本地连接到它来验证了这一点。我还在防火墙上 (使用 ufw) 为端口 3306/tcp 戳了漏洞,以获取感兴趣的特定远程 IP 地址 (在ufw status verbose
下面的输出中替换为 1.2.3.4)。
To Action From
-- ------ ----
80,443/tcp (Nginx Full) ALLOW IN Anywhere
25/tcp ALLOW IN Anywhere
143 ALLOW IN Anywhere
110 ALLOW IN Anywhere
993/tcp (Dovecot Secure IMAP) ALLOW IN Anywhere
995/tcp (Dovecot Secure POP3) ALLOW IN Anywhere
25/tcp (Postfix) ALLOW IN Anywhere
465/tcp (Postfix SMTPS) ALLOW IN Anywhere
22 ALLOW IN Anywhere
3306/tcp ALLOW IN 1.2.3.4
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6)
25/tcp (v6) ALLOW IN Anywhere (v6)
143 (v6) ALLOW IN Anywhere (v6)
110 (v6) ALLOW IN Anywhere (v6)
993/tcp (Dovecot Secure IMAP (v6)) ALLOW IN Anywhere (v6)
995/tcp (Dovecot Secure POP3 (v6)) ALLOW IN Anywhere (v6)
25/tcp (Postfix (v6)) ALLOW IN Anywhere (v6)
465/tcp (Postfix SMTPS (v6)) ALLOW IN Anywhere (v6)
22 (v6) ALLOW IN Anywhere (v6)
iptables 还报告了以下内容:
# iptables -S | grep 3306
-A ufw-user-input -s 1.2.3.4/32 -p tcp -m tcp --dport 3306 -j ACCEPT
但是,尝试从这些地址连接它时总是超时。当我尝试连接时,ufw、syslog、内核或 mysql 错误日志文件中没有出现任何内容,所以我现在很困惑。我错过了什么?
答案1
事实证明我做的一切都是正确的。我遗漏了托管服务提供商强加给我的 VPS 上的云防火墙。幸运的是,我可以通过他们提供的云控制面板来控制它,所以我能够将端口 3306 添加到其中,一切就绪了。