Loading... [哔哩哔哩](https://www.bilibili.com/video/BV1ZZ4y1978v/) # 前言 介绍啥的我就不说了,想必对这个有兴趣的已经搜了很多文章了。 这个实现的过程就是利用GitHub上的一个项目拉取apnic 和 ipip的中国地址列表,然后取反,将列表生成bird的静态路由格式,通过OSPF把路由表传给ROS,国内IP直接通过ros出去,国外IP ROS根据路由表转发给Openwrt科学出去,从而实现国内外IP分流。 这样做的好处是,Openwrt关机不会影响国内IP的正常上网,Openwrt开机ROS自动分流。本教程没有涉及DNS的分流,至于获取无污染的DNS,大家可以建一个adguard类的DNS服务器,获取一些国外DOH的DNS。 # 准备 ## 软件下载 Openwrt上我们需要一些软件所有IPK都在[openwrt.org](https://downloads.openwrt.org/releases/packages-21.02/x86_64/),注意选对版本和架构 在`routing`里搜索**bird**  我们需要安装这些软件 在`packages`搜索**git**  我们需要安装这些软件 继续搜索**nano**,安装nano  继续搜索**make**,安装make  另外固件里要有Python3和curl如果没有和也要下载安装 ## 安装方法 用ssh工具链接Openwrt 比如要下载make  右击复制链接地址,然后在ssh里wget 链接地址  然后ls查看名字 然后okpg install 名字  **注意有些应用安装提示错误的是因为要先安装别的,换换安装顺序就可以装上了** ## 现成的openwrt [蓝奏云](https://www.lanzouv.com/in7WZxl88za) 这个是我自用的openwrt,里面包含了以上软件,以下的配置也都已经弄好了,但是软件比较少只有ssrp。 使用我的固件只需要设置好科学全局,和定时任务就可以了 ### 已知问题 我的固件ssh远程无法链接,解决办法:  把关于ssh的删掉,安装这两个 ## GitHub项目 我们需要用到这个项目[dndx/nchnroutes](https://github.com/dndx/nchnroutes),GitHub里面介绍已经很全了,我这里就不重复了 我们需要把它clone到Openwrt上  `git clone https://github.com/dndx/nchnroutes.git` # OpenWRT 首先需要OpenWRT 以旁路由的模式运行。并且可以正常上网,打开科学上网,并且选择全局。防火墙转发全部允许 进入到刚刚clone的目录 `cd nchnroutes/` 然后需要编辑**produce.py** 输入`nano produce.py`  将这里改成br-lan 按`ctrl + x` 回车保存 然后执行`make` 然后会生成` routes6.conf`和 `routes4.conf` 打开openwrt的webui  将bird4和6的这个取消勾选,保存应用 然后我们修改`/etc/bird4.conf`文件 `nano /etc/bird4.conf`**先把里面的内容删除干净**,然后粘贴下面的内容 ``` router id 10.0.0.253; # The Kernel protocol is not a real routing protocol. Instead of communicating # with other routers in the network, it performs synchronization of BIRD's # routing tables with the OS kernel. protocol kernel { scan time 60; import none; export all; # Actually insert routes into the kernel routing table } # The Device protocol is not a real routing protocol. It doesn't generate any # routes and it only serves as a module for getting information about network # interfaces from the kernel. protocol device { scan time 60; } protocol static { include "routes4.conf"; } protocol ospf { export all; area 0.0.0.0 { interface "*" { #authentication cryptographic; #password "foobar"; }; }; } ``` **router id**改成你的openwrt的IP  同理替换`/etc/bird6.conf` ``` router id 10.0.0.253; protocol kernel { scan time 60; import none; export all; # Actually insert routes into the kernel routing table } # The Device protocol is not a real routing protocol. It doesn't generate any # routes and it only serves as a module for getting information about network # interfaces from the kernel. protocol device { scan time 60; } protocol static { include "routes6.conf"; } protocol ospf { export all; area 0.0.0.0 { interface "*" { }; }; } ``` **如果你不需要IPV6的分流的话,`/etc/bird6.conf`就不需要动** 如果粘贴格式不对的话,也可以在PC上创建好文件,用文件管理替换掉源文件 然后将刚才生成的`routes6.conf`和`routes4.conf`移动到`/etc`下面 ``` mv routes4.conf /etc/routes4.conf mv routes6.conf /etc/routes6.conf ```  点击bird4和6的restart,如果不需要ipv6分流的不需要点击bird6的restart # RouterOS 打开OSPF面板  如果你没有的话,那就是你没有安装或者没有启用`routing` package。 点击**instance**,点击+  名字随便,router ID填ros的IP  点击**Areas**,点击+ 名字随便,**instance**选刚刚创建的,如图  点击**interface templates**,点击+ **interfaces**选择你内网的接口(桥接接口),**Areas**选择刚刚创建的 全部创建完成点击neighbors就可以看到Openwrt的router ID了  以上就是IPV4分流 同理IPV6只需要再添加一条**instance**,**version**选择3就可以了  最后可以看到传过来的路由表了  # 热更新路由 我们需要修改openwrt上面那个Makefile `nano Makefile`  图片上只执行ipv4的如果你需要IPV6把图片上的#删掉就可以了**birdc4 configure改成/etc/init.d/bird4 reload** 最后加上定时任务 ``` crontab -e ``` 按`i`编辑 按`Esc`退出编辑,输入`:wq`保存退出  `0 0 * * 0 make -C /root/nchnroutes` 每周日0点更新 # 附件 [route4.conf,route6.conf](https://www.lanzouv.com/iR9Pexmg9ej) **`如果你觉得本教程对你有帮助,请随意打赏,谢谢。`** 最后修改:2021 年 12 月 18 日 © 允许付费转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏
64 条评论
ros ospf收到bird4的路由表 优先级都是110 ros 默认路由0.0.0.0/0 优先级也调整了 111 还是访问不了外面的网(ó﹏ò。)
排除VPS的IP了吗
启用bird后opencl*sh节点全部超时,需要怎么设置?谢谢
您好,我现在ros已经接收到路由表,但是客户机走科学的比如1.1.1.1不通.
我在openwrt上traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 46 byte packets
1 10.99.8.8 (10.99.8.8) 3071.455 ms !H 3060.914 ms !H^C
第一跳10.99.8.8是openwrt地址,就一直失败.如果关闭bird就能成功.
ICMP的包是发布出去的,你只能用wget curl之类的测试网通不通
你好,如果局域网客户端连上router os后通过路由表找到openwrt,这样的话openwrt接受到的请求全部来自routeros,则openwrt下ssr或者任何隧道软件的内网客户端访问控制失效。如何在router os侧做某个设备的访问控制不让他走隧道,局域网内有个pt下载器。
ros ospf设置个路由表 然后标记就可以了实现了
请问能说下具体怎么设置路由表和标记让特定的内网客户端不经过op吗,比如楼上说的pt下载器,小白对ros有些蒙,感谢。
请教一下能不能bird用一个op,科学用另外一个op,把国外的网关指向科学的op?
不能
感谢回复,那请问固件能安装openclash?习惯了oc
自己找到对应版本的ipk应该就能安装
请问你提供的openwrt.img的root密码是多少?
password
知道怎么改了
搞了很多次,依然没有成功,表现为ros接收不到op的路由表
我也是,路由表没有接收到
这种一般就是produce.py里面的接口设置的和op接口名不对,你可以终端输入ip addr看看有ip地址的接口名是什么
ors7.1前的版本,没找到那个version的地方,不知道怎么下手了
有问题加tg群问
请问tg群是多少?
https://t.me/SagitGroup
arm架构的r2s可以使用吗?软件包不一样
应该是可以的
是opkg install +名字吧
git pull
produce.pyUpdating 9134f8c..15ae84b
error: Your local changes to the following files would be overwritten by merge:
Please commit your changes or stash them before you merge.
Aborting
make: * [Makefile:2: produce] Error 1
你可以把git pull注释掉
请教下 我按照设置每天0点10分更新 但是查询文件route4.conf,route6.conf 都是第一次建立的日期 没更新ip
设置搞定了,国内外都通,但是ios的微信基本不推送,不打开微信收不到信息,就很尴尬
可以把OP的科学分流也打开试试
爱快+openwrt能不能同样实现?如果能,出一个爱快的教材吧φ( ̄∇ ̄o)
你好,我试了https://op.dllkids.xyz/packages/x86_64/下载从oc和passwall都不能安装,能不能提供一个你的下载地址,谢谢
我的没有编译oc和passwall,我现在用的是v2raya,在我的Github
你好,我在这下载的oc和passwall都不能安装
在git作者的页面下载装不成功,不知道缺什么组件
看看报错什么
我下载了git上面的版本,但是安装不成功,不知道是不是缺支持软件。我有个想法我是否能将你这个op生成的routes4.conf拷贝到另外一台有bird4和oc的op上,用这个有bird4和oc的op推送osfp给ros,但是我试验过是失败了
请问怎么联系?tg或者其他都可以。另外请教一下能不能bird用一个op,科学用另外一个op?
只能用桥接的br-lan,可以接收到路由表,不用桥接时,改为eth0就不行。
很奇怪,我以前试过都行的来着
爱快没有动态路由协议。不支持OSPF
哦哦哦~~看来没希望了>﹏<
您好,单独设置成国外的DNS,像淘宝之类的会解析到国外,如何解决?
你需要弄DNS分流
现在测试的时候客户机trace国内地址是走ros直接出 国外地址trace全不通 但是实际访问都ok
dns和dhcp现在都是ros负责 openwrt只有单lan口 防火墙等都关闭了 不知道科学您用的什么我passwall ping显示通过
但是在ttyd trace 国外地址都是失败
icmp好像发不出去,我也发现了,你要测试的话用 curl和wget
有成功的吗?
有啊
我这边试了好几次,能打开国外网站,但打开YouTube视频加载不出来。
应该和你的机场有关,我一切正常
请教下这种方式dns您那边怎么处理的 ros设定dns服务器为openwrt的地址?
然后openwrt用adg或者mosdns 等 dns 软件
对
多谢 已经搞定了 应该是python依赖没安装 安装就ok了。
还想请教下 , 科学的必须全局吗? 有什么影响 还有科学里面的黑白名单是不是都要删除了。多谢解答
全局是因为分流已经交给ros了,没必要让op再分流,黑白名单是有效的,不用删除
python3报错 。 博客能更新下都有哪些吗?
我这里生成不了 routes4.conf和routes6.conf 这2个文件能贴下吗 谢谢
已经贴了
明天贴
然后都配置完 重启bird4的时候报的 bird4: Failed - bird: /etc/routes4.conf:15:1 syntax error
油管回复你了
你好 请问 我执行make的时候报错了
我的openwrt 端口改成eth0
Traceback (most recent call last):
import urllib.requestFile "/root/nchnroutes/produce.py", line 3, in
ModuleNotFoundError: No module named 'urllib'
make: * [Makefile:5: produce] Error 1
油管回复你了
我快吧
(ฅ´ω`ฅ)