Files
my-vault/00_Inbox/Clippings/2023/03/Openwrt-Bypass-Gateway-Ultimate-Setup-Debunking.md
T

402 lines
19 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
page-title: "Openwrt 作为旁路网关(不是旁路由、单臂路由)的终极设置方法,破解迷思 - 少数派"
url: https://sspai.com/post/68511
date: "2023-03-29 12:53:38"
---
> 副标题:以x86、斐讯N1、树莓派为例。旁路网关的性能到底重不重要?
先说结论:
> 旁路网关不会影响局域网性能,也不会影响广域网下行性能。因此,使用旁路网关的主要目的如果只是用来转发代理上网的流量,旁路网关的性能并不重要。测试可见文末。
破解迷思:
1. 旁路网关**不需要**取消br-lan**不需要**复用eth0添加wan口!
2. 旁路网关**不需要**打开防火墙的lan->wan IP动态伪装(POSTROUTING MASQUERADE)!
这两种做法都是网上常见错误设置方法,不是标准的“旁路网关”拓扑(那样做实际上是“单臂路由”),不能发挥局域网的最佳性能。具体设置方法可见文末。
**获取、编译 Openwrt 固件**
不要觉得困难,因为我已经帮你编译好了。
相比于官方镜像,我这个固件主要是定制和集成了一些内核模块、应用软件,更好兼容本文推荐的路由设备,更符合国内使用场景的需求。与其它一些第三方固件相比,最大的特点是:简洁。它只是为了做路由、网关而定制的固件,没有其它乱七八糟的非必须功能。
当然,如果你想加入其它软件,并且编译自己的版本,也是非常简单的。
利用 Github Actions 提供的免费集成功能,每周五会自动生成最新固件,提供下载和升级方法。
👇可以去我的软件仓库了解并获取固件👇
[Build Openwrt Firmware](https://sspai.com/link?target=https%3A%2F%2Fgithub.com%2Friverscn%2Fbuild-openwrt-firmware)
![](https://cdn.sspai.com/2021/08/28/article/56225dd110cc39fb13ec7517e568a7a6?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
Bootstrap 主题
![](https://cdn.sspai.com/2021/08/28/article/844059b51039f2c7840add468ec168b1?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
Argon 主题
**常见路由设备刷写/升级 Openwrt 固件**
Openwrt 固件通常是一个镜像文件,以 img 或 img.gz 为后缀。
主要刷写方式如下:
 
可从外部存储启动
不可从外部存储启动
**没有内部存储**
直接将固件写入存储设备
(不存在这样的机器)
**内部存储可拆卸**
拆下内部存储,直接将固件写入
拆下内部存储,直接将固件写入
**内部存储不可拆卸**
通过外部存储启动,再将固件写入内部存储
通过原厂系统刷入factory固件转换,或其它刷机方式
将镜像写入可移动存储设备的工具:[Etcher](https://sspai.com/link?target=https%3A%2F%2Fwww.balena.io%2Fetcher%2F)
## **X86**
X86 是最简单的,[官方有详细说明](https://sspai.com/link?target=https%3A%2F%2Fopenwrt.org%2Fdocs%2Fguide-user%2Finstallation%2Fopenwrt_x86)。
简单来说,先把设备的内置存储设备拆下来,通过USB转接的方式连接到你的电脑上。然后使用 [Etcher](https://sspai.com/link?target=https%3A%2F%2Fwww.balena.io%2Fetcher%2F) 写入镜像文件,再把存储设备装回去,就能启动了。
也有其它方式,比如先用一个 Ubuntu Live U盘在要安装 Openwrt 的设备上启动,在设备上将解压后的img镜像写入内置存储。命令是 `dd if=openwrt-18.06.1-x86-64-generic-ext4-combined.img of=/dev/xxx`
后续升级可以通过 Openwrt 内置的系统/升级功能进行。
> 网上有售x86“工控机”,具备多个网口,很适合作为路由器。在2021年,我建议你购买J4125 CPU的机器作为软路由,售价大约1000元左右。性能是NAS级的,你想用它跑任何家庭网络服务压力都不大。
> 也可以考虑购买“迷你主机”,和工控机并没有本质区别。对于X86电脑来说,网口不够用也没关系,通过USB3.0可以扩展USB网卡,1Gbps或2.5Gbps网卡都没问题。
> 你甚至可以用虚拟机跑 Openwrt 来作为路由设备,复用你现有的电脑。
## **单片机:以树莓派为例**
树莓派也非常简单,因为它是通过SD卡启动的。使用 [Etcher](https://sspai.com/link?target=https%3A%2F%2Fwww.balena.io%2Fetcher%2F) 向SD卡写入镜像文件,插卡就能启动了。[官方有详细说明](https://sspai.com/link?target=https%3A%2F%2Fopenwrt.org%2Ftoh%2Fraspberry_pi_foundation%2Fraspberry_pi)。
后续升级可以通过 Openwrt 内置的系统/升级功能进行。
其它型号的单片机,包括像 NanoPi [R2S](https://sspai.com/link?target=https%3A%2F%2Fwiki.friendlyarm.com%2Fwiki%2Findex.php%2FNanoPi_R2S%2Fzh)/[R2C](https://sspai.com/link?target=http%3A%2F%2Fwiki.friendlyarm.com%2Fwiki%2Findex.php%2FNanoPi_R2C%2Fzh)/[R4S](https://sspai.com/link?target=https%3A%2F%2Fwiki.friendlyarm.com%2Fwiki%2Findex.php%2FNanoPi_R4S%2Fzh),已获得 Openwrt 官方支持,获取固件和刷写也非常容易。
> 在全球芯片短缺的2021年,曾经250元左右一片的2G树莓派4B,卖到了近500元。树莓派4的性能作为路由器非常合适,本来这是一个值得考虑的选项,但现在,显得非常鸡肋了。建议等 芯片供应正常再购买。
> 还有很火的 NanoPi R系列,价格也涨了近一倍……建议观望,玩ARM单片机,本来就是图的便宜好玩,太贵了不如玩x86。
> 树莓派4B包含了两个USB3.0接口,因此可以用它来扩展USB网卡。而树莓派3B的网络接口连千兆都跑不满,不推荐使用比4B性能更差的型号来作为路由设备。
## **其它“电视盒子”:以斐讯N1为例**
斐讯N1可能需要降级并刷写改版固件,然后从U盘启动,再通过安装脚本来安装。该方式由 webpad 提供,可[参考其帖子](https://sspai.com/link?target=https%3A%2F%2Fwww.right.com.cn%2Fforum%2Fthread-340279-1-1.html)进行操作。
如果嫌麻烦,建议你买个刷好的二手。
降级后的N1可以通过刷入 Openwrt 固件的U盘启动,并将其刷入内置EMMC存储。在[我提供的固件](https://sspai.com/link?target=https%3A%2F%2Fgithub.com%2Friverscn%2Fbuild-openwrt-firmware)中,其刷写命令为 `/root/install-to-emmc.sh` ,脚本由 flippy 提供。
> 斐讯N1以及一些外贸盒子,都是可能在闲鱼捡到便宜货的。我手里的N1是在斐讯倒闭前,闲鱼新品甩卖时,80元的价格购买的,非常香。而现在,它可能要买接近200元,不那么香了……
> 这些电视盒子刷入 Openwrt 固件的方法,可能需要你在网上参考一下别人的经验。
> 在所有这些盒子中,性能的排序参考 flippy 的总结:amliogic s922x(代表产品:GT-King、GT-King Pro,目前性能最强的arm盒子) > rockchip rk3399 > amlogic s905x3(代表产品:X96Max+Hk1Box,H96 Max x3) > amlogic s912(代表产品:章鱼星球, 单核与N1差不多,但核数更多) > amlogic s905x2(代表产品:X96Max) = allwinner h6(代表产品:微加云)> s905x或s905d(代表产品:N1) > rk3328(代表产品:我家云、贝壳云)
## **给“硬路由”刷 Openwrt**
本文不涉及硬路由刷 Openwrt。其方式往往是通过先刷入“factory”版 Openwrt 镜像,往后再用“sysupgrade”版镜像,来实现转为 Openwrt 启动的。[官方有详细说明](https://sspai.com/link?target=https%3A%2F%2Fopenwrt.org%2Fdocs%2Fguide-user%2Finstallation%2Fstart)。
> 非常不推荐给成品无线路由(硬路由)刷 Openwrt,基本上都会影响无线性能和稳定性。建议你把它设置成AP模式,用原厂固件,安安静静提供无线接入点就好。Openwrt 还是要买个软路由来跑。
**主路由 vs 旁路网关**
要实现最佳体验,需要注意根据以下情况进行选择:
条件
主路由模式
旁路网关模式
需要替换现有的主路由
需要
不需要
运行 Openwrt 的设备具有较高性能
需要
不需要
运行 Openwrt 的设备具备多个物理网络接口,且带宽足够
需要
不需要
如果不能满足任意其一,建议选择旁路网关模式。
不过世上哪有那么好的事,旁路网关虽然需要满足的条件较少,但也有其劣势,可参考文末的测试。
## **把 Openwrt 作为主路由**
这是常用模式,该模式下,所有设备的网关指向主路由IP,并且主路由作为DHCP服务器、DNS服务器。
![](https://cdn.sspai.com/2021/08/28/ba386ac7121a9863987763f303250e4c.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
主路由模式
如果运行 Openwrt 的设备有2个及以上的物理网络接口,推荐该模式。这是标准的局域网拓扑结构,所有的设备都能获得全双工的传输速率,所有流量都不会“走弯路”。
安装方式也很简单,用 Openwrt 路由器作为主路由就行了。
## **把 Openwrt 作为旁路网关**
但有时候,Openwrt 设备可能只有1个物理网络接口,但又想利用 Openwrt 扩展现有网络的功能,就可以用“旁路网关”的方式实现。
旁路网关的好处是不需要修改现有网络基础设施,只需要在标准的局域网拓扑结构中,增加一个网关设备就行了。网关设备和一个普通的局域网设备在结构上是同等地位。所以也适用于不太好替换现有主路由的情况。
![](https://cdn.sspai.com/2021/08/28/34271393ce691de113e6f3138ff369e1.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
旁路网关模式
旁路官关有两种利用方式:
1. 按需手动设置,只让指定的设备通过旁路网关访问Internet。
2. 接管局域网的所有上网流量。
方式1不需要修改主路由配置,但需要修改客户端设备的网络设置。
方式2需要修改主路由配置,不需要修改客户端设备的网络设置。
两种方式均不影响局域网内的流量路径,局域网设备互访都是直通的(不会经过路由器或网关)。
**基本设置**
## **作为主路由的设置方法**
作为主路由是 Openwrt 的默认设置,这里不必多讲。
Openwrt 可以实现诸多高级特性,诸如多WAN、[IPTV融合](https://sspai.com/link?target=https%3A%2F%2Fblog.lishun.me%2Fiptvhelper-guide)等。这些都是做旁路网关时无法实现的功能。
## **作为旁路网关的设置方法**
### 旁路网关自身的基础设置
刷好固件的新 Openwrt 网关,一般默认的IP地址是192.169.1.1。你可以通过WiFi或网线,**确保电脑只连接了它**,就可以访问该管理地址了。
1. 在“网络”-“接口”的“常规设置”中给 Openwrt 的 LAN 网络接口设置一个和现有局域网同网段的静态 IP 地址,注意不要和现有设备的 IP 地址冲突。然后应用设置。
2. 将 LAN 网络接口的“默认网关”设为主路由的 IP 地址。
3. 在“高级设置”中找到“使用自定义的 DNS 服务器”设为主路由的 IP 地址。
4. 在“DHCP 服务器”中勾选“忽略此接口”。
5. 在“DHCP 服务器”-“IPv6 设置”中禁用所有IPv6服务。
6. 点击“保存”以及“保存并应用”。
7. 在“网络”-“防火墙”中,关闭“SYN-flood 防御”,点击“保存并应用”。
8. 建议重启一次。
![](https://cdn.sspai.com/2021/08/31/5f7514021f5bb55b9d0ab5d86b5c453b.jpg?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
如果你是通过WiFi接入点访问的,现在可以插上网线,通过有线局域网来访问它了。记得**删除WiFi接入点**以降低路由器的温度。
至此,它已经是一个合格的旁路网关了。
接下来有两种使用方式,根据偏好选择。
### 方式一:指定的设备才使用旁路网关
在指定的设备上,手动设置IP地址,将其“网关”和“首选 DNS”改为旁路网关的IP地址。
![](https://cdn.sspai.com/2021/08/28/article/254c2b0ee0718a890ee2f856a04a596c?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
### 方式二:所有设备都使用旁路网关
**重要的事说三遍:在主路由上设置,在主路由上设置,在主路由上设置**
如果**主路由**是 Openwrt 固件,找到 br-lan 网络接口,在“DHCP 服务器”的“高级设置”中添加两个选项:
- 3,你的网关IP
- 6,你的网关IP
![](https://cdn.sspai.com/2021/08/28/article/68617e786d195625027550dafde2834a?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
注意,这是主路由的设置,不是旁路网关!
如果是其它固件的主路由,或者成品路由器,找到类似“DHCP 服务器”的设置,在其中指定**默认网关**和**默认DNS服务器**是你的网关IP就行。
**性能测试,旁路网关的性能到底重不重要?**
## **测试局域网传输性能**
通过ssh命令 `ssh root@你的路由器ip` 进入到路由器的命令行界面。
`opkg update && opkg install iperf3` 安装 iperf3 测试软件。
`iperf3 -s` 运行测试。
在局域网的另一台机器上,同样安装 [iperf3](https://sspai.com/link?target=https%3A%2F%2Fiperf.fr%2Fiperf-download.php) 软件。
```
iperf3 -c 你的路由器ip
iperf3 -c 你的路由器ip -R
```
运行测试。先是测试的路由器从测试机下载数据的性能,再测试的是反过来的性能。
这是我测试的自己的树莓派4B的性能:
```
$ iperf3 -c 192.168.1.3
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 1.10 GBytes 949 Mbits/sec sender
[ 4] 0.00-10.00 sec 1.10 GBytes 949 Mbits/sec receiver
$ iperf3 -c 192.168.1.3 -R
Reverse mode, remote host 192.168.1.3 is sending
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.10 GBytes 944 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 1.10 GBytes 944 Mbits/sec receiver
```
## **通过 netdata 软件监控性能状况**
在路由器中运行 `opkg update && opkg install netdata` 安装 netdata 监控软件。或者在“系统/软件包”菜单中安装。
然后在浏览器上访问 `http://路由器ip:19999` 就可以了
## **测试广域网转发性能、代理转发性能**
在 netdata 中点击右上角 Settings 关闭 On Focus。
同时启动一个测速软件,例如 Speedtest.net,跑一跑,看看性能如何?
我们来验证一下,上文所说的,各种流量情况下,主路由和旁路网关的负载情况?
(我家的宽带标称500M,上行标称100M)
### 1\. 广域网下行流量
主路由负责转发流量,旁路网关围观。
![](https://cdn.sspai.com/2021/08/28/article/05b34c1d0b4a58ea077ae6e020a1ffde?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:树莓派4B(下面的仪表盘)
旁路网关真的在围观吗?我想了个办法,在树莓派上跑iperf3,把它的出站流量占满,同时开始广域网下行。
![image.png](https://cdn.sspai.com/2021/08/29/article/4ce282ccc3bf669df7e9e16316262f56?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:树莓派4B
我们再来看看斐讯N1的表现。N1的网卡没有硬件流控功能,所以可能会引起问题,而软件流控损失性能。在运行flippy的固件安装脚本时,会问你选择是否用`*-thresh.dtb`开启软件流控,默认不采用。
我们来实测一下。N1有一个USB2.0接口,接上网卡,对网速进行物理封印!便于观察网关是否真的不影响下行流量。
![](https://cdn.sspai.com/2021/08/28/article/a4716e6f19036d629bbea3e3c6f3406f?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
斐讯N1+USB2.0网卡,物理封印网速
我在另一台电脑上不停地iperf3占满N1的网络带宽,同时在旁路网关的客户端电脑上测速。
![](https://cdn.sspai.com/2021/08/28/article/48662094fff67c3a0ee5e4ada9bb1c5b?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:斐讯N1+USB2.0网卡
神奇的事情发生了!网关并没有完全在围观,它的iperf3传输速度显然受到了影响。但客户端并没有受到影响,测速显然已经突破USB2.0的速率限制了。
结论:
- 广域网下行流量速率不受旁路网关性能的影响
- N1在关闭软件流控时,因为没有硬件流控功能,所以可能会被局域网中的其它流量干扰。会有一定影响自身性能,但不影响局域网其它设备的性能。作为旁路网关,在这一点上,树莓派完胜。
### 2\. 广域网上行流量
主路由和旁路网关同时在转发流量。
![](https://cdn.sspai.com/2021/08/28/article/e8dfaab604c9a6df667c3e5235963197?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:树莓派4B(下面的仪表盘)
### 3\. 代理转发流量
![](https://cdn.sspai.com/2021/08/28/article/15070bcd362a765487749f74c3989c83?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
我使用的是 Xray VLESS XTLS
只测试下行就好,上行肯定会经过旁路网关的。
![](https://cdn.sspai.com/2021/08/29/article/1f9994750fd5adfed8fe4169deacf1b4?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:树莓派4B(下面的仪表盘)
看这个测试结果,难道说,代理转发的下行流量并不需要经过旁路网关的转发吗?想想并不可能啊。
换fast.com再试试……可以发现,代理转发流量经过了N1。
![](https://cdn.sspai.com/2021/08/29/article/f3d2dc4f53a29e49742b23a2733f73fd?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
测试设备:N1
所以破案了!原来speedtest.net不知为何并没有经过代理,不要相信它!所以不要用它做代理速度测试了,可能是不准的。
至此,通过实践证实了以下结论:
优劣对比
主路由模式
旁路网关模式
局域网流量
不影响性能
不影响性能
广域网下行流量
受限于主路由NAT转发性能
受限于主路由NAT转发性能
广域网上行流量
受限于主路由NAT转发性能
同时受限于主路由和旁路网关NAT转发性能
代理上网转发流量
外加受限于主路由CPU性能
同时受限于主路由和旁路网关NAT转发性能,外加旁路网关CPU性能
最后,可以有理有据地得出如何选择旁路网关的结论:
1. 旁路网关的网卡带宽只要不低于你的上传带宽,就不会对普通流量造成瓶颈。考虑到国内的上行带宽通常非常小,所以基本不会造成影响
2. 旁路网关作为代理上网的转发网关,性能下限是由其CPU性能和网卡带宽中最低的部分决定的
所以旁路网关的性能,并不那么重要。忽悠你买高性能旁路网关的,肯定是奸商。
但旁路网关无法负责NAT部分的功能,如果你需要多WAN、IPTV等功能,还是需要一个功能灵活的主路由。但如果你仅仅只是为了转发代理上网流量,实现透明代理,那么旁路网关是个非常经济、简单的选择。
好了,以上就是我这些年来玩 Openwrt 作为家庭网络的路由系统的终极经验了。
工作桌面纪念照:
![](https://cdn.sspai.com/2021/08/28/article/399c1defcfd9ccabcd070d8e1f080be2?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
[原文](https://sspai.com/link?target=https%3A%2F%2Fblog.lishun.me%2Fopenwrt-mega-post)发布在我的博客上。