🌐iKuai与Openwrt的有机结合:传统旁路由方案的完美替代
00 分钟
2023-6-25
2023-11-4
type
status
date
slug
summary
tags
category
icon
password

1、传统旁路由方案的弊端

在传统的旁路由(透明网关)方案中,为了能够科学上网,内网设备需要以旁路由为网关,然后旁路由以主路由为网关来让设备正常联网。在这种网络结构中存在多种弊端,比如说当旁路由掉线了,那么所有以旁路由为网关的设备将直接失去与外网的连接。
在本文,作者将介绍一种可以完美替代旁路由结构的网络搭建方案,可以有效的提升网络的速度和稳定性,并且还可以在此基础上再进一步对内网的各种协议、终端等进行管控。
传统的旁路由方案
传统的旁路由方案

2、网络拓扑出处

非本文作者原创,此思路与网络结构出自 V2EX 上的《爱快 & OpenWrt 分流网络拓扑(单出口版)》文章,作者为 @putaosi
建议各位可以先去看一遍原作者的文章,了解其中的逻辑之后再回来对比着看。
本文参考其中的逻辑将其应用于以 unRAID 为虚拟平台的 iKuai + Openwrt 网络结构中。

3、物理环境与网络环境介绍

  • 物理设备:使用设备为畅网 N5105(V3版),4 个 2.5G 网口(网卡型号为 Intel 的 i225-V),虚拟机网口的分配和配置等请看下文。
  • 底层平台:底层使用 unRAID 作为虚拟化平台。
  • iKuai 虚拟机:作为主路由拨号(光猫已经设置为桥接)。
  • Openwrt 虚拟机:科学上网。
  • ISP:电信 300M 带宽。

4、网络拓扑

原作者的网络结构如下:
notion image
博主根据其逻辑,整理出本文所实现的网络拓扑:
本文实现的网络结构本质上与原作者是一样的,读者朋友们需要理解其中的逻辑之后再根据自己的实际情况来实现(一开始不好理解,读者朋友们得多看几遍)。
notion image

4.1、节点设备说明

  • 作者内网网段10.10.10.X/24
  • iKuai
    • WAN1 用于拨号连接到外网。
    • LAN 地址是 10.10.10.1
    • WAN2 接口的网关指向 Openwrt 的 LAN 地址:10.10.11.2 —> 10.10.11.1
  • Openwrt
    • LAN 地址是 10.10.11.1
    • WAN 接口的网关指向 iKuai 的 LAN 地址:10.10.10.6 —> 10.10.10.1

4.2、目标效果

当 iKuai 网段下的设备( 10.10.10.X/24 )访问国内的 IP 时,正常走 WAN1 口访问外网;当访问的国外的 IP 时,借助 iKuai 的分流规则将访问国外 IP 的流量走 WAN2 口出去,也就是发送给 Openwrt 的 LAN 地址,然后 Openwrt 将数据加密后从它的 WAN 出去,也就是将流量发送到 iKuai 的 LAN 口,继而从 WAN1 口出去访问外网。
iKuai 会实现初步的分流,然后当流量到达 Openwrt 时代理工具也会进行一次分流判断 —— 如果是国外的流量就走代理,如果不是在直连出去。

4.3、方案优势

  • 完美替代旁路由方案:可以完美替代如今用的比较多的旁路由(透明代理)方案,不再需要单独的将设备的网关设置为旁路由的地址。
  • 避免多次端口转发问题:避免了因旁路由而大致的多次端口转发的问题(从主路由转发端口给旁路由,再由旁路由转给对应的服务)。
  • 国内外流量直接分流:借助 iKuai 的分流规则可以直接对国内国外的流量直接分流。
  • 可以实现线路的冗余:如果 Openwrt 宕机了,也就是 WAN2 线路断了,iKuai 内可以设置自动切换线路到 WAN1 正常联网。
  • 可更好的利用 iKuai 的流控功能:除了分流之外,还可以更好的实现 QoS 等,并且还可以控制某个设备不走 Openwrt 代理。
  • 没有网关:此方案不存在多层 NAT 问题,所有内网流量都只经过一个网关,保持网络的简洁高效。

