Использовать iptables nat для прокси MySQL
Я нахожу эту похожую тему, но не работаю: https://stackoverflow.com/questions/10864854/forwarding-mysql-connection-with-iptables-and-differents-network-interfaces?rq=1
Моя среда выглядит следующим образом:
- Компьютер A имеет два сетевых интерфейса: eth0
192.168.42.67
и eth1192.168.110.2
, с установленным клиентом MySQL, selinux отключен. - Компьютер B имеет только один сетевой интерфейс: eth0
192.168.110.4
, с установленным MySQL сервером, iptables остановлен, selinux отключен.
На компьютере А я использую команду mysql -h192.168.110.4 -uroot -p
подключиться к MySQL на компьютере B успешно.
Компьютер А /etc/sysconfig/iptables
выглядит следующим образом:
[root@net ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Mon Jun 9 20:25:07 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:140]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Mon Jun 9 20:25:07 2014
# Generated by iptables-save v1.4.7 on Mon Jun 9 20:25:07 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 3306 -j LOG --log-prefix "REX_NAT_PRE2:"
-A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.110.4:3306
-A POSTROUTING -s 192.168.110.4/32 -j MASQUERADE
-A POSTROUTING -p tcp -j LOG --log-prefix "REX_NAT_POST:"
COMMIT
ПРИМЕЧАНИЕ. Я устанавливаю политику по умолчанию для каждой цепочки на ACCEPT
,
Я надеюсь, что я могу использовать mysql -h192.168.42.67 -uroot -p
на компьютере A для манипулирования MySQL компьютера B
Я также казнил modprobe iptable_nat
а также echo 1 > /proc/sys/net/ipv4/ip_forward
2 ответа
Изменить это правило
-A POSTROUTING -s 192.168.110.4/32 -j MASQUERADE
в
-A POSTROUTING -p tcp -m tcp -d 192.168.110.4/32 --dport 3306 -j MASQUERADE
Этого будет достаточно с другими правилами, которые вы указали.
Ваш PREROUTING
правила не применяются к пакетам из A, потому что PREROUTING
применяется только к пересылаемым пакетам, а не к локально сгенерированным пакетам. Вместо этого вы можете использовать OUTPUT
цепочка, которая предназначена для локально сгенерированных пакетов.
Для обоих PREROUTING
а также OUTPUT
Я рекомендую вам добавить -d 192.168.42.67
к DNAT
правило, такое, что оно не соответствует пакетам, для которых оно не предназначалось.
Кроме того, я рекомендую вам добавить -o eth0
или же -o eth1
к MASQUERADE
править в POSTROUTING
цепочка, которая не соответствует пакетам, для которых она не предназначена.