
Quero criar uma interface de rede virtual para o proxy TCP de um site e fazer com que meu navegador o veja por meio de uma conexão de rede lenta, para depurar problemas de desempenho no próprio site.
Até agora consegui configurá-lo da seguinte maneira:
ip link add dummy-SLOW type dummy
ifconfig dummy-SLOW 10.54.0.10 up
tc qdisc add dev dummy-SLOW root tbf rate 120kbit latency 200ms burst 1540
e então
socat tcp-listen:443,bind=10.54.0.10,reuseaddr,fork tcp:XXX.XXX.XXX.XXX:443
Também adicionei um alias /etc/hosts
para poder ver o site no endereço IP 10.54.0.10
.
Bem, consigo ver o site através desta configuração, sem problemas, o endereço 10.54.0.10
aparece até no Chrome devtools. Mas a modelagem de tráfego não está funcionando... Ainda vejo muitos bytes sendo baixados muito rápido. Como posso fazer com que a modelagem de tráfego funcione?
NOTA: SE houver uma maneira de fazer com que o proxy faça a limitação, isso também funciona para mim.
Responder1
Você pode moldar o tráfego em sua interface normal, sem adicionar uma interface virtual.
Atribuir um qdisc com um ID exclusivo
tc qdisc add dev eth0 root handle 1: htb
Atribua a classe ao qdisc definido acima. Este é considerado filho do qdisc. Eu uso o modo htb porque é essencialmente uma versão mais rica em recursos do tbf.
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 120kbit latency 200ms burst 1540
Atribua um filtro à turma e procure ativamente o tráfego marcado com "10"
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
Agora que o TC tem regras, precisamos enviar o tráfego para o controle de tráfego para acelerá-lo.
iptables -A OUTPUT -t mangle -p tcp --dport 443 -j MARK --set-mark 10
Indo um passo adiante, para não limitar todo mundo que faz tráfego 443, vamos escrever uma regra que afete apenas o seu tráfego.
iptables -A OUTPUT -t mangle -p tcp -s <client IP > --dport 443 -j MARK --set-mark 10
Ao marcar nosso tráfego na saída do servidor, garantimos que todos (tecnicamente% 90) de todo o roteamento provável da rede Linux foram concluídos e agora estamos prontos para marcar o tráfego que corresponde à regra. A origem, sendo um laptop ou outro servidor de onde o teste está chegando na porta 443, será marcada com 10 no cabeçalho do pacote. Assim que isso for visto, o kernel pegará o pacote e aplicará regras de TC a ele.
Você pode ver todas as regras do mangle fazendoiptables -t mangle -nvL