Назад | Перейти на главную страницу

Прокси-сервер MySQL и сопоставление портов

Привет, у меня есть что-то глупое, как идея проксирования соединений mysql.

Я загрузил сюда изображение своей концепции http://i52.tinypic.com/o7src3.png

В локальной сети есть одна машина, на которой работает несколько серверов mysql на разных портах. Эта машина не может напрямую открываться Интернету по соображениям безопасности. клиенты подключаются к порту mysql по умолчанию (3306), не зная этих портов. Клиентские запросы направляются на исправление порта сервера mysql путем определения их доменного имени.

Я попытался использовать mysql-proxy, но, похоже, этот сценарий не может быть реализован с использованием mysql-proxy (я не очень старался).

Есть ли способ добиться этого с помощью iptables или любого другого метода?

Ваши ответы очень важны.

Вы можете сделать это с помощью 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] lient запросы направляются на исправление порта сервера mysql путем определения их доменного имени». В --source Аргумент в iptables не может быть доменным именем. Это может быть имя хоста (но вместо этого обычно используется IP-адрес хоста, поскольку принуждение iptables к разрешению имен может быть опасно для вашего здоровья) или диапазон IP-адресов.

Проблема в том, что нет эквивалента Host: (который виртуальные серверы HTTP) можно использовать для различения abc.com и xyz.com на одном компьютере. Все, что видит прокси-сервер, - это соединение, входящее в 1.2.3.4 на порт 3306. Вы можете сделать это, используя несколько IP-адресов на одном физическом хосте (перенаправление портов / NAT), но не на одном IP-адресе, прокси-сервер не знает, какое имя был использован для подключения к нему.