С помощью предложенного решения можно для явно выбранных вами приложений Windows использовать свой путь сетевого трафика с помощью DSCP-меток.
Эти метки согласно стандартам служат для совсем иных целей, поэтому считаю своим долгом упомянуть это явно. Несмотря на то, что по умолчанию Windows не ставит на сетевые пакеты DSCP-метки могут быть случаи, когда QoS вам окажется дороже предложенной возможности. Решение лучше не применять на относительно «узких» каналах связи, таких как 3G или ADSL, где ощущается потребность в приоритезации трафика. Кроме того, желательно проводное подключение между роутером и Windows PC, т.к. беспроводные адаптеры используют DSCP-метки для WMM и необходимых настроек у адаптера скорее всего просто не будет.
Требования
- Windows начиная с XP или Server 2003 и выше в качестве клиента,
- Сетевой адаптер клиента с поддержкой 802.1Q (почти любой современный проводной),
- Прошивка 3.5 и выше. Должны быть отключена приоритезация трафика и IntelliQoS, чтобы прошивка не использовала DSCP-метки,
- Развёрнутая среда Entware,
- Рабочее VPN-соединение или EoIP/GRE-туннель поверх провайдерского, по которому будет идти трафик от выбранных приложений.
Настройки в Windows
«Окраска» трафика приложений в Windows DSCP-метками входит в штатный функционал и не требует установки дополнительных утилит.
Необходимо убедиться в том, что на сетевом адаптере включена поддержка 802.1Q. В разделе Дополнительно
параметр называется Приоритет & VLAN
(Packet Priority & VLAN
) или похоже.
В редакторе реестра (regedit.exe) откройте раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
и создайте DWORD-параметр с именем DisableUserTOSSetting
и значением 0
. Затем откройте раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Qos
, если такового нет — создайте. Здесь создайте параметр типа String
с именем Do not use NLA
и значением 1
.
Теперь в редакторе групповых политик (gpedit.msc) перейдите в раздел Политика “Локальный компьютер” → Конфигурация компьютера → Конфигурация Windows → QoS на основе политики” (“Computer configuration → Windows Settings → Policy-based QoS” в англоязычной версии), кликните на разделе правой кнопкой и выберите пункт Создать новую политику
. В появившемся мастере присвойте политике логичное имя и укажите значение DSCP, отличное от нуля. В примере ниже используется 63
. На следующем шаге выберите вариант Применять политику… только к приложениям с именем исполяемого файла
и укажите полный путь или только имя исполняемого файла для выбранной программы, например, chrome.exe
. На последующем шаге мастера можно оставить значения по умолчанию Любой исходный IP-адрес/Любой конечный IP-адрес
, на последнем в пункте Протокол, к которому применяется политика QoS
укажите TCP и UDP
. Завершите работу мастера и перегрузите клиентский компьютер, чтобы настройки вступили в силу.
Настройка роутера
В примере трафик с выбранного Windows приложения направляется в OpenVPN-туннель, имеющий имя интерфейса ovpn_br0
. Для сопоставления между установленным VPN-соединением и именем интерфейса посмотрите вывод команды ip addr
и найдите интерфейс, имеющий такой же IP-адрес как в веб-интерфейсе кинетика.
Установите необходимые пакеты:
opkg install iptables
Добавьте скрипты, которые периодически будет вызывать прошивка. Первый, /opt/etc/ndm/fs.d/100-create_routing_table.sh
:
#!/bin/sh
[ "$1" != "start" ] && exit 0
### Load additional module
insmod /lib/modules/$(uname -r)/xt_dscp.ko
### Create routing table for marked packets
ip rule add fwmark 1 table 1001
exit 0
Второй, /opt/etc/ndm/netfilter.d/100-fwmarks.sh
:
#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "mangle" ] && exit 0
if [ -z "$(iptables-save | grep 'dscp')" ]; then
iptables -w -A PREROUTING -i br0 -t mangle -m dscp --dscp 63 -j MARK --set-mark 1
ip route add default dev ovpn_br0 table 1001
fi
exit 0
и не забудьте сделать их исполняемыми:
chmod +x /opt/etc/ndm/fs.d/100-create_routing_table.sh
chmod +x /opt/etc/ndm/netfilter.d/100-fwmarks.sh
Если всё сделали правильно, после перезагрузки роутера будет:
- поднято VPN-соединение,
- создана отдельная таблица роутинга, которая будет им пользоваться,
- пакеты от Windows-приложения с DSCP-меткой, равной 63 будут помещаться в эту таблицу.
Использование
В примере выше маркирование трафика браузера chrome.exe
демонстрируется для наглядности: открыв в двух разных браузерах сервис oip.cc или подобный, можно наглядно убедиться в том, что трафик от разных браузеров идёт разными путями. Вместо браузера может быть приложение с гео-ограничениями или приложение, использующее корпоративные ресурсы по VPN. Можно расставлять разные метки разным приложениям или использовать одну и ту же для нескольких.
Диагностика проблем
Сперва убедитесь, что от клиента на роутер приходят пакеты с DSCP-меткой, вывод tcpdump
во время работы приложения должен быть ненулевой:
opkg install tcpdump
tcpdump -i br0 -vvv "(ip[1] & 0xfc) >> 2 == 63"
Далее убедитесь в существовании отдельной таблицы роутинга меченых пакетов:
ip rule list
…
9: from all fwmark 0x1 lookup 1001
…
В том, что в ней есть правило направления трафика через VPN-соединение:
ip route list table 1001
…
default dev ovpn_br0 scope link
И в том, что действует правило netfilter для пометки пакетов:
iptables-save | grep dscp
Удачи в начинаниях!