Code Monkey home page Code Monkey logo

bestroutetb's People

Contributors

ashi009 avatar congma avatar wzyboy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bestroutetb's Issues

Linux 通用那里生成的up.sh和down.sh严重有问题

首先说up.sh的问题,顶部的#!/bin/shnetgw=$(cat /tmp/net_gateway)read target dummy vpngw dummy <<< $(ip route get 8.8.8.8)全部粘到一行去了,导致脚本根本不能用。

还有两个脚本共有的问题:因为route命令是在/sbin/目录下的,这两个脚本没有把route命令的路径放进去,导致那一堆route命令全部无法运行。经过本人测试,在两个脚本的第二行插入export PATH="/bin:/sbin:/usr/sbin:/usr/bin",才可以!

另外,这三个脚本对应的位置应该是:
/etc/ppp/ip-pre-up
/etc/ppp/ip-up.local
/etc/ppp/ip-down.local

使用说明里写得不是很清楚,再加上生成的脚本有误,导致我走了许多弯路,望改进!

使用-p custom时候,--rule-format里的\n不会转义

bestroutetb -f -p custom -o ./bestroutetb.txt --rule-format="iptables -t nat -A SHADOWSOCKS -d %prefix/%length -j RETURN\n"
最终生成的是一行:
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/0 -j RETURN\niptables -t nat -A SHADOWSOCKS -d 0.0.0.0/7 -j RETURN\n ......
不会pull request,作者你有时间改一下呗?谢谢啦!祝你好人一生平安。

一处修正和一个建议

修正:formatter.js第147行rule.length前的&&应改为||,否则当nodefault为true且prefix为0.0.0.0时还是有部分输出,我的理解是都不输出,当然可能这里我不理解rule.length的用意,我觉得可以不要这个判断。另外用法说明里说的是“--nodefaultgw=1”参数,而这同一行里判断的是flags.nodefault参数,这里不匹配所以该参数无效。

建议:formatter.js第145行改成if (rule.gw && kProfile.gw[rule.gw]),这样我们可以添加不同的profile实现只选择输出net_gateway或vpn_gateway,大多数情况下只选一种即可。比如我增加win_net_up、win_net_down、win_vpn_up、win_vpn_down四种profile:
var kNetGateway = {
net: opts.netgw || '%netgw%',
vpn: null
};
var kVpnGateway = {
net: null,
vpn: opts.vpngw || '%vpngw%'
};
win_net_up: {
header: '@echo off\nsetlocal\n
for /F "tokens=3" %%%%i in ('route print ^| findstr "&lt;0.0.0.0&gt;"') do set netgw=%%%%i\n
echo Are you sure to use "%netgw%" for NET gateway?\npause\necho Please wait...',
format: 'route add %prefix mask %mask %gw',
gw: kNetGateway
},
win_net_down: {
header: '@echo off\necho Please wait...',
format: 'route delete %prefix',
gw: kNetGateway
},
win_vpn_up: {
header: '@echo off\nsetlocal\n
for /F "tokens=3" %%%%i in ('route print ^| findstr "&lt;10.0.0.0&gt;"') do set vpngw=%%%%i\n
echo Are you sure to use "%vpngw%" for VPN gateway?\npause\necho Please wait...',
format: 'route add %prefix mask %mask %gw',
gw: kVpnGateway
},
win_vpn_down: {
header: '@echo off\necho Please wait...',
format: 'route delete %prefix',
gw: kVpnGateway
},

另外setroutes.js在Windows下用虽然速度很快,但发现如果vpn mask是10.10.10.x时会提示添加出错,有些net的路由也添加不上,所以我想到了添加profile的方法直接生成Windows下的bat文件

如何将ip网段合并

请教Ashi009:
您的脚本可以讲ip地址段进行合并,压缩,但我看不懂脚本,请问如何通过bestroutetb脚本来压缩如下路由表? 谢谢!

14.20.0.0 14.20.255.255
14.28.0.0 14.28.255.255
14.120.0.0 14.120.63.255
14.120.128.0 14.120.255.255
14.122.0.0 14.122.255.255
14.124.0.0 14.124.255.255
14.127.0.0 14.127.255.255
14.153.0.0 14.153.116.255

