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

использовать iptables nat для прокси mysql

Я нашел эту похожую ветку, но не работал: https://stackoverflow.com/questions/10864854/forwarding-mysql-connection-with-iptables-and-differents-network-interfaces?rq=1

Моя среда выглядит следующим образом:

На компьютере A я использую команду 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

Ваш PREROUTING правила не применяются к пакетам из А, так как PREROUTING применяется только к перенаправленным пакетам, а не к локально сгенерированным пакетам. Вместо этого вы можете использовать OUTPUT цепочка, предназначенная для локально сгенерированных пакетов.

Для обоих PREROUTING и OUTPUT Я рекомендую вам добавить -d 192.168.42.67 к DNAT правило, так что оно не соответствует пакетам, для сопоставления которых не предназначалось.

Дополнительно рекомендую добавить -o eth0 или -o eth1 к MASQUERADE править в POSTROUTING цепочка, так что она не соответствует пакетам, для которых не предназначена.

Измените это правило

-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  

Этого было бы достаточно с другими указанными вами правилами.