Порты действительно не открыты после команды firewalld.

Вопрос или проблема

ОС: CentOS 7

Это вопрос, который граничит с двумя проблемами. У меня работает машина docker, где я недавно установил контейнер PLEX от linuxserver/plex. Текущая проблема заключается в том, что я не могу получить доступ к сайту для настройки PLEX https://localhost:32400/web. В попытках выяснить, почему это происходит, я заметил, что порт 32400 оказался закрытым, даже несмотря на то, что он должен был быть открыт при создании контейнера, я использую сетевой хост.

Я попытался проверить, смогу ли я получить доступ к сайту, используя curl

curl -i http://localhost:32400 
curl -i http://10.0.1.200:32400

Затем я проверил открытые порты с помощью NMAP

#nmap 10.0.1.200

Starting Nmap 6.40 ( http://nmap.org ) at 2019-01-18 12:52 CST
Nmap scan report for 10.0.1.200
Host is up (0.00049s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Таким образом, явно порт 32400 не открыт, поэтому я перешел в firewall-cmd

#sudo firewall-cmd --get-active-zones
public
  interfaces: eno1

#sudo firewall-cmd --zone=public --add-port=32400/tcp --permanent
success
#sudo firewall-cmd --reload
success

Я также проверил, открыт ли он

#sudo firewall-cmd --zone=public --list-ports
32400/tcp

Однако NMAP по-прежнему показывает, что он закрыт. Есть идеи, почему firewalld показывает открытый порт на хосте docker, но он на самом деле закрыт? Я даже не уверен, что это запустит сайт для Plex.


Подтверждение того, что Крамер предположил, что, возможно, мой интерфейс не был настроен

# ip addr
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.0.1.200/24 brd 10.0.1.255 scope global noprefixroute dynamic eno1


#firewall-cmd --zone=public --list-interfaces
eno1

убедитесь, что сетевой интерфейс успешно добавлен в зону “public”, обычно только сетевая карта по умолчанию добавляется (например, eth0).
Чтобы добавить интерфейс в зону:

#firewall-cmd --permanent --zone=public --add-interface=<interface_name>

Чтобы узнать, какие интерфейсы у вас есть, попробуйте:

#ipaddr

ИЛИ

#ifconfig

добавьте интерфейс, предоставляющий IP 10.0.1.200

В будущем, публикуя команды, которые вы выполняете, пожалуйста, также публикуйте вывод команды, это поможет понять и устранить проблему.

Надеюсь, это поможет 🙂

Ответ или решение

Чтобы разобраться с проблемой недоступности порта 32400 на вашем сервере CentOS 7 при использовании Plex в контейнере Docker, выполните следующие шаги.

Во-первых, вы уже правильно идентифицировали, что порт 32400, необходимый для работы Plex, не открыт, даже несмотря на попытки открыть его через firewalld. Однако следует учесть несколько моментов:

  1. Проверка конфигурации сети Docker: Поскольку вы используете host-сеть для Docker, контейнер должен иметь возможность прослушивать все открытые порты на хосте. Убедитесь, что контейнер Plex действительно настроен с использованием опции --network host. Вы можете проверить настройки контейнера с помощью команды:

    docker inspect <container_id>

    Убедитесь, что конфигурация сети соответствует вашим ожиданиям.

  2. Проверка службы Plex внутри контейнера: Убедитесь, что Plex действительно стартует и прослушивает нужный порт внутри контейнера. Для этого подключитесь к контейнеру:

    docker exec -it <container_id> /bin/bash

    И выполните команду:

    netstat -tuln | grep 32400

    Это поможет определить, работает ли на самом деле Plex на ожидаемом порту.

  3. Перепроведение проверки с помощью firewalld: Вы правильно добавили порт 32400 в список открытых портов для зоны public, но это может не полностью решить проблему. Чтобы убедиться в правильности настроек, выполните следующие команды:

    sudo firewall-cmd --zone=public --list-all

    Убедитесь, что интерфейс eno1 действительно привязан к зоне public и что порт 32400 отображается в списке.

  4. Обновление и рестарт firewalld и Docker: Попробуйте перезапустить службы для обновления состояния сетевых правил:

    sudo systemctl restart firewalld
    sudo systemctl restart docker

    Это может помочь применить все изменения в конфигурации.

  5. Углубленная диагностика с мостом и контейнеризацией: Если все указанные шаги выполнены, а проблема остается, проверьте на уровне ядра маршрутизацию и правила iptables, чтобы убедиться, что ничего не блокирует трафик.

Если после выполнения всех вышеуказанных рекомендаций проблема сохраняется, подумайте о том, чтобы обратиться к более глубоким журнальным логам системы или использовать утилиты типа tcpdump для анализа трафика и выявления проблемы.

Эти шаги помогут вам детально разобрать и решить вопрос с недоступностью портов, следуя лучшим практикам администрирования систем на основе Docker и CentOS.

Оцените материал
Добавить комментарий

Капча загружается...