Я изо всех сил пытаюсь настроить инфраструктуру, в которой трафик репликации MySQL из экземпляра Amazon RDS пересылается по ссылке OpenVPN на второй сервер.
Существует экземпляр Ubuntu EC2, на котором запущен OpenVPN, с туннелем к серверу MySQL в другой инфраструктуре. Если бы я понял iptables
правильно, должна быть возможность перенаправить трафик, полученный через порт 3306, на порт 3306 на другом (удаленном) IP-адресе и отменить процесс возврата трафика.
Настройка выглядит так:
|<--------- VPC ---------->|<-- internet -->|<--- Datacenter --->|
RDS --> Public ip: 10.11.12.13
EC2 instance
VPC ip: 1.2.3.4
OpenVPN ==== tunnel ===> MySQL server
public ip: 9.10.11.12
vpn ip: 5.6.7.8
Оба экземпляра RDS и EC2 находятся в одном VPC, и я могу без проблем подключиться из экземпляра EC2 к серверу MySQL по ссылке OpenVPN, поэтому часть OpenVPN, похоже, работает нормально:
ssh root@5.6.7.8
mysql -uuser -p -h5.6.7.8
Я пробовал настраивать iptables
выполнить переадресацию порта, но безуспешно. Мои текущие правила выглядят так:
$ iptables -L
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain INET-PRIV (0 references)
num target prot opt source destination
и
$ iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:5.6.7.8:3306
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:5.6.7.8:3306
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- 0.0.0.0/0 5.6.7.8 tcp dpt:3306 to:1.2.3.4
Может ли кто-нибудь подсказать, где я здесь ошибаюсь?
Извините, что вернул этот старый пост живым.
Отличная работа. И у меня есть еще один набор правил, который также работает для моего тестового примера.
Однако я не хочу использовать «средний» компьютер для доступа к серверу SQL, если вы не выполняете ssh localForward ранее. В противном случае любой, кто касается этого «поворота», получит «доступ» к месту назначения.
Итак, как этого добиться ....
Включена ли IP-переадресация в вашем ядре?
cat /proc/sys/net/ipv4/ip_forward
Он должен вернуть 1, если он включен, и 0, если он отключен. Если 0, сделать (как root)
echo 1 > /proc/sys/net/ipv4/ip_forward
Кроме того, почему у вас есть два правила ПЕРЕРАБОТКИ для одного и того же пункта назначения (хотя это не должно быть проблемой)?
Помимо того, что ваши правила верны, он, вероятно, заработает, как только вы включите ip_forward.
Еще один совет: используйте политику accept при пересылке и вводе только в целях тестирования.
Чтобы помочь вам в этом, этот сценарий должен установить некоторые более безопасные политики и включить вашу пересылку. Я сохранил SSH, чтобы не блокировать вас, настроить в соответствии с вашими потребностями (например, добавить правила для вашего VPN и т. Д.).
#!/bin/sh
# Enable IP-Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
### DEFAULT FIREWALL SETTINGS
# Flush all tables
iptables -F
iptables -t nat -F
iptables -X
# Set default policy to drop
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Allow local process communication (optional, required for some services)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established and related connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
### CUSTOM FIREWALL SETTINGS
# SSH (optional)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
# MySQL Forwarding:
# Allow forwarding to 5.6.7.8 on port 3306
iptables -A FORWARD -p tcp --dport 3306 -d 5.6.7.8 -j ACCEPT
# Set NAT from 1.2.3.4:3306 to 5.6.7.8:3306
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 5.6.7.8:3306
iptables -t nat -A POSTROUTING -p tcp -d 5.6.7.8 --dport 3306 -j SNAT --to-source 1.2.3.4
Изменить: О, и отключите IPv6, если вы его не используете.