protocol-version

<proxy>

Версия протокола PROXY у этого прокси
в конфигурации это строкаprotocol-version proxy-protocol виртуального MTA, затем глобальная настройкавнутри блока <proxy>
Три уровня одной настройки

Строка задаёт версию заголовка протокола — 1 или 2.

Умолчание тут не значение, а цепочка. Не задана здесь — MTA смотрит proxy-protocol у адреса отправки, который пользуется этим прокси; не задана и там — берёт proxy-protocol уровня узла, где умолчание 1. Три уровня, и самый точный побеждает.

Разница между версиями практическая. Первая — текстовая строка, её понимают все. Вторая — двоичная и умеет нести дополнительные поля, а значит только с ней работает include-tlv и передача домена очереди.

Выбирает не узел, а прокси: ставить надо ту версию, которую понимает ваш прокси-сервер.

Главная ловушка — поставить вторую версию там, где прокси знает только первую. Он не разберёт заголовок, и соединение закроется. С точки зрения узла это обычный отказ прокси — он перейдёт к следующему в списке или уйдёт в повтор, не сообщив о причине.
Что делает Хаб. Не пишет: блоков <proxy> в конфигурации нет. Версию протокола Хаб задаёт строкой proxy-protocol 2 в каждом адресе отправки через прокси — ради передачи домена очереди гейту.
Рекомендуемые значения

Версию диктует прокси, а не узел:

Значение Когда
1 (умолчание цепочки) прокси старый или домен очереди не нужен
2 нужен include-tlv — передача домена очереди

Задавать её здесь стоит только тогда, когда прокси-серверы разные и версии у них не совпадают.

Обе версии, цепочка умолчаний из трёх уровней и требование второй версии для передачи полей — из руководства (§ 3.3.22.3, § 3.3.22.4). Замечание, что версию диктует прокси, — наше.
Пример в конфигурации
# версия задана у самого прокси: у соседнего она может быть другой
<proxy mta-proxy>
    server proxy.internal:9999
    client 16.80.77.101  client2.hostname.com
    protocol-version 2    include-tlv domain
</proxy>
Вторая строка снизу работает только при версии 2 — их и пишут парой.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается1 ошибка▶

Ставят версию 2 прокси, который знает только первую

наш опыт

Чем чреватоПрокси не разберёт заголовок и закроет соединение. Узел увидит обычный отказ и перейдёт к следующему прокси или в повтор — причина в его журнале не появится.
Как заметитьПрокси в списке первый, а работает всегда второй.
Как правильноСверить версию с настройкой прокси; при сомнении начинать с первой.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
protocol-version <integer>
Значения
1 или 2
Умолчание
proxy-protocol виртуального MTA, затем глобальная настройка § 3.3.22.3
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<proxy>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Строка живёт в <proxy> и перекрывает два уровня выше: сначала proxy-protocol у адреса отправки, затем такую же строку уровня узла. Побеждает самое точное — то есть эта.
Как проверить на узле
Со стороны узла версия не видна — проверять надо на прокси:
tcpdump -A -i any -c 20 'port 5000'
Первая версия начинается текстом PROXY TCP4 …, вторая — двоичной подписью. Смотреть надо на прокси или на пути к нему; на самом узле заголовок уходит уже в соединение.
В Хабе
Цена ошибки
с перерывом: применение прерывает работу узла
Сценарии
Отправка через прокси