У нас проблема в том, что подключение из нескольких клиентских сетей через Wireguard Tunnel к общему ресурсу Samba на сервере происходит медленно, но, как ни странно, это влияет только на Windows 10 и только на загрузку.
Хост Linux может загружать со скоростью до 120 МБ / с, в то время как Windows может загружать только со скоростью 10-50 МБ / с (это зависит от разных сетей). Это не ограничивается кем-л. Я получаю точно такие же результаты тестов с Iperf (udp и tcp).
Из любопытства я проверил, затронута ли и Windows 11, и это не ! Что это может быть и как это исправить?
Похоже, это та же или, по крайней мере, похожая проблема, описанная Dropbox (https://dropbox.tech/infrastructure/boosting-dropbox-upload-speed ). Насколько я понимаю (пожалуйста, поправьте меня!), когда Linux Gateway использует несколько очередей NIC с Wireguard, происходит много переупорядочения пакетов, и, по-видимому, Windows 10 не справляется с этим слишком хорошо. Переупорядочивание пакетов каким-то образом заставляет Windows 10 замедлять скорость отправки, ожидая подтверждения почти после каждого отправленного пакета данных вместо отправки нескольких пакетов и принятия выборочных подтверждений.
К сожалению, я забыл сделать скриншоты проанализированных мной сеансов Wireshark, но было очень хорошо видно, что при загрузке хост Windows обычно получает около 10-20 пакетов данных tcp перед отправкой подтверждения. Но при загрузке я получил подтверждение TCP для каждого отправленного пакета данных.
Чтобы исправить это, отключите многоканальную очередь на хосте Linux.
ethtool -L PHYSICAL_LOCAL_INTERFACE combined 1
ethtool -L PHYSICAL_NETWORK_INTERFACE combined 1
Чтобы увидеть, была ли она применена, можно использовать
ethtool -l INTERFACENAME
Channel parameters for INTERFACENAME:
Pre-set maximums:
RX: 0
TX: 0
Other: 1
Combined: 63
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 1
Последняя строка должна быть 1. Приведенная выше команда устанавливает это только временно, чтобы сделать ее постоянной, необходимо использовать специальные инструменты дистрибутива. Для Debian это может быть что-то вроде этого:
cat /etc/network/interfaces
auto INTERFACE
iface INTERFACE inet static
address IPADDR
netmask NETMASK
gateway GATEWAY
# This is the relevant line
post-up ethtool -L INTERFACE combined 1
Это может создать узкое место, если шлюз не имеет сильного процессора. Мы используем 8-ядерные процессоры AMD EPYC 7262 и получаем полную скорость загрузки и загрузки 1 Гбит с использованием ~ 70% одного ядра.
Экспериментальный драйвер ядра, добавленный в выпуске 0.4.8, нарушил скорость загрузки Windows. Просто запускайте более старую версию, пока ее не исправят.
https://download.wireguard.com/windows-client/wireguard-amd64-0.4.7.msi