У меня есть удаленный хост, работающий на centos 7 с общедоступным IP-адресом 147.38.9.162 и локальным IP-адресом 10.5.96.4, соответственно подключенным к eth0 и eth1, я использовал firewall-cmd для настройки сети, как показано ниже:
[root@koala order]# firewall-cmd --get-zone-of-interface=eth0
public
[root@koala order]# firewall-cmd --get-zone-of-interface=eth1
home
[root@koala order]# ifconfig eth1|grep inet
inet 10.5.96.4 netmask 255.255.0.0 broadcast 10.5.255.255
[root@koala order]# ifconfig eth0|grep inet
inet 147.38.9.162 netmask 255.255.254.0 broadcast 147.38.9.255
[root@koala order]# firewall-cmd --list-ports --zone=public
8848/tcp
[root@koala order]# firewall-cmd --list-ports --zone=home
8848/tcp 3306/tcp
У меня есть докер-контейнер, в котором запускается java-программа, прослушивающая 8848, и другой докер-контейнер, в котором запускается mysql-программа, слушающая порт 3306. Я надеюсь открыть порт 3306 для java-программы, но не снаружи Мир, так что Java-программа может telnet 10.5.96.4:3306, но не 147.38.9.162:3306, поэтому я выполнил следующие команды:
firewall-cmd --zone=home --add-port=3306/tcp --permanent
firewall-cmd --reload
, но я не могу telnet mysql из Java-программы. затем я запустил следующее, чтобы открыть порт 3306 в публичной зоне
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
, теперь я могу telnet mysql из java-программы. Мне кажется странным, потому что я думаю, что зона - это взаимно-однозначное сопоставление с интерфейсом (eth0 или eth1), но это не так, что не так?