NOSEC Rain

ubuntu下测试执行会卡住

bestroutetb --route.vpn=us -p iproute -o route_us.sh
ubuntu下测试,到100%之后就不动了,没有任何错误提示,文件也没有生成。

james@james-VirtualBox:~/projects/bestroutetb$ bestroutetb --route.vpn=us -p iproute -o route_us.sh
prog db updating... 100% 19663975B/19663975B 0.0s

能否将国家代码和ASN结合处理网段信息?

你好!我在做类似的研究,旨在优化梯子的选路规则,然后搜索看到了这个项目,十分棒的想法!对我帮助很大。同时我也希望交流分享一下思路,或许这有点用。同时我也在尝试将这个项目生成的路由表引入到我的方案中,由于这个项目生成的路由表并不大,叠加之后不会增加太多路由条目,所以似乎效果不错。

首先我是个网工而不是程序员,也看不懂代码(抱歉),我的关注点是在被墙掉的服务和一些容易被重点照顾的CDN(例如akamai),将这些IP段指向梯子的隧道接口,就可以实现大部分的被墙服务翻墙,剩下的走本地默认路由。这个想法很久之前有人提过(例如“是否存在GFW的黑名单IP”一类的话题),但由于被墙地址池经常变动且不容易验证等等多数原因,这个并不好实现。

我的思路是,被墙的公司(eg. Google, Facebook, Twitter etc.)的公司往往拥有自己的ASN,通过 bgp.he.net 网站或者类似服务可以查到该公司的ASN以及所宣告的prefix。

例如Google:

https://bgp.he.net/irr/as-set/AS-GOOGLE

在其prefixes v4中,可以获取其宣告的网段,其中连续的网段可以聚合成一个更大的网段,例如 AS36492

Prefix Description
64.9.224.0/24 Google, Inc.
64.9.225.0/24 Google, Inc.
64.9.236.0/22 Google, Inc.
64.9.240.0/24 Google, Inc.
64.9.241.0/24 Google, Inc.
64.9.242.0/24 Google, Inc.
64.9.243.0/24 Google, Inc.
64.9.244.0/22 Google, Inc.
64.9.248.0/22 Google, Inc.
64.9.252.0/22 Google, Inc.
192.119.28.0/24 Google Fiber Inc.

都是连续的,可以聚合成
64.9.224.0/19
192.119.28.0/24

又如另一种情况,大的网段包含小的段,只需要保留最大的段:

Prefix Description
172.217.0.0/16
172.217.0.0/24 Google Inc.
172.217.16.0/24 Google Inc.
172.217.24.0/24 Google Inc.
172.217.28.0/24 Google Inc.
172.217.30.0/24 Google Inc.
172.253.0.0/16
173.194.0.0/16 American Registry for Internet Numbers
173.194.7.0/24 American Registry for Internet Numbers
173.194.32.0/24 This network range is not allocated to APNIC.

得到:
172.217.0.0/16
172.253.0.0/16
173.194.0.0/16

经过这样处理,AS-GOOGLE所有路由条目被简化到76条,Google这已经算多了,Facebook只有14条,Twitter只有11条... 属于比较容易接受的范围。
由于BGP表的大网段比较少变动且数量不算太大(我个人整理的常见的服务加起来不到300条)所以可以用静态路由的方式在国外的一台VPS上引入,并将其指向VPS的网关,这对VPS来说没有任何意义,因为与VPS的默认路由的下一跳相同。然后与国内的路由器建立隧道,并在隧道之上运行OSPF协议。之后通过将静态路由引入OSPF的方式,将这些网段信息传递给国内的路由器,这些没什么意义的静态路由就会发挥作用了,因为根据子网掩码匹配原则,这些路由会优先匹配到,并从interface tunnel出去。

这样也有缺点,有一些托管的网站或者论坛被墙了,但并不属于某个公司(eg. igfw.net ; hkgolden)之类的,如果解析出地址之后加静态路由,这网段又太小不划算,而且也增加了管理难度,所以我考虑将这个项目生成的路由表也加进来。

