书接上文家庭网络升级其二——Openwrt插件安装踩坑指北前文提到我之前放弃了使用iKuai虚拟Openwrt的方案转而直接将Openwrt安装到物理机上。但现在我将宽带换成了联通的500M再加上iKuai的分流实在是太好用了,于是现在重新回到原始的方案,用iKuai来PPPoE拨号,用Openwrt实现个性化上网。主路由依旧使用使用了5年的搭载 Intel 3865U、双 Intel I211 千兆网卡的工控机。最开始还是打算使用PVE实现虚拟化,但这个2核CPU性能实在是太弱了,跑500M带宽CPU占用率都不下90%。所以还是使用iKuai内部虚拟Openwrt,五年之后的iKuai虚拟化如何呢,我想说确实比之前要好。
分流的方案一是创建wan2通过多线负载自定义运营商来分流,这样做的好处是方便维护,自定义运营商的单列表最大数有5000(这意味着只需要创建两个表就可以基本覆盖国内ip表,而且分组名称可以相同,这样分流设置只需填一条),也方便域名分流。当然这个方案前期配置比较复杂,但相信看完我这个配置流程会非常简单。
分流的方案二是利用端口分流中的下一跳网关,这个相比我四年前的一代目DHCP分配网关有一个好处就是当Openwrt上不了网不影响境内的正常上网,境内直接通过端口分流的外网线路分流走了。虽然这个方案配置起来非常简单,只需要按最传统的单臂路由配置即可,不过有一个问题就是终端分组里的ip分组单列表最多只能填1000个,这意味着通常需要设置8个分组(并且名称设置要不一样,在端口分流源地址输入需要点八次)。
不过我们都可以用https://github.com/joyanhui/ikuai-bypass这个项目对IP表自动维护更新。
我先以方案一来设置。以我的为例,iKuai Lan地址为192.168.9.1,Openwrt Lan地址为192.168.10.1。
开始虚拟
先在https://openwrt.ai/自定义构建固件,在这里可以快速配置好插件以及网络配置等,这里特别注意勾选默认eth0为Wan口会方便很多(当然如果你选择使用单臂路由的方式就不勾选,因为这样只需要一个Lan口就行,详见后文的方案二)。下载固件img之后,先在iKuai的系统设置->磁盘管理查看有没有设置普通存储的磁盘分区,如果没有则绑定一个用来存放虚拟机。接着在文件管理内打开刚刚创建的存储分区直接上传openwrt的img,这里复制一下镜像的文件名。
进入网络设置->内外网设置点击wan1图标,点击上方wan1右边的加号,这里由于我是只有双网口所以网卡选择vnet点击绑定之后,接入方式选择静态,IP地址填写192.168.10.2,网关填写192.168.10.1,先不选择设置为默认网关,自动切换一定要先选上,线路检测设置为HTTP www.google.com

在高级应用->虚拟机添加虚拟机。

这里的安装磁盘选择刚刚创建的存储分区,其他的按自己的情况来填。这里需要特别注意的是设备管理的设置,首先要将默认的网卡删除,因为系统默认创建的网卡不是半虚拟化模式,这样后面性能会大打折扣(我是被限制到了300M)。先添加启动盘——设备类型选择磁盘,磁盘类型选择引用磁盘,磁盘路径填/分区名称/镜像名称。再添加网卡,网卡模式选择半虚拟化模式,桥接接口第一个选lan1,第二个选wan2,这里第一个就默认是eth0。
如果是使用PVE等平台虚拟则只要在PVE多虚拟一个网卡iKuai的Wan2和Openwrt的Lan桥接到同一个网卡就行,同样iKuai的Lan和Openwrt的Wan桥接到同一个。
虚拟机,启动!
开始配置
Openwrt
如果是用Kwrt自定义固件的话应该就没什么问题,wan口自动DHCP连接了,直接访问192.168.10.1。其他可以参照这个配置。

