Linux 路由器使用TC做流量控制

    局域网通过路由器上网,需要对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

待续……