之后我将你的bestroutetb生成的vpn路由表也转为静态路由的方式加入到国外的VPS上,再将net路由表加到国内路由器上。叠加之后的效果是,目的IP匹配到了你的vpn路由表或者我的路由表,都会从int tun出去,大大减少了漏网之鱼。但实际上我也发现,这个叠加后的路由表还可以继续压缩,因为有大量重叠的部分。以及同时也存在问题,那就是OSPF协议与静态路由协议的协议优先级不对等,如果匹配到了国内静态路由,那么OSPF学习到的相同掩码长度的条目就无效了,虽然这种情况比较少。

抱歉自说自话了这么多,大致来说,就是你的关注点在国家代码而我的关注点是ASN,但这应该都可以用于分类IP,然后应用bestroutetb算法。然后我的问题是,我要如何将我整理到的IP段,跟你数据库中的US,HK,JP,GB等等合并在一起,最后进行一次运算,得到最简化的VPN路由表。

看过说明文档之后,我留意到本身可以在参数中携带我需要特别指定的subnet,但量比较多的话在bash里加参数可能就不太好用了。感觉上我似乎可以根据你的数据库的格式再写一份包含我自己地址段的文件,然后合并进去。但因为我不是程序员,所以要看懂里面这个程序怎么运作的大概还需要些时间...

最后是一个提议,是否有办法可以根据ASN或者AS-SET抓取一份prefixes数据,并将其以参数的形式跟国家代码一起使用,例如 --route.net=CN --route.vpn=US,JP,GB,HK,AS-GOOGLE,AS13414,AS35995 这样,这样Google和Twitter的地址就会一起参与运算,然后像是一些新加坡节点的个别地址也不会被落下。

当然这只是一个提议, 我自己并不知道要如何用程序代码从BGP中抓取Prefixes,也不知道要如何转换处理这类数据,因为不懂写程序... 如果你觉得这个提议有价值的话,可以考虑下添加这个功能....
或者有什么更好的想法或方法,也可以交流下。

感谢!

iptables support possible?

Hi there,

I've been using this route table for quite a long time, with openvpn.

Now I'm switching to iptables with transparent proxy, it would be wonderful if it's possible to use these scripts to generate iptable rules.

Regards,

Quan Zhou.

实现最小匹配标记

当前产生路由表的回溯算法是最大匹配的,即假设存在变色点的前缀树:

R(N(N,B),N(B,N))

其中R/B/N分别表示节点值为红/蓝/无色

再产生路由规则时时会将值为蓝色的孙子节点提高到R的儿子高度:

R(B,B)

对于一些地址段,这样的策略可能并不是十分妥当:

  1. 希望从net_gateway的地址空间中去掉个别主机地址:x.y.z.w/32
  2. 希望尽可能多的地址使用net_gateway或vpn_gateway。

所以希望可以实现最小匹配标记,即修改minifier.js的输入参数--local=specs--vpn=specs接受如下格式的标记:

  1. -国家缩写-us,表示在APNIC分配表内的美国地址使用最小匹配。
  2. -IP/mask-123.123.15.30/30,表示123.123.15.30/30地址段使用最小匹配。

并在保持产生最少规则数的原则下,满足最小匹配的要求,(实际只有在父节点/子节点的值不同时,才可以应用这一规则。)

IP表不准确?

140.211.11.131 这个IP明明是美国的,但是却没有通过vpn gateway访问。
经查data中有这样一条
delegated-apnic-latest:apnic|ID|ipv4|140.0.0.0|65536|20110330|allocated

能不能按域名实现最小路由?

已知常用需要翻墙的域名不到10个,把每个域名的ip都搞全,应该也没有多少吧?
比如google,twitter,facebook,wordpress等等

整个欧美的范围太大了,希望可以有真正的最小路由
翻墙的大都不怕折腾,如果遇到哪个被墙了非看不可,自己添加就是..

创建Windows版路由表

