Рейтинг:1

NFS настаивает на отправке пакетов через MTU, nftables может быть решением

флаг id

У меня есть монтирование NFS через туннель Strongswan IPSec, который инкапсулирован в туннель 6to4. IPSec — потому что мне нужно шифрование для трафика NFS, 6to4 — потому что провайдер VPS не назначит собственный префикс IPv6 моему серверу. Поскольку у меня были проблемы с MTU на туннеле 6to4, мне пришлось понизить MTU на туннельном интерфейсе до минимума (1280 — если я попытаюсь установить что-то меньшее, я получаю сообщение «Ошибка: mtu меньше минимума устройства». ).

NFS по-прежнему хочет отправлять пакеты по MTU. Я знаю это, потому что у меня есть правило nftables для регистрации пакетов ESP:

    выход цепи {
    фильтр приоритета вывода обработчика типа фильтра; политика принять;
    ip6 nexthdr esp counter пакетов 303367 байт 323173696 log accept
}

Таким образом, я вижу эти пакеты, зарегистрированные в syslog/journal:

29 янв. 2001 LEN=1316 TC=0 HOPLIMIT=64 FLOWLBL=155038

(IP-адреса изменены на частные по соображениям конфиденциальности.)

Теперь я не вижу зарегистрированный пакет с tcpdump потому что якобы они отбрасываются ядром из-за превышения MTU.Я предполагаю, что NFS пытается придерживаться настройки MTU, но не знает, что ее пакеты будут инкапсулированы в IPSec. Таким образом, даже если NFS сгенерирует пакет размером менее 1280 байт, добавленный к нему заголовок ESP получит его с превышением установленного MTU. Я также подозреваю, что NFS устанавливает флаг DF на своих пакетах, потому что в противном случае работала бы фрагментация. (Я тестировал его с ping6 -M хочу и фрагментированные пакеты прошли.) Поэтому я не могу уменьшить MTU, NFS настаивает на отправке пакетов, которые будут превышать MTU при шифровании, и даже устанавливает флаг DF.

Что я могу сделать сейчас? Следующие вещи, о которых я думал, но не знаю, как реализовать:

  1. Установите максимальный размер пакета для NFS, например. с опцией монтирования, но я не думаю, что есть такая настройка, я уже искал ее.
  2. Настройте Strongswan для решения этой ситуации, но я тоже не нашел такой опции.
  3. Установите правило nftables, которое каким-то образом уведомляет NFS о том, что она должна генерировать пакеты меньшего размера. Например. сообщать о еще более низком MTU для NFS, когда он его ищет — не знаю, возможно ли это вообще.
  4. Снимите флаг DF с пакетов, чтобы принудительно выполнить фрагментацию. Я тоже не знаю, как это сделать, и возможно ли это.

Я думаю, что nftables — это то, что нужно, но если бы это можно было решить на уровне NFS, было бы еще лучше. Я также был бы признателен за решения с iptables, я мог бы посмотреть, что эквивалентно nftables.

Поскольку об этом спрашивают в комментариях, я предоставляю информацию о своих интерфейсах.

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state Режим UP DEFAULT group default qlen 1000
    ссылка/эфир aa:00:11:4d:f7:01 brd ff:ff:ff:ff:ff:ff
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    ссылка/сидение 192.168.32.84 одноранговый 216.66.84.42

А вот и туннели(IP-туннель):

sit0: ipv6/ip удаленный любой локальный любой ttl 64 nopmtudisc 6rd-prefix 2002::/16
he-ipv6: ipv6/ip удаленный 216.66.84.42 локальный 192.168.32.84 ttl 255 6-й префикс 2002::/16

(Изменил свой общедоступный IPv4 на частный адрес, но на самом деле у меня есть глобально маршрутизируемый адрес для местный; 216.66.84.42 — это туннельный шлюз HE 6to4, который хорошо известен, поэтому оставлен здесь.)

А вот маршрут по умолчанию, который применяется для трафика:

по умолчанию через fd48:2b50:6a95:a6db::1 dev he-ipv6 metric 1024 onlink pref medium

Таким образом, приложения считают, что их пакеты будут отправлены он-ipv6, который имеет MTU 1280. Но их пакеты сначала инкапсулируются в IPSec ESP, а затем отправляются через он-ipv6 туннель. Результатом является зашифрованный IPSec пакет данных NFS, инкапсулированный в пакет 6to4, который сам отправляется на eth0 интерфейс к 216.66.84.42 (шлюз HE).

drookie avatar
флаг za
Бит DF не применяется непосредственно к повторно инкапсулируемым пакетам — ядро ​​сетевого стека может действительно скопировать его или пропустить во вновь созданных пакетах, которые инкапсулируют полезную нагрузку DF, поэтому последние могут быть фрагментированы, даже если полезная нагрузка ограничивает их. . Так что ваша диагностика как минимум неполная. Не играйте с MTU, играйте с побитовым копированием DF.
флаг us
Пожалуйста, покажите вывод `ip link` и укажите, какие интерфейсы используются для этого трафика.
MegaBrutal avatar
флаг id
@TeroKilkanen, drookie, спасибо за ваши комментарии! Я исправил свой пост с моим интерфейсом и деталями туннеля. Пожалуйста, спросите, если вам нужно знать что-то еще.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.