Привет, у меня есть что-то глупое, как идея проксирования соединений 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-адресе, прокси-сервер не знает, какое имя был использован для подключения к нему.