Last active
March 12, 2024 20:28
-
-
Save heri16/3ddac62f622ace7c90b9c34c2f74d37c to your computer and use it in GitHub Desktop.
Openwrt Qosify Dual Stack script - based on https://forum.openwrt.org/t/qosify-new-package-for-dscp-marking-cake/111789/728
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Measure Bandwidth (using https://www.speedtest.net/apps/cli) | |
#wget https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz -O /tmp/speedtest.tgz | |
wget https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-aarch64.tgz -O /tmp/speedtest.tgz | |
tar -xzvf /tmp/speedtest.tgz -C /usr/sbin/ | |
rm -f /tmp/speedtest.tgz /usr/sbin/speedtest.* | |
chmod +x /usr/sbin/speedtest | |
/etc/init.d/qosify stop | |
speedtest --format=tsv > /tmp/speedtest.tsv && | |
BANDWIDTH_DOWN="$(($(cut -f6 /tmp/speedtest.tsv) / 125000))mbit" && | |
BANDWIDTH_UP="$(($(cut -f7 /tmp/speedtest.tsv) / 125000))mbit" | |
echo BANDWIDTH_DOWN="${BANDWIDTH_DOWN}" | |
echo BANDWIDTH_UP="${BANDWIDTH_UP}" | |
# Manually set bandwidth | |
#BANDWIDTH_UP="100mbit" | |
#BANDWIDTH_DOWN="100mbit" | |
# Edit this according to your ISP | |
WAN_DEV="pppoe-wan" | |
OVERHEAD_TYPE="none" | |
INGRESS_EGRESS_OPTIONS="" | |
#OVERHEAD_TYPE="ethernet" | |
#INGRESS_EGRESS_OPTIONS="ether-vlan" | |
INGRESS_OPTIONS="" | |
EGRESS_OPTIONS="wash" | |
###################################### | |
# JESUS CHRIST IS THE LORD! AMEN # | |
###################################### | |
# Reset qosify config to defaults | |
cat /etc/config/qosify-opkg > /etc/config/qosify | |
# Qosify | |
# Clear default config | |
uci del qosify.@defaults[0].dscp_prio | |
uci del qosify.@defaults[0].prio_max_avg_pkt_len | |
uci del qosify.besteffort | |
uci del qosify.bulk | |
uci del qosify.video | |
uci del qosify.voice | |
# ICMP (ping) and default class for "unmarked traffic" | |
uci set qosify.@defaults[0].dscp_icmp="+besteffort" | |
uci set qosify.@defaults[0].dscp_default_tcp="unmarked_traffic" | |
uci set qosify.@defaults[0].dscp_default_udp="unmarked_traffic" | |
# unmarked_traffic class | |
uci set qosify.unmarked_traffic=class | |
uci set qosify.unmarked_traffic.ingress="CS1" | |
uci set qosify.unmarked_traffic.egress="CS1" | |
uci set qosify.unmarked_traffic.prio_max_avg_pkt_len="1256" | |
uci set qosify.unmarked_traffic.dscp_prio="CS4" | |
uci set qosify.unmarked_traffic.bulk_trigger_pps="250" | |
uci set qosify.unmarked_traffic.bulk_trigger_timeout="10" | |
uci set qosify.unmarked_traffic.dscp_bulk="CS1" | |
# browsing class | |
uci set qosify.browsing=class | |
uci set qosify.browsing.ingress="CS0" | |
uci set qosify.browsing.egress="CS0" | |
uci set qosify.browsing.prio_max_avg_pkt_len="575" | |
uci set qosify.browsing.dscp_prio="AF41" | |
uci set qosify.browsing.bulk_trigger_pps="1000" | |
uci set qosify.browsing.bulk_trigger_timeout="10" | |
uci set qosify.browsing.dscp_bulk="CS1" | |
# bulk class | |
uci set qosify.bulk=class | |
uci set qosify.bulk.ingress="CS1" | |
uci set qosify.bulk.egress="CS1" | |
# besteffort class | |
uci set qosify.besteffort=class | |
uci set qosify.besteffort.ingress="CS0" | |
uci set qosify.besteffort.egress="CS0" | |
# network_services class | |
uci set qosify.network_services=class | |
uci set qosify.network_services.ingress="CS2" | |
uci set qosify.network_services.egress="CS2" | |
# broadcast_video class | |
uci set qosify.broadcast_video=class | |
uci set qosify.broadcast_video.ingress="CS3" | |
uci set qosify.broadcast_video.egress="CS3" | |
# gaming class | |
uci set qosify.gaming=class | |
uci set qosify.gaming.ingress="CS4" | |
uci set qosify.gaming.egress="CS4" | |
# multimedia_conferencing class | |
uci set qosify.multimedia_conferencing=class | |
uci set qosify.multimedia_conferencing.ingress="AF42" | |
uci set qosify.multimedia_conferencing.egress="AF42" | |
uci set qosify.multimedia_conferencing.prio_max_avg_pkt_len="575" | |
uci set qosify.multimedia_conferencing.dscp_prio="AF41" | |
# telephony class | |
uci set qosify.telephony=class | |
uci set qosify.telephony.ingress="EF" | |
uci set qosify.telephony.egress="EF" | |
# Reorder classes | |
uci reorder qosify.unmarked_traffic=1 | |
uci reorder qosify.browsing=2 | |
uci reorder qosify.bulk=3 | |
uci reorder qosify.besteffort=4 | |
uci reorder qosify.network_services=5 | |
uci reorder qosify.broadcast_video=6 | |
uci reorder qosify.gaming=7 | |
uci reorder qosify.multimedia_conferencing=8 | |
uci reorder qosify.telephony=9 | |
# CAKE | |
uci set qosify.wan.disabled="1" | |
uci set qosify.wandev.name="$WAN_DEV" | |
uci set qosify.wandev.disabled="0" | |
uci set qosify.wandev.bandwidth_up="$BANDWIDTH_UP" | |
uci set qosify.wandev.bandwidth_down="$BANDWIDTH_DOWN" | |
uci set qosify.wandev.overhead_type="$OVERHEAD_TYPE" | |
uci del qosify.wandev.bandwidth | |
uci set qosify.wandev.ingress="1" | |
uci set qosify.wandev.egress="1" | |
uci set qosify.wandev.mode="diffserv4" | |
uci set qosify.wandev.nat="1" | |
uci set qosify.wandev.host_isolate="1" | |
uci set qosify.wandev.autorate_ingress="0" | |
uci set qosify.wandev.ingress_options="$INGRESS_OPTIONS" | |
uci set qosify.wandev.egress_options="$EGRESS_OPTIONS" | |
uci set qosify.wandev.options="$INGRESS_EGRESS_OPTIONS" | |
# Rules | |
cat << "EOF" > /etc/qosify/00-defaults.conf | |
# SSH | |
tcp:22 network_services | |
# NTP | |
udp:123 network_services | |
# DNS | |
tcp:53 network_services | |
tcp:5353 network_services | |
udp:53 network_services | |
udp:5353 network_services | |
# DNS over TLS (DoT) | |
tcp:853 network_services | |
udp:853 network_services | |
# HTTP/HTTPS/QUIC | |
tcp:80 browsing | |
tcp:443 browsing | |
udp:80 browsing | |
udp:443 browsing | |
# Apple (Download) | |
dns:*appldnld.apple.* bulk | |
dns:*gg.apple.* bulk | |
dns:*gnf-mdn.apple.* bulk | |
dns:*gnf-mr.apple.* bulk | |
dns:*gs.apple.* bulk | |
dns:*ig.apple.* bulk | |
dns:*mesu.apple.* bulk | |
dns:*ns.itunes.apple.* bulk | |
dns:*oscdn.apple.* bulk | |
dns:*osrecovery.apple.* bulk | |
dns:*skl.apple.* bulk | |
dns:*swcdn.apple.* bulk | |
dns:*swdist.apple.* bulk | |
dns:*swdownload.apple.* bulk | |
dns:*swpost.apple.* bulk | |
dns:*swscan.apple.* bulk | |
dns:*updates-http.cdn-apple.* bulk | |
dns:*updates.cdn-apple.* bulk | |
dns:*xp.apple.* bulk | |
# Microsoft (Download) | |
dns:*1drv.ms bulk | |
dns:*backblaze.* bulk | |
dns:*backblazeb2.* bulk | |
dns:*ms-acdc.office.* bulk | |
dns:*onedrive.* bulk | |
dns:*sharepoint.* bulk | |
dns:*update.microsoft.* bulk | |
dns:*windowsupdate.* bulk | |
# MEGA (Download) | |
dns:*mega.io bulk | |
dns:*mega.nz bulk | |
# Dropbox (Download) | |
dns:*dropboxusercontent.* bulk | |
# Google (Download) | |
dns:*drive.google.* bulk | |
dns:*googleusercontent.* bulk | |
dns:*1e100.net bulk | |
# Steam (Download) | |
dns:*steamcontent.* bulk | |
dns:*steamusercontent.* bulk | |
# Epic Games (Download) | |
dns:*download.epicgames.* bulk | |
dns:*download2.epicgames.* bulk | |
dns:*download3.epicgames.* bulk | |
dns:*download4.epicgames.* bulk | |
dns:*epicgames-download1.* bulk | |
# Playstation (Download) | |
dns:*dl.playstation.* bulk | |
# Whatsapp (Download) | |
dns:*mmg-fna.whatsapp.* bulk | |
# YouTube (Upload) | |
dns:*upload.youtube.* bulk | |
dns:*upload.video.google.* bulk | |
dns:*gvt1.com bulk | |
# Akamai (CDN) | |
dns:*akamaihd.* besteffort | |
# Whatsapp (CDN) | |
dns:*cdn.whatsapp.* besteffort | |
# Google (Services) | |
dns:google.* besteffort | |
dns:*.google.* besteffort | |
dns:*googletagmanager.com besteffort | |
dns:*googleapis.com besteffort | |
# YouTube (Streaming) | |
dns:*googlevideo.* besteffort | |
# Facebook (Streaming) | |
dns:*fbcdn.* besteffort | |
# Twitch (Streaming) | |
dns:*ttvnw.* besteffort | |
# TikTok (Streaming) | |
dns:*tiktok.* besteffort | |
# Netflix (Streaming) | |
dns:*nflxvideo.* besteffort | |
# Amazon Prime Video (Streaming) | |
dns:*aiv-cdn.* besteffort | |
dns:*aiv-delivery.* besteffort | |
dns:*pv-cdn.* besteffort | |
# Disney Plus (Streaming) | |
dns:*disney.* besteffort | |
dns:*dssott.* besteffort | |
# HBO (Streaming) | |
dns:*hbo.com besteffort | |
dns:*hbomaxcdn.* besteffort | |
# Vevo (Streaming) | |
dns:*vevo.com besteffort | |
dns:*vevoprd.* besteffort | |
# Spotify (Streaming) | |
dns:*pscdn.* besteffort | |
dns:*scdn.* besteffort | |
dns:*spotifycdn.* besteffort | |
# Deezer (Streaming) | |
dns:*dzcdn.* besteffort | |
# Soundcloud (Streaming) | |
dns:*sndcdn.* besteffort | |
# Last.fm (Streaming) | |
dns:*last.fm besteffort | |
# Reddit (Streaming) | |
dns:*v.redd.it besteffort | |
# BitTorrent | |
tcp:6881-7000 bulk | |
tcp:51413 bulk | |
udp:6771 bulk | |
udp:6881-7000 bulk | |
udp:51413 bulk | |
# Usenet | |
tcp:119 bulk | |
tcp:563 bulk | |
# Live Streaming to YouTube Live, Twitch, Vimeo and LinkedIn Live | |
tcp:1935-1936 broadcast_video | |
tcp:2396 broadcast_video | |
tcp:2935 broadcast_video | |
# Xbox | |
tcp:3074 gaming | |
udp:88 gaming | |
#udp:500 gaming # UDP port already used in "VoWiFi" rules | |
udp:3074 gaming | |
udp:3544 gaming | |
#udp:4500 gaming # UDP port already used in "VoWiFi" rules | |
# PlayStation | |
tcp:3478-3480 gaming | |
#udp:3478-3479 gaming # UDP ports already used in "Zoom" rules | |
# Call of Duty | |
#tcp:3074 gaming # TCP port already used in "Xbox" rules | |
tcp:3075-3076 gaming | |
#udp:3074 gaming # UDP port already used in "Xbox" rules | |
udp:3075-3079 gaming | |
udp:3658 gaming | |
# FIFA | |
tcp:3659 gaming | |
udp:3659 gaming | |
# GTA Online | |
udp:6672 gaming | |
udp:61455-61458 gaming | |
# Minecraft | |
tcp:25565 gaming | |
udp:19132-19133 gaming | |
udp:25565 gaming | |
# Supercell Games | |
tcp:9339 gaming | |
udp:9339 gaming | |
# Steam Remote Play | |
tcp:27036 gaming | |
udp:27031-27036 gaming | |
# Steamworks Game Server | |
tcp:27015 gaming | |
udp:27015 gaming | |
# Zoom, Microsoft Teams, Skype and FaceTime (they use these same ports) | |
udp:3478-3497 multimedia_conferencing | |
# Zoom | |
dns:*zoom* multimedia_conferencing | |
tcp:8801-8802 multimedia_conferencing | |
udp:8801-8810 multimedia_conferencing | |
# Skype | |
dns:*skype* multimedia_conferencing | |
# FaceTime | |
udp:16384-16387 multimedia_conferencing | |
udp:16393-16402 multimedia_conferencing | |
# GoToMeeting | |
udp:1853 multimedia_conferencing | |
udp:8200 multimedia_conferencing | |
# Webex Meeting | |
tcp:5004 multimedia_conferencing | |
udp:9000 multimedia_conferencing | |
# Jitsi Meet | |
tcp:5349 multimedia_conferencing | |
udp:10000 multimedia_conferencing | |
# Google Meet | |
udp:19302-19309 multimedia_conferencing | |
# TeamViewer | |
tcp:5938 multimedia_conferencing | |
udp:5938 multimedia_conferencing | |
# Voice over Internet Protocol (VoIP) | |
tcp:5060-5061 telephony | |
udp:5060-5061 telephony | |
# Voice over WiFi or WiFi Calling (VoWiFi) | |
udp:500 telephony | |
udp:4500 telephony | |
EOF | |
# Saving modified values | |
uci commit qosify | |
/etc/init.d/qosify restart | |
# Check if working | |
qosify-status | |
# Troubleshoot: cat /etc/config/qosify |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Measure Bufferbloat: https://www.waveform.com/tools/bufferbloat