You can increase the size of your queue to fix the problem. (As stated by jdborg) Sorry, my rating isn't high enough to comment directly.
Here is an Example
If this command is producing unwanted packet loss
sudo tc qdisc add dev eno1 root tbf rate 1mbit burst 32kbit latency 400ms
You can fix the problem by increasing the buffer (queue) size by changing the latency from 400ms
to 10000ms
The command would now look something like this sudo tc qdisc add dev eno1 root tbf rate 1mbit burst 32kbit latency 10000ms
In Summary: Increasing the queue size as I have shown above will fix the packet loss problem. It is just a matter of how much it will need to be increased.
My Research
I did a 10Mbps iPerf test when the queue was only 400ms, which resulted in 90% dropped UDP packets. Redoing the iPerf test when the Queue was set to 10000ms resulted in 0% packet loss.
How I setup the iPerf test
The iPerf test was done where PC#1 was the iPerf server, and PC#2 was the iPerf client. PC#2's outbound connection was throttled via the tc
command

eth0
has the WAN ip. As only upload speed can be shaped, I use the above posted line oneth1
which is the NAT interface. So I shape the download rate ofeth0
by shaping the upload oneth1
.