视频教程
youtube播放地址:https://youtu.be/cFOob3djiOA
专线机场推荐:https://b.880805.xyz
GIA线路VPS推荐:https://bwg.880805.xyz
参考文档:https://cloud.tencent.com/developer/article/2036952
视频文稿(忽略)
上期我们从零开始上手软路由,并且通过主路由和二级路由的模式,实现家里所有设备科学上网,但此时有几个问题,如果我只想让手机能科学上网,其他设备全都不能科学上网,或者只想让手机不能科学上网,其他设备全都能科学上网,这种情况需要你去调整代理工具的分流配置,每个代理工具的设置方式都不太一样,比较繁琐,并且你每次改动主路由的配置都可能造成全家设备短暂断网,也可能改崩了导致长时间断网,另外如果你的软路由需要运行很多插件,相互之间可能有冲突导致工作不稳定,这些都是负责连接互联网的主路由应该避免的问题
有没有这么一种方式,不改变你家里原来的网络结构,主路由只负责他原本的工作,把刷了openwrt系统的软路由连接到你家里的主路由,科学上网等额外的工作交给这台软路由处理,假设这台是家里长辈的手机,平时只是刷刷视频聊聊天,不需要科学上网,那么他就直接经过主路由访问互联网,避免改动软路由配置导致网络不稳定的情况
再假设这是你的电脑,要经常上外网学习新的姿势,数据首先会交给这台软路由,软路由收到数据后使用代理工具进行加密再发送给节点,数据来到主路由,主路由再将数据转发给节点,节点解密数据后帮我们访问谷歌,谷歌返回的数据会先经过节点加密,然后转发回主路由,主路由再将数据转发给这台软路由,通过解密后,将数据返回给电脑,这样电脑就成功访问了谷歌,这种在主路由旁边再接一台负责科学上网的路由设备叫旁路由,需要注意的是在公共场合随地谈论旁路由可能会招来嘲讽和排斥,因为旁路由的用法或者称呼存在争议,
要解释为什么存在争议我们先搭建好再来细说,希望你已经看过第一期的家庭网络速通视频,相关概念已经有所了解,
先来回顾上期视频创建一个最常见的家庭网络拓扑,你在运营商拉了一条宽带,他会给你分配一个光猫,一般来讲你会单独再买一台路由器,使用网线将路由器的WAN口与光猫相连,路由器通过pppoe拨号获取运营商分配的公网IP,假设为2.2.2.2,除了wan口,路由器还有多个颜色一样的LAN口,为了让大家思路清晰,我们需要单独提取出这4个lan口,把它当作一台交换机,并且和路由器这个虚拟的网口建立了连接,路由器连接交换 机的这个网口有一个ip地址,假设为192.168.2.1,这个是路由器的内网IP,访问这个ip可以进入路由器的管理界面,同时也是你家里整个局域网的网关ip,你家里所有的网络设备通过网线或者wifi的方式连接到这台交换机,路由器开启了dhcp服务,负责为每一台设备分配ip地址网关等信息,这是大部分家庭的网络拓扑,
这是通过上期讲的方式刷入了openwrt的软路由设备,接下来需要将它配置成旁路由
首先需要确定当前你家的局域网网段,跟着视频演示来到网络设置,查看当前电脑的ip地址,可以看到我家的网段为192.168.2,默认网关是192.168.2.1,你家可能是其他的,记住他,然后将电脑连接主路由的网线拔下来,插到刚刷好openwrt的软路由Lan口上,根据上期视频讲的,要么插第一个口,要么插倒数第一个口,总有一个是lan口,由于lan口默认开启了dhcp服务,稍等片刻电脑通过dhcp获取到了软路由分配的ip地址和网关,如果你获取到的IP是169.254.x.x说明插错口了,换另一个,这个默认网关就是软路由的ip,使用浏览器访问,默认密码为空,先随便设置一个密码,来到接口页面,将默认的这两个wan口删掉,编辑lan口,lan口默认协议是静态地址,也就是需要自己手动配ip地址网关等信息,不通过dhcp自动获取,设备这里默认是br-lan的网桥设备,上期说过网桥就相当于交换机,至于交换机的作用可以回看第一期,有些朋友可能觉得直接用下面的eth物理网口效率更高,我没有做过测试,但理论上来讲差距微乎其微,不用过于纠结,按默认即可,ipv4地址改成和主路由同网段某个空闲ip,刚才查到主路由的ip是192.168.2.1,为了方便记忆,我这里改成192.168.2.2,网关改成主路由的ip,192.168.2.1,因为这台旁路由要上网的话同样得找网关,也就是主路由,在高级设置里将dns服务器同样设置为主路由,我们需要让旁路由提供dhcp服务,默认已经开启了,不要关闭,点击保存,此时的网络拓扑就是旁路由的ip地址为192.168.2.2,网关为192.168.2.1,并且提供了dhcp服务,来到设备标签页,可以看到我有eth0和eht1两个物理网口,本来wan口用了eth1,但是旁路由不需要wan口,刚才我们已经把wan口删了,所以eth1现在是空闲的,可以把它桥接到br-lan,相当于给交换机添加网口,多出来的这个网口可以用来接入其他设备,如果你不需要的话可以不做这一步操作,点击保存并应用,稍等片刻,我们可以通过新的ip192.168.2.2进入旁路由的管理界面,成功进入之后,接着就需要将旁路由连接到主路由的lan口,由于我刚才把两个网口都桥接到了br-lan,所以这两个网口都可以当lan口用,当然条件允许的话我还是建议你把电脑重新插回到主路由,这样连接主路由的设备互访是直接通过交换芯片,不需要经过旁路由的网桥
可以看到目前局域网里有两个提供dhcp服务的设备,存在冲突,我们需要关闭其中一个,考虑到大家用的主路由都不一样,小米、华硕、tplink等等,不一定都能手动指定dhcp的网关,所以本教程统一使用旁路由提供dhcp服务,将主路由的dhcp服务关闭,小米路由器可以在常用设置下的局域网设置里关闭dhcp,其他品牌的话请自行上网查询,现在局域网里就只有旁路由提供dhcp服务了
连上主路由后,这台旁路由应该就能正常上网了,简单测试一下,来到网络诊断,ping一下baidu试试,能通就说明没问题,接下来给旁路由安装上期讲过的几个插件,具体详细的操作步骤建议回看上期视频,我这里就快进跳过不浪费大家时间,另外passwall有些朋友反馈缺少依赖,我试了一下确实少了,上期视频演示的时候还有这个依赖,不清楚发生了什么,先不管了
现在我已经通过上期讲的方法将节点导入到了科学上网插件里,界面显示运行中,此时这台软路由已经可以科学上网了,刚才我们已经关闭了主路由的dhcp服务,现在是旁路由负责分配ip信息,默认情况下,谁是dhcp服务器,网关和dns就是谁,所以电脑的网关应该是ip地址为192.168.2.2的旁路由,也就是电脑访问谷歌的数据会交给旁路由处理,旁路由会使用代理工具对数据进行加密,并且以他的名义转发给主路由,主路由再转发给互联网上的节点服务器,节点服务器会帮我们访问谷歌,并将谷歌返回的数据加密后发回给我们,主路由将数据返回给旁路由,旁路由经过解密后,再将数据返回给电脑,这样电脑就能成功访问谷歌了
但此时我的电脑并不能访问谷歌,可以看到默认网关为2.1,这是主路由的ip地址,也就是电脑访问谷歌的数据直接发给了主路由,并没有经过旁路由,因为虽然主路由已经关闭了dhcp,但之前分配的ip租约还没到期,电脑没有主动释放这个ip,所以用的还是主路由下发的ip信息,此时可以先将网卡禁用,稍等片刻后再启用,手动释放掉主路由分配的ip信息,这样就会重新通过dhcp获取ip地址,由于现在局域网中只有旁路由开启了dhcp服务,很显然会由旁路由负责分配ip,可以看到网卡刚获取到ip,谷歌网页就进入了,说明我们已经成功通过旁路由实现了科学上网,再来验证一下,可以看到默认网关,dhcp服务器,dns服务器都是192.168.2.2,也就是旁路由的ip,此时你家局域网里所有的网络设备,只要是通过dhcp自动获取ip地址,都能通过旁路由进行科学上网了,比如我这台手机,尝试访问谷歌,发现无法访问,原因刚才也说过,dhcp租期还没到,用的还是主路由分配的ip信息,默认网关还是192.168.2.1,我们只需要断开wifi重连即可,此时的网关和dns都是旁路由的ip了,再来访问谷歌,直接就进去了,可以看到这种方式不需要改动你家原来的网络结构,只是在旁边接一台路由器就能解决科学上网问题了,但现在并没有解决我们刚开始提到的问题,也就是让某些设备不经过旁路由,比如家里的长辈不需要科学上网,就直接走主路由,那长辈的手机默认网关应该是主路由的192.168.2.1,但是现在所有的网络设备都是通过旁路由的dhcp,网关自然也就是旁路由了,除了通过dhcp自动获取ip,我们也可以手动为每台设备设置不同的ip和网关,你只需要把不走代理的设备网关改成主路由的ip就可以了,非常简单,但实际操作比较繁琐,并且像电视盒子之类的可能根本就没法修改网关,所以并不推荐这种方式
那有没有可能让dhcp服务器为不同设备分配不同网关?答案是可以的,openwrt默认使用dnsmasq提供dhcp和dns服务,他支持为不同设备分配不同网关,跟着视频演示进入dhcp静态地址分配,在已分配的租约里可以看到两台设备,分别是刚才演示的安卓手机和电脑,家里其他设备还没有找旁路由获取ip地址,因为主路由分配的ip租期还没到,你可以重新连接网线或Wi-Fi,或者直接重启主路由,让所有设备断线重连,就会重新找dhcp服务器获取ip信息,列表里也就会显示其他设备了,我这里再添加一台苹果手机做演示,此时有三台设备,假设我现在想让安卓和苹果不能科学上网,其他所有设备都能科学上网,那么只要让他两的网关和dns指向主路由,其他设备全部指向旁路由即可,先将安卓和苹果的mac地址进行静态绑定,静态绑定就是将mac地址和某个ip添加映射关系,以后这个mac地址找这台dhcp服务器要ip,都会分配固定的ip地址,点击添加,先绑定苹果手机,mac地址这里选择苹果,可以进入wifi连接中查看,这个无线局域网地址就是mac地址,我的是91结尾,也可以通过下方分配的ip地址来分辨,当前的ip地址是192.168.2.203,选中mac地址后,下方的IP地址也会自动选中当前一分配的ip 203,可以随便设置一个好记的主机名,给这个设备添加一个标签,可以随便写,假设为direct,也就是直连的意思,点击保存,接着再添加安卓手机,选择安卓的mac地址,不知道的话同样可以进入wifi连接中查看,如果你想给他分配一个好记的ip,可以在这里手动填写,比如222,填写之后按回车选中,随便给个主机名,标签同样填写direct,点击保存,跟着视频演示进入lan口的dhcp高级设置,在dhcp选项中输入tag:direct,3,192.168.2.1, 注意所有的标点符号都是英文的,意思是所有标签为direct的设备,给他分配的网关为192.168.2.1,也就是主路由的ip,其中3表示设置网关,接着再添加一条,将3改成6,6表示dns,这些都可以在官方文档中查看,这条意思是所有标签为direct的设备,给他分配的dns为192.168.2.1,其他不是direct标签的设备还是按默认的,谁提供dhcp服务,网关和dns就是谁,点击保存,然后应用,现在的情况就是安卓和苹果手机的dns和网关是主路由,电脑和其他所有网络设备的dns和网关都是旁路由,重启电脑的网卡,可以看到网关和dns都是旁路由的ip 192.168.2.2,可以正常科学上网,手机现在还可以正常科学上网,说明网关还是旁路由,接着重新连接wifi获取ip信息,此时可以看到网关和dns变成了主路由的ip192.168.2.1,此时再来尝试访问谷歌,就无法访问了,数据不会经过旁路由,只能访问没有被墙的网站
回到dhcp静态分配页面,刚才演示的是小部分设备直连,大部分设备走代理,接下来演示小部分设备走代理,大部分设备直连的情况,假设我现在只想让安卓手机走代理,其他设备全部走直连,也就是只让安卓手机的网关和dns分配到旁路由,其他设备全部分配为主路由,点击编辑,将安卓的标签删掉,改成proxy,也就是代理,注意这个只是为了方便我们区分,实际上可以随便写,点击保存,回到lan口的dhcp高级设置,将刚才添加的dhcp选项删掉,输入tag:!proxy,3,192.168.2.1,意思是如果标签不是proxy的设备,就给他分配网关为192.168.2.1,我们只设置了安卓手机的标签为proxy,也就是除了安卓手机,其他设备的网关都会分配主路由的ip192.168.2.1,再添加一条dns,点击保存,然后应用,现在电脑的网关是旁路由的2.2,重启网卡,可以看到默认网关和dns都变成了192.168.2.1,接着看看标签为prxoy的安卓手机,现在的网关还是之前分配的主路由ip,重连wifi,此时这台设备的网关和dns就变成了旁路由,可以正常访问谷歌
这样就能非常方便的实现按设备分配网关了,此时就算是配置好了
可以看到旁路由实现起来确实更简单,配置也更灵活,貌似完胜上期讲的主路由方式,事实真的是这样吗?接下来给大家泼泼冷水
现在我已经将电脑恢复到网关指向旁路由,此时电脑可以正常访问谷歌, 但他居然神奇的无法访问百度,同样可以正常访问推特,却无法正常访问知乎,也就是可以正常翻墙,但不需要翻墙的网站却无法访问,原因是我偷偷开启了防火墙界面里的丢弃无效数据包,默认情况下是没有开启的,也就是说我们访问百度的流量被旁路由判定是无效数据包,于是被直接丢弃了,要解释这种现象需要稍微讲细一点
假设电脑已经通过dns获取到了百度服务器的ip为6.6.6.6,在正式给百度发送http数据之前,电脑需要先和6.6.6.6进行三次握手建立tcp连接,首先由电脑发起建立连接的请求,由于目标ip6.6.6.6不属于192.168.2的网段,所以数据会交给网关,也就是旁路由,旁路由会记住你向6.6.6.6发起了建立连接的请求,由于这是国内的ip地址,代理工具通过分流判断不需要走代理,于是旁路由直接将数据转发给了他的网关,也就是主路由,接着再由主路由帮忙转发给百度,注意路由器会先进行nat处理,将wan口的公网ip替换掉数据包里的源IP,这是第一期讲过的内容,百度收到数据后,会回复我们同意连接,数据来到主路由,主路由会再进行nat处理,将公网ip替换回原来的内网ip,也就是电脑的ip,由于主路由和电脑在同一网段,所以数据会直接发给电脑,注意此时数据包没有经过旁路由,电脑收到数据后,发现是6.6.6.6返回的同意连接,于是会回复确认并开始发送数据,同样由于6.6.6.6不属于192.168.2的网段,所以数据会交给网关,也就是旁路由,此时就出现问题了,旁路由记得你发起了建立连接的请求,但是没有收到666返回的同意连接,因为主路由将同意连接的数据包直接转发给了电脑,并没有经过旁路由,现在电脑又直接发起接下来的流程,这个数据包就会被旁路由判定为无效数据包,由于我们勾选了丢弃无效数据包,所以电脑也就无法正常访问不需要被代理的网站了,这种往返数据包经过不同路径的情况叫做非对称路由,虽然我们只要不勾选丢弃无效数据包就不会出现这种情况,但非对称路由很有可能造成其他连接状态追踪问题,毕竟都已经被判定为无效数据包了
将这个取消勾选就能恢复了,另外有些朋友问需不需要关闭这个syn泛洪防御,有些教程说这个会有影响,其实关不关都无所谓,这个选项只是防御进入软路由本身的流量,不影响你的数据转发,另外这个功能的保护很有限,真的有人要ddos你可不是这个简单的开关就能防住的,更何况默认情况下根本就没有暴露在公网,所以开或关都无所谓,点击保存并应用,此时就能恢复访问国内网站了,同时也能正常科学上网,
除了这种情况,还有可能出现通过网线连接的设备可以正常上网,但是通过wifi连接的设备同样只能翻墙,不能访问国内网站,也是类似的原因,但这种情况和主路由也有关系,有些品牌的路由器会将网桥互相访问的数据交给iptables处理,也就是iptables会处理局域网设备之间互访的数据,iptables是用来配置数据包该怎么走的工具,比如数据包是否需要进行nat处理就是通过他来进行配置,防火墙主要也是通过它配置,我们当前用的openwrt版本已经把iptables改成nftables了,不过作用是一样的,
假设此时我通过wifi访问百度,wifi也桥接在交换机上,但由于wifi并不是基于以太网,需要先转换为以太网的帧格式才能交给旁路由,可能是cpu也可能是其他硬件进行转换处理,不管怎样数据都会经过操作系统虚拟的网桥,由于启用了刚才说的功能,此时会交给iptables处理,iptables会判断数据包是否需要进行nat,但是发现目标是旁路由,于是不会进行nat处理,此时需要注意,iptables会记录这个数据包的ip端口协议等五元组信息,之后再遇到这个五元组的数据包,为了提升效率,不再进行判断,直接采取和之前相同的策略,也就是不进行nat处理,数据来到旁路由,代理工具根据分流规则发现不需要代理,于是不对数据包进行处理,直接转发给主路由准备发往互联网,此时又会进入iptables处理,由于数据包的源ip和源端口,目标ip和目标端口以及协议都没有改变,和之前保存的五元组匹配上了,于是沿用之前的nat处理方式,也就是不进行nat,数据包直接转发到互联网,很显然,源ip是内网ip,数据包会被互联网上的路由丢弃,也就无法正常访问了
那为什么通过网线连接又可以正常访问呢?因为硬路由都有专门的以太网交换芯片来处理有线设备的连接,也就是从一个网口发给另一个网口的数据根本就不需要经过操作系统虚拟出来的网桥,电脑发给旁路由的数据没经过网桥,所以可以正常进行nat
要解决这个问题可以参考这篇文章,但文章中提供的方法可能并不适合你,最简单的方法就是开启这里的ip动态伪装,英文翻译为Masquerade,二次中文翻译为假面舞会,简称NAT,没错,这玩意就是干nat的活,当开启之后,wifi数据经过iptables被记录为不需要进行nat,接着数据来到旁路由,代理工具根据分流规则发现不需要代理,于是不对数据包进行处理,直接转发给主路由,但是在转发之前,由于开启了lan区域的ip动态伪装,所以会进行nat处理,将源ip替换为旁路由自己的ip,也就是192.168.2.2,然后转发给主路由,由于源ip改变了,不匹配之前的五元组,对于主路由来说就是一个全新的数据流,于是会进行nat判断,发现目标ip是不同网段,于是对源ip进行nat处理,将其转换为wan口的公网ip,再将数据发送到互联网,此时就能正常访问了,
另外即使我开启了丢弃无效数据包,无法访问国内网站,但如果我开启ip动态伪装,又能够正常访问国内网站了,因为这样就相当于将非对称路由强制通过nat转换为对称路由,不会出现无效数据包的问题,这里就不再浪费时间演示过程了,如果不理解的话自己慢慢缕一缕。
但开启ip动态伪装之后,数据会经过了两次nat处理,对性能有一定的影响
除了以上问题,还有非常头疼的ipv6问题,由于ipv6并不是通过dhcp下发网关,所以如果你的电脑分配到了ipv6地址,默认网关一般都是主路由,如果你要访问的网站刚好支持ipv6,就会直接通过主路由发到互联网,于是就出现了无法翻墙的情况,另外即使是主路由也会由于ipv6配置不当造成无法翻墙的问题,这也是为什么我一开头就让大家关闭ipv6,目前来看除了小部分用户有公网访问的需求,大部分用户并不需要ipv6,这玩意不需要就没必要开启,并不是说给了你你不用就有什么损失,相反关了会省去很多烦恼。关于ipv6的话题我们以后再讲
总之由于旁路由并不是一种标准的网络拓扑结构,可能会出现各种奇奇怪怪的问题,并且随着网络结构越复杂,出问题的概率越大,这应该就是旁路由存在争议的主要原因
但是有争议并不代表不能用,大部分朋友的家庭网络结构很简单,那么旁路由就够了,方便省事,配置得当也不会出现什么问题,但如果你家里是一个小型的idc,甚至还要跑BGP,那旁路由肯定就不适合你了,所以主要还是看每个人的需求,没必要一棒子打死
另外几乎所有在非路由系统上跑v2ray或者clash给其他设备做透明代理的方法,都和本期讲的旁路由是同一种东西,包括一些官方文档,只要你将网关指向了同网段里的其他的设备,而这个设备的网关又指向了主路由,这种用法就是旁路由,只是叫法不同,可能叫旁路网关、透明网关、透明代理、网关模式、网关代理等等
像是我之前发的用安卓手机,windows和linux共享科学上网环境本质上也是旁路由,还有人用apple tv共享,以及用mac mini共享,比如给王思聪装服务器的ak,用的就是surge的网关模式,这些也都是旁路由的用法
总之你的设备只要能开启ip转发,那就有成为旁路由的潜质,如果说是这种网络结构要排斥的话,那以上方法都属于旁路由,都应该被排斥,那样的话就只剩下买软路由了,可能我的观众也会有人排斥旁路由。由于我接触软路由的时间比较短,或许还有其他我不知道的原因,欢迎在评论区留下你的看法