前言
介绍啥的我就不说了,想必对这个有兴趣的已经搜了很多文章了。
这个实现的过程就是利用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,注意选对版本和架构
在routing
里搜索bird
我们需要安装这些软件
在packages
搜索git
我们需要安装这些软件
继续搜索nano,安装nano
继续搜索make,安装make
另外固件里要有Python3和curl如果没有和也要下载安装
安装方法
用ssh工具链接Openwrt
比如要下载make
右击复制链接地址,然后在ssh里wget 链接地址
然后ls查看名字
然后okpg install 名字
注意有些应用安装提示错误的是因为要先安装别的,换换安装顺序就可以装上了
现成的openwrt
蓝奏云
这个是我自用的openwrt,里面包含了以上软件,以下的配置也都已经弄好了,但是软件比较少只有ssrp。
使用我的固件只需要设置好科学全局,和定时任务就可以了
已知问题
我的固件ssh远程无法链接,解决办法:
把关于ssh的删掉,安装这两个
GitHub项目
我们需要用到这个项目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上面那个Makefilenano Makefile
图片上只执行ipv4的如果你需要IPV6把图片上的#删掉就可以了birdc4 configure改成/etc/init.d/bird4 reload
最后加上定时任务
crontab -e
按i
编辑 按Esc
退出编辑,输入:wq
保存退出
0 0 * * 0 make -C /root/nchnroutes
每周日0点更新
附件
如果你觉得本教程对你有帮助,请随意打赏,谢谢。
78 条评论
请问下大佬,如果使用旁路由工作逻辑的话,设置RouterOS为主路由,当国际出方向流量到达了Ros,然后被路由到openWRT,此时OPENWRT将流量返回给Ros(将流量发送到美国直连服务器),这样会产生环路吗?
bird启动后,ssr+就连接超时
希望大家可以看到前排,问题解决了。将广播机OP里bird4.conf的protocal:export all注释掉,广播机OP就不会产生路由造成环路,可以访问国外IP。然后将广播机放在ROS的隔离网段中,ROS就不会造成回环。
希望大家可以看到,问题解决了,将bird4.conf的export all注释掉,广播机OP就不会产生路由表造成回环。将广播机放在ROS的隔离网段里面,就不会造成ROS的回环。
开了bird4但是ROS端没有开启OSPF情况下,clash也超时(国外IP超时,国内IP可以连),不是很懂其中的原理
对的,我的也是的,不知道楼主是怎么解决的
你好,问一下执行make后出错了怎么办?
git pullroot@OpenWrt:~/nchnroutes# make
curl -o delegated-apnic-latest https://ftp.apnic.net/stats/apnic/delegated-apnic-latest
Dload Upload Total Spent Left Speed% Total % Received % Xferd Average Speed Time Time Time Current
100 3622k 100 3622k 0 0 693k 0 0:00:05 0:00:05 --:--:-- 888k
curl -o china_ip_list.txt https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt
curl: (6) Could not resolve host: raw.githubusercontent.com
make: * [Makefile:4: produce] Error 6
前面的工具都安装了。到git clone https://github.com/dndx/nchnroutes.git这一步的时候提示fatal: unable to access 'https://github.com/dndx/nchnroutes.git/': Could not resolve host: github.com是什么原因啊?
前面所有的工具都安装了。到git clone https://github.com/dndx/nchnroutes.git 这一步的时候提示fatal: unable to access 'https://github.com/dndx/nchnroutes.git/': Could not resolve host: github.com,这是什么原因啊?
生成路由表的时候我用--exclude排除了VPS的IP(X.X.X.X/32),但是好像VPS的路由还是发往了OP, 我现在都是两边分别下静态路由表来防止VPS回环,有什么别的方案么
root@cssth-k3:~/nchnroutes# make
Dload Upload Total Spent Left Speedgit pull
Already up to date.
curl -o delegated-apnic-latest https://ftp.apnic.net/stats/apnic/delegated-apnic-latest
% Total % Received % Xferd Average Speed Time Time Time Current
8 3584k 8 320k 0 0 84388 0 0:00:43 0:00:03 0:00:40 84431
curl: (18) transfer closed with 3343307 bytes remaining to read
make: * [Makefile:3: produce] Error 18
root@cssth-k3:~/nchnroutes#
Error 18
升级python3.6到3.7+以上便可
问个不相关的问题
原本是ikuai+openwrt,ikuai不做与旁路由关联的配置,正常终端不走代理,要出国海淘学习就把网关和dns配置成openwrt的ip,这样保证openwrt挂了,也不会影响其他人上网
前天装了ros,也是没有做关联旁路由的配置,但是发现电脑没办法上国内网站了
其他自动获取IP的设备都正常,但是网关成到openwrt的设备就只能上外网(深造插件改成全局代理的话也能上国内网站)
而且nslookup www.douyu.com 可以正常返回ip,但是无法打开网页,大佬知道为啥吗?
不知道。。
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
油管回复你了
我快吧
(ฅ´ω`ฅ)