软路由
软路由
我现在的网络拓扑
r2s(大部分的功能全都部署在这里)
openwrt系统刷机
准备一张tf卡和balenaEtcher (刷机工具)
然后准备openwrt系统,我直接从直接从OpenWrt固件下载与在线定制编译 (supes.top) 构建了自己的openwrt
选择如下
互换默认网口的原因是默认的Wan口是USB3.0改装来的,网速不能千兆,不能让瓶颈出现在进入的位置
KMS服务器
这东西开箱即用,什么都不用设置
SmartDNS
参考如何开启SmartDNS及相关配置 - 哔哩哔哩 (bilibili.com)
关闭魔法
PassWall,Bypass,SSR-Plus,OpenClash,PassWall2,VSSR (Hello World)之类的全部关闭
调整Lan口
网络-接口界面设置Lan口,使用自定义的DNS服务器,地址为访问 openwrt 的ip(后台地址)
关闭MWAN3分流服务
我构建自己的 openwrt ,安装了MWAN3,但是我没找到他在那里,只找到一个MWAN,所以先跳过这一部分
下面是教程中这一部分的操作
检查服务内的【MWAN3分流服务】是否为关闭,该固件下默认为关闭;如果没有此插件即可无视得了
设置Turbo ACC Center
配置SmartDNS
以下内容分为两部分设置,分别是【国内组】&【国外组】;第一组设置,建议名称为:【China】,默认端口6053,重定向选择【替换dnsmap上游服务器】,开启【双栈IP优选】、开启【TCP服务器】、开启【域名预加载】、开启【过期缓存服务】、缓存大小可设置【2048】、域名TTL为空、最小值默认300、最大值为3600或为空,然后保存;
第二组设置,建议名称【Overseas】默认端口5335,勾选-TCP服务器、跳过测速、跳过双栈优选、跳过cache;
添加上游服务器如下,下面两个表都填写保存后,挨个点击每条后面的【编辑】修改组名,国内对应【China】国外对应【Overseas】,之后保存并应用;
我设置国内对应smartdns-China
,国外(第二DNS服务器)对应smartdns-Overseas
修改DHCP/DNS
(如果只是配置SmartDNS,就配置这个)
Adguard Home
参考如何正确使用smartdns搭配adguardhome, 优选dns并去除广告(smzdm.com)
设置1745重定向
设置Adguard Home的上游DNS
打开3000端口的Adguard Home网页管理界面,进入DNS设置
设置上游DNS为SmartDNS
设置规则
添加黑名单,我是用了这份jhsvip/ADRuls: AdGuard Home 规则,整合了80多万条规则(github.com)
ShadowSocksR Plus+
我不是很推荐这个软件,因为他的黑白名单功能在我这里一直没有用;而且在使用一些节点的时候,一段时间后CPU占用会飙升到100%导致整个软路由瘫痪,只能强制断电然后接电重启
不过如果如果只是为了追求设置简单,并想要网速尽可能快,可以使用这个
设置运行模式与DNS
设置运行模式为"绕过中国大陆ip",如果前面像我一样配置了SmartDNS,可以同时配置DNS
配置节点
OpenClash
一些知识-运行模式
-
Redir-Host
-
兼容模式
-
信息来源:常规设置 · vernesong/OpenClash Wiki (github.com)
客户端进行通讯时DNS由Clash先进行并发查询,等待返回结果后再尝试进行规则判定和连接。
当判定需要代理时,使用fallback组DNS的查询结果进行通讯
实际效果:客户端响应速度一般,可能出现网页加载时间过长的情况。
-
信息来源:ChatGPT
在此模式下,OpenClash会通过修改系统的DNS配置,将所有的DNS请求重定向到本地的Clash代理客户端。这样,所有的网络流量都会通过Clash进行代理。
-
-
TUN模式
-
信息来源:常规设置 · vernesong/OpenClash Wiki (github.com)
此模式与Redir-Host(兼容)模式类似,不同在于能够代理所有UDP链接,提升nat等级,改善游戏联机体验。
-
信息来源:ChatGPT
在这种模式下,OpenClash会创建一个虚拟网络接口(TUN接口),并将所有的网络流量通过该接口发送到Clash代理客户端。这种模式适用于需要对所有网络流量进行代理的情况,包括UDP和TCP流量。
-
-
TUN-混合模式(UDP-TUN,TCP-转发)
-
信息来源:ChatGPT
这种模式结合了TUN模式和转发模式。UDP流量将通过TUN接口发送到Clash代理客户端,而TCP流量将通过转发方式发送到Clash代理客户端。这种模式适用于需要同时代理UDP和TCP流量的场景。
-
-
-
Fake-IP
-
增强模式
-
信息来源:常规设置 · vernesong/OpenClash Wiki (github.com)
客户端进行通讯时会先进行DNS查询目标IP地址,拿到查询结果后再尝试进行连接。
Fake-IP 模式在客户端发起DNS请求时会立即返回一个保留地址(198.18.0.1/16),同时向上游DNS服务器查询结果,如果判定返回结果为污染或者命中代理规则,则直接发送域名至代理服务器进行远端解析。
此时客户端立即向Fake-IP发起的请求会被快速响应,节约了一次本地向DNS服务器查询的时间。
实际效果:客户端响应速度加快,浏览体验更加顺畅,减轻网页加载时间过长的情况。
-
信息来源:ChatGPT
在此模式下,OpenClash会使用IP包的伪装技术,将所有的网络流量发送到Clash代理客户端。Clash会修改源IP和目标IP,以实现代理功能。这种模式适用于需要伪装IP地址的场景,以绕过一些网络限制。
-
-
TUN模式
-
信息来源:常规设置 · vernesong/OpenClash Wiki (github.com)
此模式与Fake-IP(增强)模式类似,不同在于能够代理使用域名的UDP链接。
-
信息来源:ChatGPT
与Redir-Host模式中的TUN模式类似,OpenClash会创建一个虚拟网络接口(TUN接口),并将所有的网络流量通过该接口发送到Clash代理客户端。这种模式适用于需要对所有网络流量进行代理的情况,包括UDP和TCP流量。
-
-
TUN-混合模式(UDP-TUN,TCP-转发)
-
信息来源:ChatGPT
这种模式结合了TUN模式和转发模式。UDP流量将通过TUN接口发送到Clash代理客户端,而TCP流量将通过转发方式发送到Clash代理客户端。这种模式适用于需要同时代理UDP和TCP流量的场景。
-
总结:
信息来源:ChatGPT
总结来说,Redir-Host模式适用于通过修改系统DNS配置或虚拟网络接口来实现代理的场景,而Fake-IP模式适用于使用IP伪装技术实现代理的场景。TUN模式适用于需要对所有网络流量进行代理的情况,而TUN-混合模式适用于需要同时代理UDP和TCP流量的场景。具体选择哪种模式取决于你的需求和网络环境。
-
选择运行模式
因为考虑到需要配合SmartDNS和Adguard Home,选择Redir-Host(TUN模式)
选择Meta内核
上图中把使用Meta内核
勾选上
选择代理模式
上图中的代理模式
选择Rule【策略代理】
DNS设置
ipv6
我这里因为机场不支持ipv6,所以设置允许解析ipv6,但是不代理ipv6
与SmartDNS和Adguard Home的配合
如果想配合前面配置的SmartDNS和Adguard Home,按照下面的方式配置
Adguard Home
1745重定向
设置成无
OpenClash
勾选自定义上游DNS服务器
设置DNS服务器
同界面往下滑,填写DNS服务器为本机,端口为Adguard Home的1745端口
配置到这里之后,r2s的dns应该是这个样子的了:
下载内核
滚动到下面,依次点击三个检查并更新
,下载内核
待左侧三个当前内核版本
均变为绿色后再进行下一步
添加订阅配置
Samba
先对硬盘分区,然后根据固件的支持格式化文件系统(我选择了btrfs),挂载到/mnt下面,然后参考我的进行配置
Aria2
因为这个固件编译时安装的aria2模块有启动问题(后来再安装的不会有问题),所以需要自己配置一下
把Aria2 完美配置 | aria2.conf (p3terx.github.io) 下载下来,放置到你喜欢的位置,我这里选择放置到下载目录下面的子文件夹下面
下载目录我设置为/mnt/mmcblk0p3/Aria2
,我把配置文件存放在/mnt/mmcblk0p3/Aria2/config/aria2.conf.main
设置aria2开机自启动:aria2c --conf-path=/mnt/mmcblk0p3/Aria2/config/aria2.conf.main &
然后查看aria2的web页面
如果看到红框处的内容,说明aria2启动成功,运行正常
Alist
如下图开启,然后打开web控制界面
输入默认的账号密码后,如下进入管理界面
然后添加你想加的网盘或者本地驱动器,参考文档:通用项 | AList文档 (nn.ci)
Rclone
因为这个固件编译时安装的Rclone模块,自带的两个管理面板全部连接不上rclone后端,所以需要自己配置一下
rclone的配置文件需要自己生成,所以需要先在本机上面下载rclone ,然后配置,最后上传到openwrt上面,可以参考这个视频:openwrt使用rclone挂载阿里云盘到本地_哔哩哔哩_bilibili
完成后,在开机启动脚本里面加上这样一句:/usr/bin/rclone rcd -vv --rc-web-gui --rc-web-gui-no-open-browser --rc-addr=10.0.0.1:5572 --rc-user=admin --rc-pass=admin --config=/root/.config/rclone/rclone.conf --rc-allow-origin=* --log-file=/var/log/rclone.log &
然后浏览器访问10.0.0.1:5572
,账号密码使用上面命令中的参数,全为admin
然后应该可以看到状态是:已经和rclone后端连接
qBittorrent
设置启用,写好下载目录后保存并应用
,打开web界面
输入上面提示的默认用户名和密码后就可以看到界面了
ipv6
ipv6pd,中继,桥接和nat之间的关系
信息来源:SLAAC 环境下的 IPv6 桥接与中继 - Menci’s Blog
ipv6pd
PD(Prefix Delegation)是 DHCPv6 的一项扩展,用于 DHCP 服务器将一整段地址分配给 DHCP 客户端。这种情况一般常见于 ISP 为用户分配 IPv6 地址。在客户端获取地址时,DHCPv6 服务器(作为上级路由器)会添加一条路由,将整个被下发的网段路由到客户端。这样一来,整个地址块(一般为
/64
或者/60
)均可被客户端网络使用。DHCPv6 客户端收到由 PD 下发的前缀后,即可通过 SLAAC 等方式为整个网络内的所有主机配置 IPv6 地址,这个过程不再需要上级路由的参与。这也是一般家用网络中最常见的 IPv6 地址分配方式
ipv6中继
- 在这种情况下,除 NAT 之外,使 LAN 中的终端设备接入 IPv6 的主要思路是,假装这些设备被直接接入到 WAN 中,从 WAN 上的上级路由获得 IPv6 地址,并在 LAN 和 WAN 之间对 SLAAC 和 NDP 协议进行代理 —— 双向转发 SLAAC 与 NDP 包,并将源 MAC 地址改为我们的路由器的 MAC 地址。在 WAN 和 LAN 中的设备看来,对方网络中的 IP 地址由我们的路由器所持有,所有流量均由我们的路由器。
ipv6桥接
- 我们可以将 IPv4 和 IPv6 视作独立的网络接口。假设我们有 WAN4、WAN6、LAN4、LAN6,将 WAN6 与 LAN6 桥接,保持 WAN4 与 LAN4 上原有的 NAT 配置。这样一来,桥接会使得 WAN 与 LAN 中主机的 IPv6 流量互通,无需关心地址分配与邻居发现上的任何问题。
ipv6nat
- 参考ipv4nat
ipv6中继
这是我在家庭宽带上面使用的方案,ISP提供的光猫完成了 PPPoE 拨号、DHCPv6 PD 获取前缀、SLAAC 下发地址的整个过程,接入光猫(上级路由)的路由器无法获得前缀
路由器本身处于一个没有 DHCPv6 PD 分配的环境中,只能通过 SLAAC 从上级路由(WAN)获得单个 IPv6 地址,应该如何为网络中(LAN)的主机分配 IPv6 地址?
这时候就可以使用ipv6中继
这是我的在家里的网络拓扑
ipv6中继参考:二级路由(openwrt)开启ipv6中继(ipv4和ipv6共存) – late哥哥笔记 (lategege.com)
配置wan6
首先确认openwrt的接口,我这里wan口有两个,实际上物理接口只有一个;我这里分出两个逻辑接口是为了可以分开配置ipv4和ipv6:ipv4设置成nat,ipv6设置成中继
配置wan6协议为dhcpv6,这是为了wan口可以获取到上级路由分配的ipv6地址
配置wan
下图中勾选指定的主接口
,RA服务
、dhcpv6服务
、NDP代理
全部设置成中继服务
wan口的中继服务配置的意思是让wan口继承上级路由的ipv6地址分配能力,从而进一步往lan口分发这种能力
配置lan
协议配置成静态地址
ipv6设置全部设置成中继模式
因为我配置了nat6,不方便修改演示,所以这里偷了别人的一张图,图来源:二级路由(openwrt)开启ipv6中继(ipv4和ipv6共存) – late哥哥笔记 (lategege.com)
ipv6 nat
这是我在学校,宿舍有线网的配置,我只拿到了一个/64的ipv6地址
信息来源:Openwrt ipv6 配置 | 默 (jasper1024.com)
校园网 ipv6 环境千差万别,每个学校只能对号入座
总结有 3 种配置: 中继(Relay) 桥接(Brige) 和 NAT6,以下纯个人建议,请结合实际尝试
校园网有 PD/SLAAC -> 基本同家宽.难度 easy 很多路由器默认配置就能用
需要认证才能有地址 -> 先找能完成认证的插件吧
插线就有 ipv6 地址
- 不能访问公网,还得认证 -> 先找能完成认证的插件吧
- 能访问公网:
- 只有 /128 的 -> 大概率还有别的限制,NAT6 更直接
- 有 /64 -> 优先尝试中继(Relay),但是学校对 mac 地址有限制那就没辙了
- 所有情况都能用桥接(Brige)
这是我的在宿舍的网络拓扑:
我们学校的情况:
-
限制了一个账号只能有两个设备,似乎是根据mac来限制的;我和室友一起使用一个账号,他的设备是电脑,我的设备的路由器
-
我把我的一级路由mac地址设置为无感验证设备,就没有认证问题的存在了
-
我的一级路由分配到了/64的ipv6地址,但这是dhcp分配的,所以我没法使用ipv6中继
信息来源:QQ的大佬
dhcp是有状态的,不太可能共享给下游如何分别出我的ipv6是DHCP分配的还是SLAAC分配的?
信息来源:ChatGPT
在Linux上使用
ip a
命令查看网络接口的IPv6地址配置信息时,DHCP分配和SLAAC分配的地址会有不同的标识。下面是可能的输出示例:-
DHCP分配的IPv6地址:
如果你的IPv6地址是通过DHCP分配的,你可能会在IPv6地址信息中看到以下类似的标识:
1
inet6 2001:db8::1234:abcd:efgh/64 scope global dynamic
在这个示例中,关键词 “dynamic” 表示这个IPv6地址是通过动态主机配置协议(DHCPv6)分配的。
-
SLAAC分配的IPv6地址:
如果你的IPv6地址是通过SLAAC分配的,你可能会在IPv6地址信息中看到以下类似的标识:
1
inet6 2001:db8::5678:ijkl:mnop/64 scope global dynamic mngtmpaddr
在这个示例中,虽然也有 “dynamic”,但额外的关键词 “mngtmpaddr” 表示这个IPv6地址是通过SLAAC分配的。这个关键词表示 “managed temporary address”,它是一个表明SLAAC分配的标识。
需要注意的是,标识可能会因不同的操作系统版本和配置而有所不同。因此,最好仔细查看输出中的信息,寻找与IPv6地址分配方式相关的关键词。
-
-
ipv6桥接会把下级设备的mac地址暴露给上级设备,这会导致我的一级路由在校园网里面相当于使用了两个设备,这不行
-
综上,我只能选择ipv6nat
参考:
-
再说 OpenWRT 校园网 IPv6 NAT6-OPENWRT专版-恩山无线论坛 - Powered by Discuz! (right.com.cn) (提供了nat6脚本与相关的答疑解惑)
设置wan
设置成下面的样子,取消勾选指定的主接口
,RA服务
、dhcpv6服务
、NDP代理
全部设置成已禁用
设置lan
设置成下面这个样子,RA服务
、dhcpv6服务
全部设置成服务器模式
,NDP代理
设置成已禁用
测试一级路由的ipv6工作时候正常
我一级路由接上校园网就被分配到了一个ipv6,/64的地址,我现在要测试他是否正常
ssh连接上一级路由,然后运行下面的命令进行测试
1 | curl 6.ipw.cn |
查看这个命令是否返回了本机的ipv6地址
1 | curl mirrors6.bfsu.edu.cn |
查看是否获取到了网页内容
都满足的情况下,说明一级路由的ipv6工作正常
设置lan的内网前缀
信息来源:校园网环境下Openwrt配置ipv6教程——以nat6为例 - 知乎 (zhihu.com)
在路由器自身能够访问ipv6后,我们要解决因为地址不足造成内网设置无法访问ipv6的问题
设置一个dd开头的前缀
安装ipv6nat必要的软件包
1 | opkg install ip6tables |
如果你和我输出的结果一样,说明已经固件已经包含了这两个软件,不需要再安装了
设置开机ipv6nat脚本
知乎上的修改版脚本如下
1 |
|
自己需要再次修改的地方
-
脚本第38行
1
WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
这是用来设置wan6对应的物理网口的,我发现我运行这个脚本会出错,所以我直接根据openwrt,luci界面,网络-接口的显示,写死了这行命令,更改为:
1
WAN6_INTERFACE=eth1
-
脚本第58行
1
WAN6_GATEWAY=$(ip -6 route | grep -o '2001.*1102' | sed s'/1102/1101/g')
这是用来设置ipv6网关的,我发现openwrt,luci界面,状态-概览显示我ipv6网关是
fw80
开头的地址,虽然根据脚本原帖再说 OpenWRT 校园网 IPv6 NAT6-OPENWRT专版-恩山无线论坛 - Powered by Discuz! (right.com.cn) 的评论,这样有时候可能也可以,但是对我来说不够保险使用
ip a
查看全部网络连接的详细信息,只看wan下面inet6后面的部分,举例:inet6 2001:250:4402:2001:2e15:e1ff:fe0e:2a82/128
那么ipv6网关应该是
2001:250:4402:2001::1
,写死这行命令,更改为:1
WAN6_GATEWAY="2001:250:4402:2001::1"
然后把这个修改后的脚本写入/etc/init.d/nat6
设置权限并让其开机启动
1 | chmod +x /etc/init.d/nat6 |
修改内核参数
修改/etc/sysctl.conf
,添加下列的配置
1 | net.ipv6.conf.default.forwarding=2 |
修改防火墙
原规则如下
1 | iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 |
自己需要再次修改的地方
-
第三行
1
$(uci get network.wan6.ifname)
这是wan6对应的物理网口,直接写死他
1
ip6tables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
重启路由器,测试是否成功
在电脑上面访问IPv6 测试 (test-ipv6.com)
如果和下图一样,说明配置成功了:
tor
配置tor的原因很简单,Tor Browser(基于FireFox)浏览器真不好用!
好多插件都不能正常工作,还没有内置的翻译,没垂直标签页,不好看等各种理由,使得我有这样一个想法:软路由上面配置tor网络,开一个代理端口,然后用edge配合插件,让onion后缀的网站都走tor开的那个代理端口
这样我就可以用edge访问互联网上面的全部网页了
(配置tor主要是为了zlibrary(世界最大的电子图书馆),DuckDuckGo(注重隐私的搜索引擎))
在国内使用tor,不仅仅需要代理,还需要配置网桥
基础知识-网桥
什么是网桥?
信息来源:什么是网桥? | Tor Project | 支持
网桥指未在 Tor 公共目录里列出的 Tor 中继节点。
网桥的类型
-
obfs4:让 Tor 流量看起来只是随机的数据,但网络审查严格的地区这方法可能无效。
-
Snowflake:例如,通过 Snowflake 代理路由连接,让它看起来像是在使用视频通话。
-
meek-azure:它将连接伪装成在访问 Microsoft 网站而不是使用 Tor。在网络审查严格的地区仍可使用,但速度通常很慢。
根据我的测试,obfs4在国内被完全阻断了(路由器端连接不上,连接路由器的电脑可以连接上),meek-azure也连接不上(连接路由器的电脑连接不上)
所以我选择了Snowflake作为我的网桥
安装tor和Snowflake网桥
1 | opkg install tor |
配置tor
编辑/etc/tor/torrc
1 | ## 使用系统日志而不是 Tor 的日志文件 |
Snowflake网桥是在电脑上面,使用Tor Browser浏览器得到的
设置开机启动tor
1 | /etc/init.d/nat6 enable |
重启路由器,测试是否成功
ssh到路由器,输入以下命令查看9050端口的占用情况
1 | netstat -anp|grep 9050 |
如下图显示,被tor所占用
查看tor日志
1 | tail -n 10 -f /var/log/tor/debug.log |
如果看到了下图
说明tor已经配置完成了
下面是如何在edge中使用路由器上面的tor
安装代理用插件
SmartProxy - Chrome 应用商店 (google.com)
进入扩展的设置
设置代理服务器
参考下图配置代理服务器
设置好后记得点击保存更改
设置智能方案
关闭始终开启
方案,关闭后记得点击保存更改
设置自动切换
方案
参考下图配置规则,配置完,保存,然后记得再点外面那个保存更改
设置插件的代理模式为"自动切换"
测试插件是否设置正确
浏览器访问DuckDuckGo (duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion)
如果看到下图,说明配置成功
MT3000
wifi
注意:访客wifi与其他wifi和lan口网络不是同一个网段的,不能相互访问
ipv6
直接选择nat6
Samba和WebDav
先把usb存储设备分区,格式化再接到MT3000的usb口上面(注意:MT3000的usb3.0口没有做信号屏蔽,同时使用会造成2.4Ghz信号中断,我是用了个延长线让硬盘远离路由器解决的)
先在下图确认磁盘管理里面是否能找到硬盘,然后在用户管理
里面添加一个用户(这是给samba用的),在共享文件夹
中选择文件夹,最后在文件服务
选择协议和端口,点击应用
就完成了
2023/9/30更新
tor
Obfs4网桥在国内很容易被干掉,需要经常的更新;更新不方便写自动化
Snowflake网桥好像只有两个,但是不知道为什么都连接不上了,我怀疑也被墙了
这一次不使用网桥,而是使用前置代理来解决tor在国内的访问问题
- 标题: 软路由
- 作者: E= γ mc²
- 创建于 : 2023-11-04 22:38:14
- 更新于 : 2024-11-10 06:47:08
- 链接: https://redefine.ohevan.com/2023/11/04/软路由搭建/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。