У меня есть удаленный хост, работающий на centos 7 с общедоступным IP-адресом 147.38.9.162 и LAN 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), но это не так, что не так?