2

У меня есть установка, которая работала довольно хорошо в последние годы, но перестала работать несколько дней назад. В моей гостиной у меня есть "голая металлическая" машина с несколькими виртуальными машинами. Одна из виртуальных машин отвечает за мою электронную почту (dovecot, postfix), другая отвечает за HTTP/S-сервер (nginx). Каждый из этих двоих устанавливает соединение OpenVPN с каплей в Digital Ocean. У дроплета есть правила брандмауэра (iptables), которые пересылают пакеты клиенту OpenVPN, ответственному за пакет: если он идет на порт 80, перенаправьте его на внутреннюю виртуальную машину с nginx. Если это пакет, связанный с электронной почтой, перешлите на виртуальную машину электронной почты.

Так как несколько дней назад что-нибудь связанное с TLS перестало работать (см. правки). SMTP-транзакции будут зависать во время фазы STARTTLS, HTTPS-соединения будут зависать во время согласования TLS. Все остальное работает нормально: обычный HTTP соединения выполнены (см. правки), и если я отключу TLS на postfix, письма приходят очень хорошо.

Кроме того, если я нахожусь в той же сети и добавляю имя хоста в /etc/hosts с внутренним IP-адресом виртуальной машины, я получаю HTTPS и STARTTLS для нормальной работы. Это просто не работает, если соединение исходит "извне" (т.е. из туннеля).

Если я переключаю интернет-соединение с "чистого металла" на мобильное соединение для передачи данных моего телефона, оно также работает как положено.

В общем, мне кажется , что мой роутер и / или мой провайдер играет ключевую роль в этом уравнении, но я просто не могу принять его, потому что трафик в / из виртуальной машины идет через OpenVPN (зашифрованный). Если я уже что-то узнал, так это то, что простое объяснение обычно является правильным, и единственное объяснение, которое я нахожу, совсем не простое, поэтому меня интересуют другие возможные причины этой проблемы.

Что я уже пробовал:

  • Еще одна виртуальная машина на голом железе с другой ОС: не работает
  • Raspberry Pi в моей внутренней сети как клиент OpenVPN с nginx: не работает
  • Еще одна капля как OpenVPN клиент с nginx: работает
  • Виртуальная машина на моем ноутбуке в качестве клиента OpenVPN с nginx: не работает
  • Мой ноутбук подключен к Интернету через мобильное соединение для передачи данных моего телефона, а также сценарий выше: работает
  • Сервер OpenVPN у другого поставщика (Amazon EC2): не работает

Журналы, которые могут помочь:

TCP-дамп с внутренней ВМ

TCP-дамп с сервера OpenVPN (Droplet)

Правила брандмауэра для дроплета

Успешное подключение из общедоступного Интернета к внутренней виртуальной машине через Droplet через порт 80

Пример подключения, которое зависает при подключении из общедоступного Интернета к внутренней виртуальной машине через Droplet через порт 443

Успешное соединение из внутренней сети через порт 443

Редактировать:

Wireshark log для ВМ

Wireshark log для сервера OpenVPN

Изменить 2:

Я проверил это немного больше и создал новый vhost на nginx с самоподписанным сертификатом. Кажется, что обмен данными между сервером OpenVPN и виртуальной машиной пошел дальше, но не завершился:

Wireshark log для ВМ

Wireshark log для сервера OpenVPN

Изменить 3:

Похоже, в конце концов, речь идет вовсе не о TLS. Это "совпадение", что это происходило всякий раз, когда включался TLS, но я убежден, что речь идет о размере пакета: устранение "принудительного перенаправления" в nginx, которое перенаправляет все HTTP-соединения на HTTPS, я вижу, что проблема также возникает для HTTP-соединения, когда полезная нагрузка превышает несколько килобайт.

Я также проверил отключение маршрутизатора / модема от оптоволоконного соединения моего интернет-провайдера и заставил его использовать USB-модем от моего телефона, чтобы проверить, была ли проблема на маршрутизаторе / модеме, и это сработало. Итак, похоже, что проблема сейчас изолирована.

0