两个运营商的路由配置示例

两个运营商的路由配置示例

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

当路由这样配置的时候,就告诉这个路由器如下的规则:

  1. 如果去运营商二,就走 eth3;
  2. 如果去运营商一呢,就走 eth2;
  3. 如果访问内网,就走 eth1;
  4. 如果所有的规则都匹配不上,默认走运营商一,也即走快的网络。

但是问题来了,租户 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

默认的路由走慢的,谁让你不付钱。

Viewpoints #

From #

第9讲 | 路由协议:西出网关无故人,敢问路在何方