Você não precisa fazer nenhum truque de roteamento para isso, nem precisa de uma interface virtual.
Você simplesmente molda seu tráfego quando sai do sistema A.
Descreva exatamente o que você quer fazer e é trivial escrever uma regra 'tc' para isso.
Por exemplo, digamos que você queira limitar A a 1mbit / s em todo o tráfego de saída:
# Flush tc
tc qdisc del dev eth0 root &> /dev/null
tc qdisc add dev eth0 root handle 1: htb default 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
Feito.
Execute um teste de velocidade de A e você verá que o tráfego de entrada provavelmente não é afetado, mas o tráfego de saída é limitado em 1 Mebibit por segundo.
Por que eu digo: "provavelmente não foi afetado"? Porque se você tem uma taxa de entrada muito alta, seus pacotes ACK podem exceder o limite de 1Mbit, e serem acelerados. E se o seu ACK ficar lento, o mesmo acontece com o tráfego de entrada.
Se você não conseguir usar tc ou iptables em A - como se seu tráfego fosse invisível para tc / iptables - por exemplo, tcpreplay, então você precisa fazer o controle de tráfego em B.
Para isso, há pelo menos as três maneiras a seguir para fazer isso.
-
Compre uma placa de rede para B e coloque A / B1 na rede 1 e B2 / gateway na rede 2. Ou seja, B se torna um gateway. Agora use 'tc' para modelar o tráfego de A.
-
Multi home eth0 em B. ie, eth0: 1 - > 172.16.5.0/24 e dê a um endereço nesta rede. Configurar B para encaminhar o tráfego entre eth0 e eth0: 1, marcar e configurar o tráfego (tc) para o gateway principal.
- Use 'brctl' para criar uma ponte na eth0 e crie interfaces para A / B e B / gw e marque novamente e modifique o cabeçalho de tráfego (tc) para o gateway principal.