Проблема — не получается примонтировать NFS шар из Synology NAS. Основные симптомы: невозможно добавить NFS шар в Datacenter Storage (таймаут), команда mount зависает (на Proxmox-хостах, а также в CT и VM), rpcinfo -p <nas-host> тоже зависает.
Потратив целый день на разные попытки решения, возню с firewall, strace и tcpdump, я наконец-то догадался, что "rpcinfo -p <nas-host>" работает, если запускать от обычного пользователя, но зависает при запуске от root.
Разбираясь дальше со strace, стало ясно, что и rpcinfo, и mount зависают на системном вызове "connect" тогда, когда сокет связан (bind) с привилегированным локальным портом (меньше 1024). Если rpcinfo запускает обычный пользователь — сокет привязывается к высокому порту, и всё работает.
Поскольку mount должен запускаться от root, я заподозрил, что проблема может быть там же — и действительно, если принудительно указать опцию "noresvport" при монтировании, таймаут исчезает, и шар монтируется.
Оставшуюся часть дня я пытался понять, какая фича Linux/Debian/Proxmox может блокировать исходящие подключения с привязанными к привилегированным портам сокетами — безуспешно.
Перебрав почти все возможные варианты, я начал копать в умных коммутаторах, так как у них есть базовые возможности L3 — и в итоге обнаружил на TP-Link, к которому подключены мои Proxmox-хосты, в разделе "Security" опцию "DoS Protection" с разными типами защиты от DoS-атак. Среди них есть пункт "SYN sPort less 1024" — отключив его, всё заработало.
Теперь NFS отлично работает как в Datacenter Storage, так и везде, где root использует привилегированные низкие порты.
Погуглив "SYN sPort less 1024", я нашёл похожий пост, где кто-то уже решил эту проблему, но ни один из моих многочисленных поисков до него не привёл. Поэтому оставляю тут своё решение — вдруг кому-то поможет.
Документация TP-Link по этой функции и скриншот настройки.
Опция описывается так: "Атакующий отправляет нелегальный пакет с TCP SYN=1 и исходным портом меньше 1024."
Потратив целый день на разные попытки решения, возню с firewall, strace и tcpdump, я наконец-то догадался, что "rpcinfo -p <nas-host>" работает, если запускать от обычного пользователя, но зависает при запуске от root.
Разбираясь дальше со strace, стало ясно, что и rpcinfo, и mount зависают на системном вызове "connect" тогда, когда сокет связан (bind) с привилегированным локальным портом (меньше 1024). Если rpcinfo запускает обычный пользователь — сокет привязывается к высокому порту, и всё работает.
Поскольку mount должен запускаться от root, я заподозрил, что проблема может быть там же — и действительно, если принудительно указать опцию "noresvport" при монтировании, таймаут исчезает, и шар монтируется.
Оставшуюся часть дня я пытался понять, какая фича Linux/Debian/Proxmox может блокировать исходящие подключения с привязанными к привилегированным портам сокетами — безуспешно.
Перебрав почти все возможные варианты, я начал копать в умных коммутаторах, так как у них есть базовые возможности L3 — и в итоге обнаружил на TP-Link, к которому подключены мои Proxmox-хосты, в разделе "Security" опцию "DoS Protection" с разными типами защиты от DoS-атак. Среди них есть пункт "SYN sPort less 1024" — отключив его, всё заработало.
Теперь NFS отлично работает как в Datacenter Storage, так и везде, где root использует привилегированные низкие порты.
Погуглив "SYN sPort less 1024", я нашёл похожий пост, где кто-то уже решил эту проблему, но ни один из моих многочисленных поисков до него не привёл. Поэтому оставляю тут своё решение — вдруг кому-то поможет.
Документация TP-Link по этой функции и скриншот настройки.
Опция описывается так: "Атакующий отправляет нелегальный пакет с TCP SYN=1 и исходным портом меньше 1024."
