家庭网络和存储折腾之路(4)- 旁路由
第二篇中提到,路由器一旦开了流量统计,2.5G的速度就降到了250M,所以明白了一件事,路由不能干太多事(至少TP是这样的)。加了一个QNAP八口的2.5G交换机(有点贵的,浪费)解决了内网大数据交换的问题。但还是有很多事情需要路由去干的,硬路由又干不了(至少影响性能)怎么办呢?于是 我加个软路由(旁路由)。
什么是旁路由?
网上很多都有讲到旁路由这个词不够严谨,不应该叫旁路由应该叫旁路网关。我也认为叫网关更加合适,但我们在这里不纠结名字,知道什么就好了,所以依然跟随大多数人的叫法“旁路由”。
旁路由是一个挂接在主路由lan口下的一个终端设备,我理解和其他在网络中的终端设备在网络地位上没什么本质的区别。
旁路由的IP段和主路由一致,所以他和二级路由不一样,二级路由的ip段和主路由不一样。旁路由的功能就是让进来的数据经过主路由后进入旁路由再到接收数据的终端设备,让出去的数据先经过旁路由再从主路由出去。那么在数据经过旁路由的时候就可以进行处理了,比如加解密、广告过滤、某些网站限制访问、上网行为控制(比如儿童使用的设备不能访问游戏软件、游戏网站,或者只能某个时间段上网等等)。总之给了我们一个在网络数据出去和进来之前进行处理的机会。当然旁路由也可以根据某些条件进行判断哪些数据需要处理哪些数据不需要处理直接转发给主路由。所以旁路由的功能理论上几乎没什么做不到。当然很特殊的一些功能也许需要自己动手了。大概的网络架构和数据链路如下:
这样的网络架构还有很多优点:
1、对现有网络架构影响很小,特别适合网络已经在运行的情况下进行改造
2、一旦旁路由出现故障,不影响整个网络的运行
3、可扩展性非常好,只要将额外的功能加入到旁路由里就可以
4、只要对数据处理的复杂度不高,对整体网络性能的影响几乎可以忽略
5、旁路由可以使用现有nas或者废旧电脑安装软路由即可,对于成本敏感的人来说是个福音
查阅了网上资料,用的人比较多的是ikuai和openwrt两个系统,我选择了openwrt。
openwrt有很多版本,我用过固件版本Openwrt Koolshare mod V2.31 r10822-50aa0525d1/内核版本4.14.115以及固件版本OpenWrt 22.03.0-rc6 r19590-042d558536 / LuCI openwrt-22.03 branch git-22.237.32198-08fb383/内核版本5.10.134(官网版本):
Openwrt Koolshare mod V2.31 r10822-50aa0525d1界面
OpenWrt 22.03.0-rc6 r19590-042d558536界面
第一次用的是koolshare的版本,配置好了之后就一直在用,主要是ddns和其他的一些服务。他的好处是里面有一个酷软的菜单,里面有很多预置的服务,只要点一下就可以安装,很方便。我的版本有61个服务。主体配置也非常简单,只要配置静态ip,设置和主路由一个ip段,关闭dhcp,设置网关到主路由就可以工作。具体的设置网上很多就不啰嗦了。官网的版本相对复杂一点,我后来换官网的版本是因为要配置wireguard,希望在外面的时候手机可以连接到家里的网络,一方面是方便操作家里的设备一方面是方面通过家里的网络访问。因为koolshare已经很稳定在用,所以也不敢升级。也不想在这个版本上测试怎么安装 wireguard。于是在官网版本上完成测试wireguard之后再把koolshare版本上的功能在官网版本重新实现了一遍。这样就完成了稳定的切换。
首先从官网下载镜像,我选择的是Stable Release builds,也就是稳定版本,最新版是22.03.0-rc6(下载的地址:https://downloads.openwrt.org/releases/22.03.0-rc6/targets/x86/64/openwrt-22.03.0-rc6-x86-64-generic-ext4-combined.img.gz)。官网下载的img是raw格式的,QNAP的virtualization station并不支持这种格式,需要转换为qcow2格式。两种方法:
1、windows:通过starwind转换为vmdk格式,再上传qnap,通过QNAP提供的功能转为qcow2格式的img。
2、mac:首先安装brew:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
brew install qemu
大概率安装qemu会出错,显示gettext not in a git directory.先执行:
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-caskgit
然后再安装qemu,安装 完成后通过qemu转换img,从raw转换为qcow2格式。
qemu-img convert -p -f raw -O qcow2 openwrt-22.03.0-rc6-x86-64-generic-ext4-combined.img openwrt.qcow.img.
如果你不方便转换 ,可以留言,我已经转换好格式的镜像。
将转换后的img传到QNAP,创建虚拟机,选择genaric。运行起来之后。在 /etc/config/network里修改ip。通过web 进入openwrt,进入网络接口,设置静态ip,关闭dhcp,设置网关和dns,否则网络不通。
这里介绍一下我基于官网的版本是怎么配置ddns和wireguard的。
DDNS是为了能够在外面访问家里的网络,这里需要拨号时的公网IP,上一篇介绍过了。
1、安装DDNS插件,可以收工安装也可以从 openwrt里直接安装,推荐第二种方法。
手工安装4.45,无法运行,出现Error relocating /usr/bin/v2ray: __nanosleep_time64: symbol not found。重新安装4.40,没问题。
更方便的安装方法是进入system-software,点击update lists...更新完毕后,在filter中输入ddns,安装luci-app-ddns、ddns-scripts、luci-i18n-ddns-zh-cn(中文语言),我用的cloudflare,所以还安装ddns-scripts-cloudflare,
2、DDNS的配置。安装完毕后点击server-DDNS进入cloudflare设置,唯一需要注意的是“域名”的填写比较特殊,比如你需要设置的域名是abc.def.com,那么填入abc@def.com。其他按照提示填写即可。设置完成 后可以进入“日志查看器 ”查看日志是否成功设置ip。
有了nas,我们在家里就可以随意访问,但是一旦离开家的wifi那么就无法访问nas了。而我们有时候不在也可能有需要访问nas或者家里的服务。如果你的网络有那种服务,随时都能通过家里的网络访问那么会很方便。DDNS就是实现这个功能的前置条件,当然你可以用第三方的。有了DDNS,接下来典型的方法有两个,一个是通过在路由器上设置端口转发,将家里的每一个服务对应一个端口,通过固定端口转发到某一个服务进行访问,这种方法相对来说比较简单,只要在路由器中简单设置就能完成。缺点也很难明显,一是每个服务都需要一个端口,记起来用起来都比较麻烦,第二个缺点就是安全问题,因为将服务暴露到了互联网。我一开始也是用的这个方案,后来放弃了。改用了第二个方法----VPN。VPN就要安全得多了,一旦通过vpn方式连到家里的网络,那么你即使不在家里你也可以像在家里一样用家里的网络,可以轻松访问家里内网以及内网的所有服务。就像在家里一样。vpn有很多中,典型的有PPTP、L2TP/IPsec、SSL VPN、OpenVPN、wireguard这几种 。pptp安全性是比较低的,l2tp/ipsec、ssl vpn配置起来比较复杂。wireguard是最近几年才出来的新技术,该技术已经进入了最近的linux内核,也就是说该技术可以直接通过内核调用执行,性能上远超其他VPN技术,在传输层,该技术采用的udp协议传输,对于nat后的vpn有着较好的支持。而配置的难度远低于其他。并且可以随意指定端口(你知道的,支持指定端口有多重要!)。安装方法 和ddsn一样,update lists之后安装uci-app-wireguard,自动会安装另外三个组件:kmod-wireguard、luci-proto-wireguard和wireguard-tools。
安装完成后进行配置:
1、进入网络-interfaces,点击“add new interface
名称随便填写,比如WG0,Protocol选择Wireguard VPN,当选择了Wireguard VPN之后,device自动被隐藏。
2、进行WG0的配置
高级设置不需要改。进入防火墙 :
由于是旁路由,所以只要 选择 你的lan就可以了。
DHCP也不需要改。
进入对端进行设置:
这样在openwrt中的wireguard就设置完成了。
接下来最后一步,你需要连入家里网络的设备 ,比如说iphone,从App Store下载wireguard(需要在其他国家的区域)。
编辑一个iphone.conf的文件 ,内容如下:
[Interface]
Address = 192.168.8.2
# 对应 iphone 客户段分配的IP,就是上面peer中的ip
PrivateKey = xxxx
#客户端privatekey,就是上面 peer中产生的privatekey
DNS = 192.168.0.x
# 本地的 DNS 服务器或者公有 DNS 服务器,例如: 114.114.114.114
[Peer]
PublicKey = xxxxx
#服务端公钥
AllowedIPs = 0.0.0.0/0
# 设置为 0.0.0.0/0 为全局模式.
PresharedKey = xxxxx
# 上面步骤中产生的预共享密钥
Endpoint = xxxx.yyyy.com:port
#你的ddsn域名和 端口
PersistentKeepalive = 25
将这个conf文件导入给wireguard客户端,就可以使用了。
连接后,如果你看到了“发送数据量”和“接收数据量”,并且有数值。在浏览器中直接访问你的内网 ip,如果通了,那么说明成功了。如果不通,请从头检查每一步设置是否正确。
至此,旁路由的两个基础功能就有了DDNS和wireguard。当然旁路由还有很多其他功能 ,比如广告过滤、上网控制。广告过滤我的需求不强 ,我觉得用免费的东西稍微有点广告也是应该的。 只要别太过分 ,像那种看一个视频要我先看3分钟广告,中间还要停下来看就有点过分了。上网控制我是有需求的,还没研究,等试好了再写一篇。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~







zzbaobei
校验提示文案
笨笨璟
校验提示文案
Open_Your_Mind
校验提示文案
曾经的胖子
校验提示文案
老馬
校验提示文案
霸霸值到了
校验提示文案
干炒呱唧丝
校验提示文案
狐狸猪
校验提示文案
小北的破铜烂铁
校验提示文案
值友5696902883
校验提示文案
值友5696902883
校验提示文案
老馬
校验提示文案
曾经的胖子
校验提示文案
小北的破铜烂铁
校验提示文案
霸霸值到了
校验提示文案
Open_Your_Mind
校验提示文案
狐狸猪
校验提示文案
干炒呱唧丝
校验提示文案
笨笨璟
校验提示文案
zzbaobei
校验提示文案