我有一个有两个接口的Ubuntu机器。 eth1是NAT接口,eth2是WAN iterface。 我有一个4 mbps的互联网连接。 我想将eth1 NATnetworking限制为2 mbps。 所以我使用这个tc规则:
tc qdisc add dev eth1 root tbf rate 2mbit burst 10kb latency 70ms peakrate 2.4mbit minburst 1540
现在,如果我检查eth1的带宽是250 KBps,这是好的。 但eth2的带宽不止于此:它将在300 KBps到400 KBps之间。 如果我检查tc规则的状态,它会显示重大的数据包丢失。 如何限制eth2的传入带宽为2 mbits,如何防止丢包?
我试着在这个答案给出的解决scheme。 行tc qdisc add dev eth2 ingress给了我一个file exists error 。 答案中的第二种方法显示了我在这里提到的相同的行为:通过eth2获得更多的数据(大于2mbit)。
编辑1:我可以使用什么iptables和tc规则来减慢SYN,ACK,FIN数据包,以使ISP路由器知道我的本地networking拥塞。
除非我误解了你的目标,否则你不能真正限制数据包从你的ISP进入你的networking的速度,除非你与你的ISP协调某种forms的QoS来在它们的路由器上形成stream量。 这通常需要商业级的连接和金钱。 你看到数据包丢失,因为这是形成交通的唯一方法 – 你把它放在地板上。 因此,您的TC规则按照devise工作,但无法控制发送到 WAN接口的stream量级别,因为发送方尽可能快地发送stream量。
现在,您可以通过策略性地丢弃数据包或与ACK数据包混杂在一起来对传入的TCPstream量进行sorting,以使发送者认为您的networking实际上更拥挤。 但是,这并不能真正帮助非TCPstream量进入您的networking。
你可以做这样的事情:
tc qdisc add dev eth1 root handle 1: htb default 2 tc class add dev eth1 parent 1: classid 1:1 htb rate 2.4mbit tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.0/24 flowid 1:1
这将限制在给定子网上的stream量到局域网(假设eth1是LAN)。