局域网通过路由器上网,需要对LAN地址做SNAT(源地址转换),而TC对IP流量的控制只能控制发出的IP包,而不能控制进来的包。控制LAN每个IP下载流量好控制,只要在LAN网卡上匹配目标地址就可以了,但是要控制LAN每个IP的上传流量就不好控制了,因为LAN地址经过SNAT后已经转换成公网地址了,就无法匹配源地址了。网上有很多有关使用TC做IP流量控制的文章,对上传流量的控制基本是按照先打标签,再匹配标签来进行控制。其实还有一种办法可以不用打标签就能对LAN地址上传进行控制,自己做了个试验,没想到还真可以,下面就是我在Linux中做试验的步骤:
第一步:拓扑
Internet —— A 路由器1 B —— C 路由器2 D —— 交换机 —— E PC
第一步:分配IP地址
A(eth0):公网IP——202.*.*.2
B(eth1):私网IP——192.168.100.1
C(eth0):私网IP——192.168.100.2
D(eth1):私网IP——192.168.1.1
E:私网IP——192.168.1.*
E的地址也可以通过路由器2的DHCP获得,网上有很多有关DHCP的设置,此处略过。
第三步:设置路由、SNAT和IP转发
路由器1:设置默认网关为Internet地址202.*.*.1 ,设置静态路由目的地址为192.168.1.0/24 的IP通过 192.168.100.2 ;
设置192.168.1.0/24 和 192.168.100.0/24 做SNAT为202.*.*.2
打开IP转发
路由器2:设置默认网关为 192.168.100.1
打开IP转发
第四步:设置TC
路由器1:无
路由器2:在eth0上匹配源地址做上传做限制,在eth1上匹配目的地址做下载限制。
*以下是上面设置所有的命令*
路由器1:
ip link set eth0 up
ip addr add 202.*.*.2/30 brd + dev eth0
ip link set eth1 up
ip addr add 192.168.100.1/24 brd + dev eth1
ip route add default via 202.*.*.1 dev eth0
ip route add 192.168.1.0/24 via 192.168.100.2 dev eth1
echo "1" > /proc/sys/net/ipv4/ip_forward
路由器2:
ip link set eth0 up
ip addr add 192.168.100.2/24 brd + dev eth0
ip link set eth1 up
ip addr add 192.168.1.1/24 brd + dev eth1
ip route add default via 192.168.100.1 dev eth0
echo "1" > /proc/sys/net/ipv4/ip_forward
待续……