Использовать 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 и eth1 192.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 цепочка, которая не соответствует пакетам, для которых она не предназначена.

Другие вопросы по тегам