Сейчас у меня следующая ситуация:
Я использую VPN (OpenVPN) через довольно нестабильное интернет-соединение. Это означает, что максимальная пропускная способность варьируется от 100 кбит / с до 1 Мбит / с. Всякий раз, когда соединение довольно нестабильно и есть большой трафик, я получаю много потерь пакетов, и все становится очень медленно. Чтобы предотвратить это, мне нужен какой-то механизм для управления максимальной пропускной способностью на основе потери / задержки пакетов, чтобы опуститься ниже порога, при котором пакеты отбрасываются массово. Я думал о наличии канала управления icmp (ping) для vpn-сервера, который постоянно анализируется с помощью какого-то скрипта, и если ping становится плохим или пакеты отбрасываются, максимальная пропускная способность будет скорректирована путем установки новой максимальной пропускной способности с использованием tc (для QoS).
Мои вопросы: 1. Можно ли это сделать уже с помощью tc? 2. Может быть, есть инструмент, который уже делает то, что я хочу?
Заранее спасибо и с наилучшими пожеланиями!
Я думаю, вы хотите найти способ формировать свой трафик до того, как произойдет инкапсуляция, например, внутри виртуальной машины с мостовым Ethernet. Ваш компьютер формирует и направляет вашу виртуальную машину, ваша виртуальная машина выполняет инкапсуляцию.
Более того, поскольку вы не можете установить скорость, вам следует использовать планировщик prio с tc. Поскольку TCP имеет механизм предотвращения перегрузки, а UDP - нет (за исключением QUIC), поместите UDP и TCP в разные qdiscs. Ваша проблема может заключаться в том, что потоки TCP снижают скорость, а UDP - нет.
Кроме того, в этом случае, когда вы не знаете скорость вашей линии, следует отдавать приоритет qdiscs TCP над qdiscs UDP, с одним исключением: потоки UDP с низкой скоростью и высоким приоритетом (DNS, NTP) должны иметь наивысший приоритет.