ashi009,你好!
我下载了你制作的bestroutetb,第一眼感觉很好。之前我也是自己整理的google,facebook,twitter的网段,做成路由表,但还是有网站被屏蔽,因为我们的封锁路由表太强大了。
看了这个bestroutetb,是将所有国外(比如SG,US)的网段路由到vpn_gateway,CN的网段路由到net_gateway。我是否理解错误?
生成的route是openvpn格式的,请问能否制作windows 系统格式?比如:
Openvpn格式
route 1.0.16.0 255.255.240.0 vpn_gateway
Windows系统
route add 1.0.16.0 mask 255.255.240.0 10.0.0.1
主要的难度在“mask“上,本来更改都可以用查找替换功能来更改。route替换成”route add“,vpn_gateway替换成vpn ip地址。希望能做个类似的bat脚本,或者generate.sh支持生成windows版本路由表

谢谢!

bestroutetb有没有一个参数可以让生成的路由表只走vpn的

我来说一下我的需求啊:

最近手机在使用思科AnyConnect翻墙。server端用的是开源的ocserv。这套解决方案允许server把路由下放给手机,在客户端上就能判断哪些ip段需要翻墙。

它的配置文件是这么写的:

route = 54.0.0.0/255.128.0.0
route = 54.128.0.0/255.192.0.0
...

下放的这些路由表中的ip段就是需要通过VPN链接的,配置中并不能指定哪些走本地哪些走vpn。

所以我想问一下您写的这个工具有没有提供这样一个参数,让生成的路由表都是走vpn的。

不甚感激!

配置gateway.vpn和gateway.net时使用interface

对于iproute进行配置的时候 如果是pppoe拨号的动态ip那就比较难指定gateway ip了
以及并没有找到如何将gateway.net配置为interface 如果直接写interface name会生成类似

ip route add 0.0.0.0/0 via ppp0

这样的输出

很认真的看了你的说明,很混乱

不知道你写这个说明的时候的逻辑是怎样,反正对于想是用的人来说,完全无从下手。我就说一下我关心的几个问题:

1 任何route table生成时,是否可以不用指定什么gw,vpn_gw,就只是简单的一个route table?因为不见得我们来这里都是是用VPN的。

2 能否只是简单的生成一个国内的route table?

8.8.8.8应该是US ip为什么生成的US的route里面这个不在VPN的段里面

generate.sh把规则更新到最新了

为什么用node minifier.js -net=CN --vpn=US | node formatter.js生成的规则中8.8.8.8没有在VPN_gateway中呢?

route 0.0.0.0 0.0.0.0 net_gateway
route 4.0.0.0 252.0.0.0 vpn_gateway
route 28.0.0.0 252.0.0.0 vpn_gateway
route 37.0.0.0 255.0.0.0 vpn_gateway
route 46.0.0.0 254.0.0.0 vpn_gateway
route 60.254.0.0 255.255.0.0 vpn_gateway
route 64.0.0.0 224.0.0.0 vpn_gateway
route 91.232.0.0 255.248.0.0 net_gateway
route 103.246.192.0 255.255.192.0 vpn_gateway
route 108.0.0.0 254.0.0.0 vpn_gateway
route 113.28.0.0 255.254.0.0 vpn_gateway
route 128.0.0.0 248.0.0.0 vpn_gateway
route 141.0.0.0 255.0.0.0 vpn_gateway
route 148.0.0.0 254.0.0.0 vpn_gateway
route 164.0.0.0 254.0.0.0 vpn_gateway
route 167.192.0.0 255.192.0.0 vpn_gateway
route 176.0.0.0 252.0.0.0 vpn_gateway
route 184.0.0.0 248.0.0.0 vpn_gateway
route 192.96.0.0 255.240.0.0 vpn_gateway
route 193.0.0.0 255.0.0.0 vpn_gateway
route 194.0.0.0 254.0.0.0 vpn_gateway
route 200.0.0.0 254.0.0.0 vpn_gateway
route 202.72.96.0 255.255.224.0 vpn_gateway
route 203.144.0.0 255.255.192.0 vpn_gateway
route 203.187.128.0 255.255.224.0 vpn_gateway
route 212.0.0.0 252.0.0.0 vpn_gateway

bestroutetb 得到的檔案怎麼使用,放在那裡呢?

環境 OS X 10.10.3
設備 rMBP 2013 later