4.4、缺点

  • 需更新 IP :需要定期维护国内 IP 地址表,根据作者建议,半年更新一次即可。
  • 不好维护:对于新手来说搭建起来会有难度,并且出问题时也不好维护。

5、iKuai 虚拟机配置和网口分配规划

iKuai 虚拟机的创建不难,到官网下载一个 ISO 安装文件(选择 32 位即可,64 位版本多一个虚拟机功能,但我们用不到),分配 1G 的虚拟硬盘安装即可。
iKuai 的虚拟机安装步骤省略。
notion image
我这里给虚拟机直通 3 个网口,并再多分配一个虚拟网卡:
notion image
直通的三个网口对应到物理设备的接线如下:
notion image
为什么需要将 eth0eth1 直连eth0 是 unRAID 的管理口,eth1 与 iKuai 的 LAN 口,将两者直连的目的是为了能让 unRAID 可以连接外网并也能够在内网中被访问。

6、Openwrt 虚拟机配置

固件我用的是 eSir 的佛跳墙旁路由固件(eSir 网盘),读者可以根据自己的喜爱来使用,没有限制。
OP 的虚拟机由于只用于走科学,不需要拨号,因此无需分配太多的资源,CPU 核心数可以看着给,内存 1G 够用了。
OP 的虚拟机设置
需要提供两个虚拟网卡:
notion image

7、iKuai 系统内设置

7.1、WAN1LAN 设置

根据前面的网络拓扑,在 iKuai 系统内分别将 WAN1 口和 LAN 配置好。
WAN1 设置(用于正常拨号)
WAN1 用于正常拨号
WAN1 用于正常拨号
LAN 设置
链路桥接两个 LAN 口,这样网线无论插在两个口中的哪一个都可以正常访问到 iKuai。
notion image

7.2、WAN2 设置

前面介绍 iKuai 虚拟机的配置时,作者额外添加了一个虚拟网卡,那么这个虚拟网卡的作用是在 iKuai 内用于 WAN2 口。
WAN2 配置
notion image
  1. 创建 WAN2 并绑定虚拟网卡;
  1. 接入方式使用 静态IP(固定IP)
  1. IP 地址设置为另一个网段的 IP,具体是什么地址随意,这里作者使用的是 10.10.11.2 (作者自己内网的网段是 10.10.10.X,所以用 10.10.11.X 方便自己记住);
  1. 网关填写的是 Openwrt 的内网 IP 地址 10.10.11.1
  1. WAN2 设置为默认网关;
  1. 使用线路检测功能,作用是当 Openwrt 离线了会切换到 WAN1 继续正常联网,这里填写的 10.10.10.6 是 Openwrt 的 WAN 地址。

7.3、添加分流规则

(1)添加“自定义运营商”

添加一个 自定义运营商 ,将国内 IP 网段加入到此自定义运营商中。
notion image
将下面链接内的 IP 地址段添加到新建的 自定义运营商规则 中(来自 17mon/china_ip_list ):
由于 iKuai 内自定义运营商最多只能添加 5000 条目的地址,因此需要分两次添加。
notion image
通过两次添加完成国内 IP 地址段
通过两次添加完成国内 IP 地址段
添加国内 IP 地址段的目的是为了能在 iKuai 上分流,也就是当你发起一个访问时,iKuai 接收到你的数据包后会查看你访问的 IP 地址是国内的还是国外的:如果是国内的就走 WAN1 出去,国外的就发送给 Openwrt 走代理。

(2)添加“多线负载”分流规则

多线负载配置
notion image
notion image
  1. 运营商选择之前添加好的自定义运营商。
  1. wan1 线路负载比例设置为 1 并启用(wan2 不需要启用)。
  1. 保存。

(3)添加“端口分流”分流规则防止 Openwrt 回环

端口分流配置
添加一条端口分流规则:
notion image
线路选择 wan1,负载模式如图,将 Openwrt 的 wan 地址(10.10.10.6)设置分流的对象:
notion image

(4)iKuai DNS 设置

