Я нашел эту похожую ветку, но не работал: https://stackoverflow.com/questions/10864854/forwarding-mysql-connection-with-iptables-and-differents-network-interfaces?rq=1
Моя среда выглядит следующим образом:
192.168.42.67
и eth1 192.168.110.2
, с установленным клиентом MySQL и отключенным selinux.192.168.110.4
, с установленным сервером MySQL, iptables остановлен, selinux отключен.На компьютере 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
Этого было бы достаточно с другими указанными вами правилами.