![Mysql代理和端口映射](https://linux22.com/image/553064/Mysql%E4%BB%A3%E7%90%86%E5%92%8C%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84.png)
你好,我有一个类似于代理 mysql 连接的愚蠢想法。
我已经将我的概念图上传到这里http://i52.tinypic.com/o7src3.png
本地网络上有一台机器在不同端口上运行多个 mysql 服务器。出于安全原因,这台机器不能直接暴露给互联网。客户端在不知道这些端口的情况下连接到默认 mysql 端口 (3306)。通过识别客户端的域名,客户端请求被路由到正确的 mysql 服务器端口。
我尝试使用 mysql-proxy,但似乎这种情况无法通过 mysql-proxy 实现(我没有付出更多努力)。
有没有办法使用 iptables 或任何其他方法来实现这一点?
非常感谢您的回复。
答案1
问题是,没有与 Host: 等同的项(HTTP 虚拟服务器)可用于区分同一台机器上的 abc.com 和 xyz.com。代理服务器看到的只是通过端口 3306 进入 1.2.3.4 的连接。您可以在一个物理主机上使用多个 IP(端口转发/NAT)来实现这一点,但不能在一个 IP 上实现,因为代理不知道使用什么名称来连接它。
答案2
您可以使用 iptables 来实现这一点。
iptables -t nat -A PREROUTING --source dbs1.abc.com --dport 3306 -j DNAT --to 123.63.1.23:13307
iptables -t nat -A PREROUTING --source dbs2.abc.com --dport 3306 -j DNAT --to 123.63.1.23:13306
但是,您说“[c] 客户端请求通过识别其域名路由到正确的 mysql 服务器端口。” --source
iptables 中的参数不能是域名。它可以是主机名(但通常使用主机的 IP 地址,因为强制 iptables 解析名称可能会危害您的健康)或 IP 地址范围。