Haveria muito a pedir para responder adequadamente, e tantas implementações possíveis, eu apenas farei algumas suposições e proponho uma solução que você poderia modificar mais tarde.
Você poderia usar flags TCP e conntrack, a máquina de conexão no kernel linux, para descobrir quais conexões são B para as tcp.
Em seguida, você poderia marcá-los na máquina de conexão com CONNMARK
target.
Desta forma, e com -j CONNMARK --restore-mark
target, quando um pacote nesta conexão estiver indo na direção A a B, ele será marcado como 100.
No lado do TC, estou usando o htb como um QDISC de classe. A classe HTB irá eliminar pacotes se houver muito tráfego. fq_codel é usado como uma fila. fq_codel organiza filas em cada classe.
O qdisc de raiz htb envia pacotes que não estão marcados na classe 1: 1000.
Pacotes marcados irão em 1: 100.
tc filter
é usado para reconhecer 100 pacotes marcados e enviá-los para a classe 1: 100.
tc class
é usado para definir a largura de banda limite.
O código a seguir assume que sua largura de banda máxima é de 1Mb / s, sua interface de rede B é eth0, sua rede A é eth1 e sua camada é ethernet.
# Spread connmark to mark
iptables -t mangle -A POSTROUTING -o eth0 -j CONNMARK --restore-mark
# New TCP connections from B to A : connmark 100
iptables -t mangle -A POSTROUTING -o eth1 -p tcp --syn -m state --state NEW -j CONNMARK --set-mark 100
# Interface : eth0, qdisc : htb, default leaf : 1000
tc qdisc add dev eth0 root handle 1:0 htb default 1000
# Interface eth0, parent branch node : 1:0, branch id : 1:10
tc class add dev eth0 parent 1:0 classid 1:10 htb rate 1000kbit ceil 1000kbit
# CLASS - B to A TCP branch
tc class add dev eth0 parent 1:10 classid 1:100 htb rate 700kbit ceil 1000kbit burst 5k prio 0 linklayer ethernet
# QDISC - Queue
tc qdisc add dev eth0 parent 1:100 handle 110: fq_codel
# FILTER - Filter
tc filter add dev eth0 parent 1:0 protocol ip prio 0 handle 100 fw flowid 1:100
# CLASS - Default branch
tc class add dev eth0 parent 1:10 classid 1:200 htb rate 300kbit ceil 500kbit burst 5k prio 7 linklayer ethernet
# QDISC - default branch queue
tc qdisc add dev eth0 parent 1:1000 handle 1010: fq_codel
Eu posso não ser tão claro quanto gostaria, pergunte-me qualquer coisa que você não entende.