进入后台之后先到网络设置,将wan口协议改为静态地址192.168.9.2(当然不改也可以到iKuai设置DHCP静态分配地址。不管怎么设置都一定要让Openwrt的地址固定!)。在全局网络选项设置数据包引导为启用所有CPU(Packet Steering)。在防火墙关闭SYN-flood 防御,关闭IP动态伪装(NAT),路由/NAT卸载类型选择软件流量卸载(开启这个对性能改善效果比较明显),入站、出站、转发全部选择接受。然后到服务里的相关科学上网插件配置一下节点信息。
到这里对于Openwrt的基础配置就完成了。回到内外网设置如果看到wan2是绿的没有提示掉线就代表科学上网配置成功了。
iKuai
进入流控分流->端口分流添加分流方式选择外网线路,线路选择wan1,负载模式选源IP+目的IP+目的端口,源地址将Openwrt的wan口地址192.168.9.2填入进去。这样Openwrt出来的流量就不会又回去形成环路。在多线负载自定义运营商添加国内IP。回到多线负载添加线路,负载模式选择源IP+目的IP+目的端口,运营商选择刚刚创建的,单独启用wan1线路。在内外网设置里把wan2设为默认网关。到这里基本上就实现了iKuai无感分流啦。接着如果想要实现自动维护的话就可以用开头的那个项目。
如果是用Kwrt自定义固件的就不需要点默认eth0为wan口,同上面的前置流程一样,固件上传之后创建虚拟机的时候只需要添加一个虚拟网卡。Openwrt的静态地址就需要和iKuai在同一个网段,以我这里为例是192.168.9.2。进入iKuai的端口分流,分流方式选择下一跳网关,填入Openwrt的地址,源地址填iKuaiDHCP分配的网段(以我为例是192.168.9.3-192.168.9.254)再添加外网线路分流方式,线路选择wan1,源地址依旧是DHCP网段,目的地址需要点配置分组,将国内IP分1000个一组粘贴进去。
到这里就完成了单臂路由的无感分流。
----------相比方案二我更喜欢方案一一点,只要掌握iKuai Lan->Openwrt Wan->Openwrt Lan->iKuai Wan2的基础逻辑,配置起来就非常简单。
配置ikuai-bypass
先到https://github.com/joyanhui/ikuai-bypass/releases选择适合自己安装平台的版本,我这里以openwrt(linux)为例,我是x86平台就下载amd64.zip这个文件,解压之后会有config.yml和一个可执行文件。先打开yml进行编辑,如果使用方案一可以吧ip-group这大段注释掉,同理使用方案二可以把自定义运营商注释掉,当然也可以不动。ikuai-url填写iKuai地址,cron后面是脚本更新列表的时间默认0 4 * * *就是每天凌晨4点更新。接着把下面每个模块中的src-addr地址改为iKuai DHCP的网段。接着将config.yml改名为ikuai-bypass.yml 将yml和可执行文件上传到Openwrt的/opt/目录,上传完后在终端输入chmod +x /opt/ikuai-bypass赋予执行权限。复制下面这段完整的代码输入到终端。
cat > /etc/init.d/ikuai-bypass << \EOF
#!/bin/sh /etc/rc.common
START=99
start(){
if [ -f "/opt/ikuai-bypass" ]; then
# -r cron : 使用程序内置的定时循环模式
# -c ... : 指定配置文件路径
# > /dev/null : 丢弃日志输出,防止填满存储空间
/opt/ikuai-bypass -r cron -c /opt/ikuai-bypass.yml > /dev/null 2>&1 &
echo "ikuai-bypass 服务已启动 (模式: cron)"
else
echo "错误: 未在 /opt/ 找到 ikuai-bypass 文件"
fi
}
stop(){
# 查找并杀掉进程
killall -q -9 ikuai-bypass
echo "ikuai-bypass 服务已停止"
}
restart(){
stop
sleep 2
start
}
EOF回车后可以输入这串cat /etc/init.d/ikuai-bypass检查是否创建正确。

接着分别输入chmod +x /etc/init.d/ikuai-bypass、service ikuai-bypass enable、service ikuai-bypass start && ps |grep ikuai-bypass 出现/opt/ikuai-bypass -r cron -c /opt/ikuai-bypass.yml就代表成功运行了。到iKuai里看看是否自动添加列表了吧~
别忘了将新的分流规则加上。
