上一贴: https://v2ex.com/t/784393
前情提要:上一次讲到需要针对国内和国际线路创建路由表,由防火墙按照 IP 规则绑定到指定的路由表上去,以实现流量分发。
那么用防火墙的话,carrionlee 老哥提出使用 network-group x Policy-Based-Routing(PBR),是很好的办法。比 chiphell 老哥逐条添加的办法好。这个办法底层是 Linux 的 ipset,很快。实际上 ER-X 用的 EdgeOS 就是换皮 VyOS,而 VyOS 的 PBR 底层就是用 ipset 实现的。自然 ER-X 的 PBR 也是用 ipset 的。
这样的话,我需要 a,b,c,d 四步
a) china ip list, 这个好办,github 上有。Archeb 提到用这个: https://github.com/17mon/china_ip_list
b) PBR 这个也好办,carrionlee 告诉我用这个,主要意思就是目标 ip 在国内的话属于 chnroute,就用国内的路由表 main

c) 接下来要用 bash 脚本把 a)中的 china ip list 导入,这是我迷惑的地方,看不太懂这个脚本,请大家帮我看看。问题想到哪儿说到哪儿多有重复。当一回伸手党不好意思了。
我理解这个脚本是先检查 cache,有 cache 就从 cache 导入,否则从 ip 列表写入,同时保存到 cache 。

第一:方括号里面的 -e 是检查是否存在的谓词么?
第二:-! restore < 为啥要用叹号啊?是从缓存文件恢复的意思吧?
第三:‘sed -e’ 是按行处理的意思么?是每一行就从管道线往下送一次么?
第四:听说'awk'是匹配模式,可是这里是什么意思啊?$0 是什么?最后是补了一个 commit 么?如果没有匹配到模式,下一个管道线收到的是空么?
第五:是全部一起传到 ipset -R 里,还是一行一行传的?
第六:管道线是把上一个的结果作为参数,是一股脑弄下来的,还是一行一行弄下来的?
第七:‘fi’是整个脚本结束,还是 if-then-else 结构结束啊?
第八:就整个脚本老说。是不是每次更新了 ip 库都要把 cache 清除了?是不是这个脚本每次重启都要运行?
d) ip 分流解决了,我就需要去弄 dns 了,暂时还没有什么想法。我能指定 ER-X 从特定的 WAN 口取 DNS 么?权益的可以先这么用一下。
前情提要:上一次讲到需要针对国内和国际线路创建路由表,由防火墙按照 IP 规则绑定到指定的路由表上去,以实现流量分发。
那么用防火墙的话,carrionlee 老哥提出使用 network-group x Policy-Based-Routing(PBR),是很好的办法。比 chiphell 老哥逐条添加的办法好。这个办法底层是 Linux 的 ipset,很快。实际上 ER-X 用的 EdgeOS 就是换皮 VyOS,而 VyOS 的 PBR 底层就是用 ipset 实现的。自然 ER-X 的 PBR 也是用 ipset 的。
这样的话,我需要 a,b,c,d 四步
a) china ip list, 这个好办,github 上有。Archeb 提到用这个: https://github.com/17mon/china_ip_list
b) PBR 这个也好办,carrionlee 告诉我用这个,主要意思就是目标 ip 在国内的话属于 chnroute,就用国内的路由表 main

c) 接下来要用 bash 脚本把 a)中的 china ip list 导入,这是我迷惑的地方,看不太懂这个脚本,请大家帮我看看。问题想到哪儿说到哪儿多有重复。当一回伸手党不好意思了。
我理解这个脚本是先检查 cache,有 cache 就从 cache 导入,否则从 ip 列表写入,同时保存到 cache 。

第一:方括号里面的 -e 是检查是否存在的谓词么?
第二:-! restore < 为啥要用叹号啊?是从缓存文件恢复的意思吧?
第三:‘sed -e’ 是按行处理的意思么?是每一行就从管道线往下送一次么?
第四:听说'awk'是匹配模式,可是这里是什么意思啊?$0 是什么?最后是补了一个 commit 么?如果没有匹配到模式,下一个管道线收到的是空么?
第五:是全部一起传到 ipset -R 里,还是一行一行传的?
第六:管道线是把上一个的结果作为参数,是一股脑弄下来的,还是一行一行弄下来的?
第七:‘fi’是整个脚本结束,还是 if-then-else 结构结束啊?
第八:就整个脚本老说。是不是每次更新了 ip 库都要把 cache 清除了?是不是这个脚本每次重启都要运行?
d) ip 分流解决了,我就需要去弄 dns 了,暂时还没有什么想法。我能指定 ER-X 从特定的 WAN 口取 DNS 么?权益的可以先这么用一下。