Назад | Перейти на главную страницу

Невозможно подключиться к службам, привязанным к 127.0.0.1

У меня есть сервер Debian wheezy, на котором запущено несколько веб-приложений, база данных MongoDB и сервер Redis за сервером NGinx. Только сервер NGinx является общедоступным, а другие службы проксируются за ним. Эта установка отлично работала до тех пор, пока два дня назад не произошло временное отключение электроэнергии в центре обработки данных, где находится мой сервер. После перезагрузки и регулярного обслуживания после сбоя (удаление файлов блокировки, восстановление БД и т. Д.) Я заметил, что время ожидания NGinx истекло для каждой службы, которую он прокси. Вот шаги, которые я предпринял, чтобы попытаться решить проблему:

  1. Проверить журналы
    Я проверил журналы для каждой службы, и все чисто, без ошибок (кроме того, что NGinx сообщает о тайм-ауте восходящего соединения).

  2. Проверить работу служб
    Все процессы для приложения WSGI, MongoDB и т. Д. Запущены, и я также проверил netstat:

    # netstat -ntple
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      0          21730537    1469/nginx      
    tcp        0      0 0.0.0.0:2525            0.0.0.0:*               LISTEN      1000       21730714    1511/python     
    tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      1000       21730931    1627/python     
    tcp        0      0 0.0.0.0:2022            0.0.0.0:*               LISTEN      0          21730651    1553/sshd       
    tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      1000       21730885    1624/python     
    tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      104        21730531    1376/mongod     
    tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      105        21730621    1532/redis-server *
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1000       21730731    1500/python     
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          21730536    1469/nginx      
    tcp6       0      0 :::2022                 :::*                    LISTEN      0          21730654    1553/sshd       
    tcp6       0      0 :::6379                 :::*                    LISTEN      105        21730619    1532/redis-server *
    
  3. Проверьте интерфейс обратной связи и пинг 127.0.0.1
    Интерфейс обратной связи правильно настроен в /etc/network/interfaces и ifconfig сообщает об этом и работает. Я также могу без проблем пинговать 127.0.0.1 и localhost.

  4. Отключить брандмауэр
    Отключение брандмауэра ситуацию не изменило. Время ожидания соединения все еще истекает.

  5. Попробуй подключиться через телнет
    Я попытался подключиться к одной из служб по telnet, и именно здесь я заметил странную картину:

    # telnet 127.0.0.1 6379
    Trying 127.0.0.1...
    telnet: Unable to connect to remote host: Connection timed out
    
    # telnet ::1 6379
    Trying ::1...
    Connected to ::1.
    Escape character is '^]'.
    

Когда я пытаюсь подключиться к службе (Redis в этом примере) через IPv4, время ожидания истекает, но если я пытаюсь подключиться через IPv6, он подключается мгновенно. Есть ли какой-либо файл, связанный с подключением IPv4, который может вызвать такое поведение? Есть ли способ исправить это без повторного создания образа сервера?

Обновить

После прочтения ответа SYN я попытался подключиться к той же службе (см. Выше), но вместо этого использовал общедоступный IP-адрес моего сервера (но все еще изнутри сервера), и он мгновенно подключается. Я так понимаю, что он работает, потому что он слушает 0.0.0.0, который принимает соединения на любом интерфейсе. Но подключение из 127.0.0.1 по-прежнему не работает, как и подключение к службе, которая специально прослушивает 127.0.0.1. Тогда я пришел к выводу, что проблема с моим интерфейсом обратной связи (на IPv4) действительно существует. Вот результат ifconfig :

# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7984 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7984 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:711801 (695.1 KiB)  TX bytes:711801 (695.1 KiB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:35812 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47530 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2568793 (2.4 MiB)  TX bytes:34332070 (32.7 MiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:*public ip*  P-t-P:*public ip*  Bcast:*public ip*  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

Есть ли что-то оттуда, что могло бы объяснить неисправность интерфейса обратной связи? Есть ли другой файл журнала или конфигурации, который я пропустил, который мог бы объяснить или потенциально исправить проблемы, которые у меня возникают с этим интерфейсом?

Обновление 2

Быстрое обновление, чтобы добавить, что мой сервер - это VPS под OpenVZ. Из моих (продолжающихся) поисков в Google я обнаружил, что OpenVZ работает с сетями немного иначе, чем другие платформы, поэтому я включаю эту информацию сюда, чтобы потенциально направить нас в правильном направлении. Однако из того, что я видел, никто, у кого была проблема, отдаленно похожая на мою, похоже, не нашел решения ... (например, эта почта из Unix и Linux StackExchange).

Готов поспорить, вы можете подключить Redis к своему IPv4. Если Redis не слушает 127.0.0.1:6379, вы не можете подключиться (или по telnet) к localhost.

Не достаточно знаком с IPv6, чтобы объяснить, почему он работает.

Опять же, я сомневаюсь, что прокси-сервер nginx направляет трафик на redis. Можете ли вы показать нам, какие виртуальные хосты включены? Это нормально, что ваши процессы Python слушают 0.0.0.0? Если это так, вам, вероятно, следует снова включить все отключенные вами правила брандмауэра.


Обновление, чтение обновлений OP:

Приятно видеть, что ты что-то нашел. Между тем, мое первое замечание относительно подключения к localhost было совершенно неправильным, извиняюсь.