前言
最近在宿舍添置了一台路由器。。结果现在的问题就是访问校内网络时候不能享受到20MB/s的内网速度了。所以找了一下,用路由表编辑是可行的。
首先我们进入路由器的后台(openwrt环境,包含busybox),利用 route命令查看一下原有的路由表
1 | Kernel IP routing table |
可以看到现在所有的外网和内网IP都是走VPN的。最简单的方案就是按照下列添加路由表:
1 | route add -net 10.0.0.0/8 gw 10.171.32.1 dev eth2.2 |
但是,在重新连接之后网关IP会改变,我们可以使用另一种方式,也就是黑名单的实现方式。
我们知道,对于IP 10.0.0.0/8,其第一个字节对应的二进制位为 00001010,我们可以求反向的IP及其掩码。
1 | 10000000 128.0.0.0/1 |
我们只需对上述8条做VPN路由即可。
1 | route del -net 0.0.0.0/0 |
扩展:IP逆向子网算法
这个扩展是几年后写的,但是确实是最近遇到了这个问题,于是重新思考了一下。问题如下:
给定一系列由CIDR确定的子网构成的数组,求所有不属于这些子网的网段的CIDR表示。
示例输入:
[‘10.0.0.0/8’]
示例输出:
[
‘0.0.0.0/5’, ‘8.0.0.0/7’, ‘11.0.0.0/8’, ‘12.0.0.0/6’,
‘16.0.0.0/4’, ‘32.0.0.0/3’, ‘64.0.0.0/2’, ‘128.0.0.0/1’
]
计算给定网段的CIDR表示
为了解决题目中的问题,我们首先解决包含问题:给定一个IP地址范围,用CIDR网段来表示。