本人小白一個,仔細看過並嘗試之後,發現我完全不了解怎麼使用下完指令後生成的檔案?
放在 /etc/ppp 中也沒有作用。

在Google大神也拒絕幫忙後,只好來求助了。
誠心燒香以求過路大神的幫助。

問題其實是怎麼生成OSX 可以放在/etc/ppp中使用的檔案?如chnroute中一樣?
若使用方式不是這樣,那麼應該怎麼做?

PS:試過自行修改檔案,配合chnroute ip-up 中的格式。可是生成的檔案中包含了黑白名單,而chnroute中的格式只有白名單,於是放棄。

默认网关的问题

尝试过很多次,好像这个项目的默认路由都是走VPN的。
不知道楼主是否可以考虑加入个功能,就是根据默认网关是VPN还是NET,这样会衍生很多很多应用。
比如多拨N个VPN,为每个VPN生成不同的路由表,例如香港的走香港VPN,美国的走美国VPN;
比如可以设置某个国家例如美国的走VPN,其他所有国家的都走NET。
这样话可定制化很高;
还可以设置个参数外挂个文件当做IP白名单,不知道LZ什么意见呢?
我也是爱折腾的人,想通过LZ的这些方法整合个可靠地项目。

cleanup github and make release

I found that many files on github is redundant, i.e. they are generate by the script. Could please delete them so that we can discriminate the data and script easily? This can also make distro packager happier.

Also could you make a release like version 1.0 or 0.0.1 alpha?

关于routes-us的线路疑问

首先很喜欢你的这个项目!
你在使用说明中注释道:routes-us是只将美国地址路由到 VPN网关的路由表。
可是我看这张路由表却是把筛选出的IP路由到net_gateway的正常连接,表面的目的是让国内的地址走本地net,其他的地址走vpn,这样的话就不止是你说明中说的那样“只是将美国地址路由到VPN”。不知我的表诉你弄明白了没有。。。
就是说,如果按照你注释说明的那样,就得把美国的IP筛选出来并路由到vpn-gataway。
而且我感觉对于openvpn可以更精简的啊,可以把openvpn设为默认网卡,所有流量都走vpn,然后做黑名单,只把国内的IP筛选出来路由到net_gataway;或者不替换默认网卡,用route-nopull参数禁止所有流量走vpn,然后设白名单,把国外(北美)被墙的IP路由到vpn-getaway。
我不是专业IT人士,只是自己喜欢研究一下,很多东西都不懂,如果有说错的地方还请包涵。。。

windows 8 && cygwin 下路由表生成失败

$ ./generate.sh route_table
Total: 1112 rules

events.js:71
throw arguments[1]; // Unhandled 'error' event
^
Error: write EOF
at errnoException (net.js:770:11)
at Object.afterWrite (net.js:594:19)

undefined:0

^
SyntaxError: Unexpected end of input
at Object.parse (native)
at Object.getRulesFromInput (D:\os\bestroutetb\lib.js:219:19)
at Object. (D:\os\bestroutetb\evaluator.js:9:5)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

code取自最新的trunk。
svn co https://github.com/ashi009/bestroutetb/trunk
-r 61

Report counts broadcast addresses as well

Broadcast addresses should not be included in the report.

Example: For broadcasting a packet to an entire IPv4 subnet using the private IP address space 172.16.0.0/12, which has the subnet mask 255.240.0.0, the broadcast address is 172.16.0.0 | 0.15.255.255 = 172.31.255.255.

只route**路由 其他路由default?

我用的这个命令(命令行版本)

./cli.js --route.net=0.0.0.0/0 \
          --route.vpn=cn \
          -p iproute \
          -o ~/route \
          --gateway.net=192.168.9.1 \
          --gateway.vpn=192.168.168.2

出来的up.sh为

#!/bin/sh
ip -b - <<FILE
r a 0.0.0.0/0 via 192.168.9.1
r a 0.0.0.0/1 via 192.168.168.2
r a 128.0.0.0/1 via 192.168.168.2
FILE

不知道是不是我的命令错了还是什么,我需要国外的某台服务器访问国内时走另外一台跳板去国内。这个脚本是不是默认自己是位于**了?

如何构建我所需求的命令?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.