Content #
我是房东,家里从运营商那儿拉了两根网线。这两根网线分别属于两个运行商。一个带宽大一些,一个带宽小一些。这个时候,我就不能买普通的家用路由器了,得买个高级点的,可以接两个外网的。
家里的网络呢,就是普通的家用网段 192.168.1.x/24。家里有两个租户,分别把线连到路由器上。IP 地址为 192.168.1.101/24 和 192.168.1.102/24,网关都是 192.168.1.1/24,网关在路由器上。

运行商里面也有一个 IP 地址,在运营商网络里面的网关。不同的运营商方法不一样,有的是 /32 的,也即一个一对一连接。
例如,运营商 1 给路由器分配的地址是 183.134.189.34/32,而运营商网络里面的网关是 183.134.188.1/32。有的是 /30 的,也就是分了一个特别小的网段。运营商 2 给路由器分配的地址是 60.190.27.190/30,运营商网络里面的网关是 60.190.27.189/30。
根据这个网络拓扑图,可以将路由配置成这样:
$ ip route list table main
60.190.27.189/30 dev eth3 proto kernel scope link src 60.190.27.190
183.134.188.1 dev eth2 proto kernel scope link src 183.134.189.34
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1
127.0.0.0/8 dev lo scope link
default via 183.134.188.1 dev eth2
当路由这样配置的时候,就告诉这个路由器如下的规则:
- 如果去运营商二,就走 eth3;
- 如果去运营商一呢,就走 eth2;
- 如果访问内网,就走 eth1;
- 如果所有的规则都匹配不上,默认走运营商一,也即走快的网络。
但是问题来了,租户 A 不想多付钱,他说我就上上网页,从不看电影,凭什么收我同样贵的网费啊?没关系,咱有技术可以解决。
下面我添加一个 Table,名字叫 chao。
# echo 200 chao >> /etc/iproute2/rt_tables
添加一条规则:
# ip rule add from 192.168.1.101 table chao
# ip rule ls
0: from all lookup local
32765: from 10.0.0.10 lookup chao
32766: from all lookup main
32767: from all lookup default
设定规则为:从 192.168.1.101 来的包都查看个 chao 这个新的路由表。在 chao 路由表中添加规则:
# ip route add default via 60.190.27.189 dev eth3 table chao
# ip route flush cache
默认的路由走慢的,谁让你不付钱。