У меня есть сценарий, в котором маршрутизатор соединяет 2 сети, поэтому у меня есть эти машины с этими интерфейсами: Виртуальная машина 1, которая работает как маршрутизатор:
eth1: 193.136.200.254
eth2: 192.168.10.254
eth3: 24.200.220.254
Виртуальная машина 2:
eth1: 192.168.10.2
eth1:0: 192.168.10.3
... Виртуальная машина 3:
eth1: 24.200.220.2
eth1:0: 24.200.220.3
В виртуальной машине 3 у меня есть IP-адрес, связанный со службой mysql (24.200.220.3), и я хочу, чтобы клиенты, подключенные к серверу на виртуальной машине 2 (196.168.10.2), могли подключаться к серверу (24.200.220.3) в виртуальной машине 3. И прекратить все другие коммуникации между сетями. Я пытаюсь сделать это, используя следующие правила iptables:
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -d 24.200.220.3 -s 192.168.10.2 --sport 3306 -j ACCEPT
iptables -A FORWARD -p tcp -s 24.200.220.3 -d 192.168.10.2 --dport 3306 -j ACCEPT
Чтобы проверить эти правила на виртуальной машине 3, я запускаю команду: nc -l 24.200.220.3 3306 На виртуальной машине 2 Я запускаю: nc 24.200.220.3 3306 Затем я пишу случайное слово на одной машине, но оно не отображается в другая машина. Так что это не работает. Вы знаете, что не так?
Есть небольшая ошибка. Если вы используете IP-адрес назначения базы данных, тогда вам необходимо использовать с ним порт базы данных назначения. И сделайте то же самое для исходного IP и порта.
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -d 24.200.220.3 -s 192.168.10.2 --dport 3306 -j ACCEPT
iptables -A FORWARD -p tcp -s 24.200.220.3 -d 192.168.10.2 --sport 3306 -j ACCEPT