#ipv6 #mail 

Приличное время не работала почта по IPv6

Мне тут написали, что до моего IPv6 почтового адреса ужасно ходят
ping-и. Один пакет ICMP ответа приходит, а дальше только потери. Хотел
было ответить, что у домашнего провайдера реально бывают настолько
загруженные каналы, что ping-и по сотни миллисекунд и далеко не нулевые
потери пакетов до моих VPS не редки.

Однако, на момент проверки у меня были вполне себе работающие каналы и
до VPS-ок ни проблем, ни аномалий не было. С работы проверил:
действительно, ping почти не работающий.

tcpdump показал, что запросы без проблем приходят на домашний сервер, но
ответ, кроме первого пакета, уходит на другой интерфейс. В этом то и
проблема. Ну а точнее в кривых руках и недостаточной проверке работы
после возни с firewall-ом.

Почему такой геморрой? "Обычная" IPv6 /48 сеть у меня находится на одной
VPS-ке. С ней связан WireGuard и через него у меня идёт почти весь IPv6
трафик. Это маршрут по умолчанию.

Но на моём предыдущем VPS для IPv6 были проблемы с SMTP трафиком. Он
резался. Не полностью, но после какого-то кол-ва пакетов, даже STARTTLS
мог пройти. Из-за этого почта от Google не ходила совсем: они не
пытаются попробовать попытку доставки по IPv4. Возможно детали уже забыл
и что-то напутал, но SMTP трафик именно на той VPS не работал. Поэтому я
выделил один IPv6 адрес для входящей почты на другой VPS, где почтовый
трафик точно работал без проблем. Там поднят NDP proxy. IPv6 до этого
выделенного адреса приходит на VPS, она за счёт маршрутизации отправляет
в WireGuard до моего домашнего сервера. Если ничего больше не
предпринимать, то трафик с другой VPS то приходить будет, но уходить то
IP пакеты будут всё равно по маршруту по умолчанию -- на другую VPS, с
другой сетью. Что, конечно же, сразу потеряется там на выходе.

Поэтому надо указать явно этим IP пакетам на особом адресе, чтобы они
использовали другую таблицу forwarding. Конкретно у меня это делается
одной строчкой:
    $add setfib 1 ip6 from 2a04:ac00:a:146::2525 to any
где FIB=1 это таблица с default маршрутом идущим на VPS-ку:
    -- /etc/rc.conf --
    ipv6_route_smtp_mail3="default -iface wg_mail3 -fib 1"
То есть, мы говорим, чтобы IP пакеты с ::2525 отправлялись по умолчанию
назад в эту VPS-ку.

Это правило когда-то у меня было где-то там высоко в скрипте настройки
firewall. Сколько то времени назад я его прооптимизировал: зачем его
проверять напротив каждого проходящего IP пакета? Нужно же только, как
минимум, для IPv6. Вот и переместил его в абзац связанный с IPv6. В
начале скрипта есть такие правила:

    $add skipto 02000 ip4 from any to any in
    $add skipto 04000 ip4 from any to any out
    $add skipto 08000 ip6 from any to any in
    $add skipto 10000 ip6 from any to any out

создающие цепочки правил для in/out v4/v6 пакетов. Вот только правило
надо применять для исходящих пакетов, а я засунул в цепочку для входящих.

Кстати, ведь в прошлом году я сменил VPS-ку для /48 на другую компанию.
И наверное даже не проверял работает ли на ней SMTP трафик. А может и
проверял и он работал. Но уже просто было лень трогать все эти костыли.
Так и остаётся подобный setup как исторически сложившийся.

    [оставить комментарий]