由于作者在 Openwrt 中使用 OpenClash 会自带有 DNS 服务器,所作者将 iKuai 的 DNS 服务器设置为 Openwrt 的 WAN 地址( 10.10.10.6 ),读者朋友们可根据自己的实际来设置。
iKuai DNS 设置
notion image
作者之所以将 iKuai 的 DNS 服务器设置为 OP ,是希望借助 OpenClash 的 DNS 功能去避免 DNS 污染的问题,读者朋友其实可以不去这么做,可以直接在 iKuai 上使用公共的 DNS 的即可,例如:
notion image

8、Openwrt 系统内设置

8.1、LAN 设置

LAN 设置
LAN 口的设置只需要保证设置好 IP 地址和子网掩码即可,不需要填写 DNS 。
notion image
LAN 的其他设置参考
notion image
notion image
notion image

8.2、WAN 设置

WAN 设置
WAN 口的设置需要填写好 IP 地址子网掩码网关,然后 DNS 服务器可以填写公共的 DNS 也可以设置为本地环回地址。
如果你的代理工具可以实现本地 DNS 劫持( Dnsmasq 域名解析请求重定向),那么你可以将 DNS 服务器地址设置为 127.0.0.1
notion image
WAN 其他设置参考
notion image
notion image
notion image

8.3、防火墙设置

(1)新建 WAN 区域转发规则

新建 WAN 区域规则
notion image
名称设置为 wan ,设置如下:
notion image
然后将 WAN 口的防火墙设置绑定到所创建的区域中:
notion image
 

(2)防火墙 - 基本设置

防火墙设置
notion image

(3)防火墙 - 自定义规则

