Quality of service w OpenWrt
Ostatnia zmiana: 2016-04-16 17:39
Użytkując łącze internetowe wraz z kilkoma osobami (komputerami) prędzej czy później zaistnieje sytuacja, kiedy jeden z osób całkowicie zajmuje pasmo np. ściągając plik, a inne nie mogą wtedy korzystać z internetu. Albo coś ściąga z www, albo np. gra i wymaga minimalnych opóźnień albo nagminnie korzysta z programów p2p. Wtedy z pomocą przychodzi QoS, czyli odpowiedni podział i priorytetowanie łącza. Łącze można dzielić na poszczególne adresy ip (wtedy określone adresy dostają określone pasmo gwarantowane i maksymalne), na usługi lub porty (wtedy ruch np. www ma pierwszeństwo na p2p) lub połączyć to wszystko w jedno. Poniżej przedstawiono dwa warianty: podział na usługi (pakiet
qos-scripts) oraz podział na adresy ip (pakiet
simpleshaper). Wszystkie te programy wykorzystują mechanizmy dostępne normalnie w linuksie - programy
tc oraz
iptables. Jeżeli ktoś ma już sprawdzoną i działającą konfigurację, zapewne da się ją przenieść do OpenWrt.
Ten poradnik z żaden sposób nie wyczerpuje tematu. Właściwe ustawienie QoS to temat-rzeka i wymaga wielu godzin prób i dopracowania konfiguracji.
qos-scripts
Zawarty jest standardowo w repozytorium OpenWrt. Instalacja sprowadza się do wydania polecenia
# opkg update
# opkg install qos-scripts
Konfiguracja zawarta jest w pliku
/etc/config/qos. Jest tam definicja klas i parametrów jakie definiują - wystarczy tylko ustawić parametry swojego łącza internetowego:
# uci set qos.wan.download=4096
# uci set qos.wan.upload=512
# uci commit qos
i zrestartować router. Parametry należy podać w kbps.
Należy zmierzyć ile faktycznie ma łącze (nie należy ufać ISP) - jeżeli podczas pomiarów wyjdzie że łącze ma 3,5Mbps a nie 4Mbps to taką rzeczywistą wartość należy podać. Najlepiej podać wartość lekko zaniżoną (np. o 10%).
simpleshaper
Jest to pakiet autorstwa Artura Wronowskiego i realizuje sztywny podział pasma na adresy IP (czyli mamy w sieci np. trzy komputery i każdemu przydzielamy określone pasmo).
Instalacja:
# opkg install simpleshaper
# /etc/init.d/simpleshaper enable
Konfiguracja zawarta jest w pliku
/etc/config/simpleshaper. Podobnie jak w poprzednim przypadku należy podać parametry naszego łącza:
# uci set simpleshaper.@settings[0].line_download=4096
# uci set simpleshaper.@settings[0].line_upload=512
# uci set simpleshaper.@settings[0].enabled=1
# uci commit simpleshaper
Parametry należy podać w kbps. Następnie należy zdefiniować poszczególne adresy ip:
# uci add simpleshaper shape
# uci set simpleshaper.@shape[-1].ip_addr=192.168.1.3
# uci set simpleshaper.@shape[-1].guaranted_dl=256
# uci set simpleshaper.@shape[-1].max_dl=512
# uci set simpleshaper.@shape[-1].guaranted_ul=256
# uci set simpleshaper.@shape[-1].max_ul=512
# uci commit simpleshaper
# /etc/init.d/simpleshaper start
gdzie:
- ip_addr - adres ip komputera
- guaranted_dl - gwarantowane pasmo pobierania
- max_dl - maksymalne pasmo pobierania
- guaranted_ul - gwarantowane pasmo wysyłania
- max_ul - maksymalne pasmo wysyłania
Ważna uwaga: suma pasma ze wszystkich adresów nie może przekroczyć przepustowości łącza internetowego zdefiniowanego w
line_download/line_upload. W innym przypadku QoS nie będzie działać poprawnie.
The Wonder Shaper
Skrypt ten ma być "złotym gralem" kształtowania transferu. Utworzony na podstawie kolejek HTB i SFQ ma za zadanie priorytetyzować ruch interaktywny przed resztą ("bulk") co ma zapobiec opóźnieniom i przestojom przy dużym obciążeniu ruchem. Przy okazji można także ograniczyć ruch na określonym interfejsie.
# opkg install wshaper
# uci set wshaper.settings.network=wan
# uci set wshaper.settings.downlink=4096
# uci set wshaper.settings.uplink=512
# uci commit wshaper
# /etc/init.d/wshaper start
# /etc/init.d/wshaper enable
W tym przypadku ograniczamy interfejs logiczny WAN na 4096kbps down i 512kbps up.
Inne skrypty
Konfiguracja QoS opiera się o tworzenie odpowiednich reguł z wykorzystaniem narzędzi
tc oraz
iptables. Poniżej linki prezentujące przykładowe konfiguracje.
https://forum.openwrt.org/viewtopic.php?id=23285http://openrouter.info/forum/viewtopic.php?f=30&t=125&p=5148#p5148