防火墙自定义规则参考
notion image
上图中的第一条规则的作用与防火墙基本设置中的“IP 动态伪装”是一样的,所以这里你可以在行首添加上 # 来注释掉此规则。
其余规则的作用是将 DNS 请求转发到本地的 53 端口。这里作者也选择注释掉,因为 Openclash 可以实现本地 DNS 劫持所以不需要这里的规则:
如果你代理工具或者其他的 DNS 工具没有实现这一效果,建议你将 2~4 条规则启用(去掉 # )。
notion image
7874 是 OpenClash 的 DNS 监听端口
7874 是 OpenClash 的 DNS 监听端口

9、使用体验

经过以上设置之后,整体网络就搭建完成了,这里说一下使用体验。

9.1、网络流畅度提升

最大的体验是速度变快,网络访问变得流畅。
由于 iKuai 分流的作用,路由变得更加明确,因此整体网络的流畅度也得到了提升,并且无论是走国内流量还是走国外流量,都能够跑满带宽。
以作者的电信 300M 宽带为例,梯子测速和国内流量下载等都可以跑满带宽:
SpeedTest 梯子测速
SpeedTest 梯子测速
百度网盘可跑满下载
百度网盘可跑满下载

9.2、网络更加稳定

如果使用以前的旁路由方案,如果当旁路由掉线,那么所有以旁路由为网关的设备都将直接断网。
采用了本方案之后,即使旁路由崩掉了,那么后果也只是无法科学上网而已,不影响整体网络的可用性。
即使 Openwrt 虚拟机下线了也不影响 WAN1 线路的正常使用
即使 Openwrt 虚拟机下线了也不影响 WAN1 线路的正常使用

9.3、端口映射问题得到解决

按照以前的旁路由方案,如果某一个设备以旁路由为网关且希望暴露某一个服务到公网上,那么就得从主路由做端口映射到旁路由,再从旁路由映射端口到对应设备上,采用了本方案后此问题不再存在。

9.4、网络更可控

结合 iKuai 的各种流控规则,可对家里的网络进一步调控,比如可控制各种网络协议、限流限速,还可以控制哪些设备不可以走代理等。
iKuai 使用“端口分流”控制局域网内 IP 不走代理
由于我们借助 WAN2 口实现了请求转发给 OP 的作用,因此我们也可以借助 iKuai 的端口分流将不需要走代理的 IP 流量绕过 WAN2 线路。
新建一条端口分流规则:
  1. 分流方式选择“外网线路”;
  1. 线路选择 WAN1 ,也解释拨号的线路;
  1. 线路绑定;
  1. 负载模式选择“源 IP + 目的 IP + 目的端口”,如果效果不佳可以选择“源 IP”;
  1. 协议选择“任意”;
  1. 在“源地址”中添加你希望不走代理的 IP 地址,也可以借助 iKuai 的分组功能实现 IP 分组;
  1. 最后保存规则即可。
notion image

10、常见问题

Q:在此结构下,如何能保证正常访问 unRAID ?

在作者的这个案例里,我用一根网线将管理口与 iKuai 的 LAN 进行了直连:
notion image
这种方式会存在一个缺点,那就是假如 iKuai 崩掉了,那么 unRAID 就无法访问。
解决办法:
取消 eth0 与 eth1 接口的直连,将这两个口单独用网线与交换机相连,这样即使 iKuai 崩掉了也能够正常访问到 unRAID 。

Q:Openwrt 如果宕机了怎么样?

会自动切换到 iKuai 的 wan1 线路,网络不会断,只是无法科学上网而已。

Q:如何控制哪些 IP 不走代理

11、2023-07-24:底层由 unRAID 替换为 iKuai 系统

由于 i225-v 网卡在 unRAID 上存在速率不稳定且会出现断流的情况(主要是由于 Intel 导致的驱动问题),已将底层的 unRAID 替换为 iKuai 系统,但整体的框架依然是一样的。更换为 iKuai 之后已经使用一段时间,目前一切稳定,没有出现 i225-v 网卡常见的断流、重启等问题,带宽也都能跑满。
替换为 iKuai 之后,在 iKuai 上虚拟化一个 OP 系统,然后再按照本文 unRAID 的方法去部署即可,逻辑是是一样的。
如果你也希望使用 iKuai 作为底层系统,在 iKuai 上虚拟化一个 OP 来使用,那么博主大致说一下步骤:
1、需要在 iKuai 中绑定一个物理网口用于创建与 OP 通信的 WAN 口
也就是创建一个 WAN 口,将其绑定到设备的物理网口上。
2、创建 OP 虚拟机,提供两个虚拟网卡
这两个虚拟网卡在 OP 里面用作一个 WAN 口一个 LAN 口,具体设置跟本文正文是一样的。
notion image
3、iKuai 所创建的 WAN 口与 LAN 口连接起来
这里说的连接起来是指 WAN 口与 LAN 口能够互相访问,你可以用一根网线将 WAN 与 LAN 口直连起来,如果你设备上的 LAN 口数量不足,那你也可以将 LAN 口用网线接到交换机,让后也将 WAN 口连接到交换机,这样 LAN 就可以与 WAN 通信。

12、2023-09-20:关于本网络结构下的 DNS 请求以及 OpenClash 的补充说明

在前文关于 iKuai DNS 设置中作者提到了由于本人使用 OpenClash,因此在设置 iKuai 的 DNS 服务器地址时我设置为了 OP 的 WAN 地址,意思也就是说通过 OpenClash 去处理内网下的所有 DNS 请求。
这么做的好处是可以利用 OpenClash 的各种规则去实现关于分流、DNS 防污染等效果,但其实关于 DNS 这一块的内容其实有不少可以注意的点,因此本章节会补充关于此问题的一些信息。
需要说明的是,本章节默认读者已经对 OpenClash 有一定的了解了,因此省略掉关于 OpenClash 一些基本知识的讲解。
(1)建议使用 Redir-Host 模式。
notion image
其实 Redir-HostFake-IP 模式缺点要多一些,不仅需要多做一次 DNS 解析,而且还存在 DNS 污染的可能。但是由于此网络结构下 iKuai 可以借助 IP 来实现分流,所以我还是选择了使用 Redir-Host 模式,这样在内网设备对解析回来的 IP 发起请求时,iKuai 就能拿到目标 IP 地址去做一次分流。
相反的,如果使用的是 Fake-IP,那么由于 OpenClash 会在客户端发起域名解析请求时会返回一个内网 IP ( 192.18.x.x ),所以 iKuai 自然也就没有办法实现分流,而是只能由 OpenClash 负责所有的分流功能,这相当于自废了一部分“武功”。
而且使用 Fake-IP 还会造成另一个问题,那就是如果你使用 IDM 下载器,你会发现下载时有“卡顿”的情况。那是因为 IDM 在发起多线程下载的时候,由于发起下载请求的 IP 地址是 Fake-IP 返回的内网 IP ,所以在多线下载时就会出现“卡顿”的现象。
(2)关于 DNS 污染问题。
理论上,使用运营商提供的 DNS 服务器来做域名解析速度是最快的,但是运营商的服务器往往存在 DNS 污染的情况(作者这边就是这样的),所以如果你比较在意 DNS 污染问题,那其实你也可以使用 OpenClash 的 Fake-IP 模式,并且博主也建议你安顺序去看以下视频了解更多关于 DNS 污染的原理:
  1. 【进阶•DNS泄漏篇】竟能提速降延迟!再也不用担心DNS污染了!90%以上的人都存在DNS泄露!会有什么安全问题?如何解决代理中的DNS泄漏问题?以及WebRTC绕过代理泄漏本机真实IP,看完就知道了
  1. 【进阶•DNS分流篇】提速降延迟!保护个人隐私,彻底弄懂DNS泄漏,让DNS分流不再玄学,详解DNS污染、DNS劫持在透明代理中的行为,redir-host问题太多已成历史,fake-ip成功上位
  1. 【进阶•DNS代理篇】最完美的DNS解决方案?通过代理DNS请求获取正确的ip,杜绝DNS泄露和DNS污染,解决透明代理下fake-ip存在的问题,开启sniffing流量嗅探亦可解决污染问题
  1. 【DNS泄露】实战演示DNS泄漏,全局模式就不会dns泄漏?解答DNS泄露的争议,最简单clash配置DNS方法,fakeip到底会比realip提升网速吗?跨境电商网络环境要求高该如何防止DNS洩露
当你认真看完上述的视频之后,你就了解 DNS 污染是什么意思了,并且如何应对也都清楚了。
然后可以补充的是,在 Redir-Host 模式下,建议大家可以在 OpenClash 中这么去设置 DNS:
  1. 开启“自定义上游服务器”:
    1. notion image
  1. NameServer 中填写上公共 DNS 地址:
    1. notion image
      这里推荐大家使用腾讯或者阿里的 DNS-over-HTTP/3 服务器地址:
      添加的时候记得勾选上“强制 HTTP/3”:
      notion image
      其他更多关于 DOH 或者 HTTP/3 公共 DNS 服务器的信息可以参考:
 
(3)将 DNS 服务器地址设置为 OP 也存在网络稳定问题。
这是因为如果将 iKuai 的 DNS 服务器地址设置为了 OP 的 WAN 地址,那么当 OP 或者 OpenClash 出现问题时,内网将无法正常解析 DNS 请求,那么也就会造成网络无法正常使用的,从而会出现诸如微信或者 QQ 可以使用但是无法打开网页的情况。
如果你不希望面对此种风险的话,你可以将 iKuai 的 DNS 服务器地址设置为其他的公共 DNS 服务器,例如:
记得勾选上“DNS 加速服务”,否则其他设备将其 DNS 服务器地址设置为 iKuai 的 IP 地址时将无法实现域名解析。
notion image
或者:
notion image
(4)如果你使用的是 Fake-IP 模式,请不要使用端口分流来实现局域网 IP 不走代理。
前面在“9.4、网络更可控”讲解过使用 iKuai 的端口分流功能可以控制某个 IP 或者 IP 段不走代理,这个方法在 OpenClash 下的 Redir-Host 模式下是有用的,但是如果你使用的 Fake-IP 模式,那么这时候就不能这么用了,因为会导致被分流的 IP 无法上网。
原理是由于 Fake-IP 模式在处理 DNS 请求时返回的是一个内网 IP 地址而不是真实的 IP 地址,所以后续内网的设备需要与 OpenClash 通信才能正常联网,而如果强制分流不走 OP 的 WNA2 口,那么被端口分流的 IP 就无法正常联网了。
 

评论