OpenWrt 配置不完全指北
Fanx / 2023-07-21 / Linux / 阅读量 5450

0x00 前言

基于 PVE + ImmortalWrt 23.05 编写,其他版本可能会有一些差异。
功能:路由器作为网关,通过 OpenClash 代理,同时支持 IPv4 和 IPv6,通过 MosDNS 实现 DNS 分流
关于为什么要使用 MosDNS,可以参考我的另一篇文章: 软路由与 DNS 折腾笔记。当然如果你嫌麻烦也可以不用 MosDNS,直接使用 OpenClash 的 DNS 功能。

本配置之所以称为 “指北”,是因为大多数人第一次接触 OpenWrt 时,看见 LuCI Web 界面里的各种配置选项会 “找不着北”,因此这篇文章命名为 《OpenWrt 配置指北》

0x01 PVE

网卡直通

编辑文件: /etc/default/grub
找到以下行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

修改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream"
参考: https://github.com/ivanhao/pvetools/issues/34

更新 grub

update-grub

重启

reboot

安装 OpenWrt

PVE 界面选择 创建虚拟机

常规

只选择一个开机自启动就好
'安装-1'

操作系统

选择 不使用任何介质,因为我们要导入 OpenWrt 直接作为磁盘
右边操作系统选择 Linux 6.x - 2.6 Kernel
'安装-2'

系统

机型选择可选q35i440fx,q35 更新一点,我更建议使用 q35
如果你使用的固件文件名中带有 combined-efi,那么:
BIOS 选择 OVFM (UEFI),下面 添加 UEFI 磁盘 取消勾选,因为 UEFI 分区已经在 OpenWrt 的磁盘中了, 但是在虚拟机启动时会有一条警告: WARN: no efidisk configured! Using temporary efivars disk.,因为我们没有添加一块 UEFI 磁盘到虚拟机中,这是正常的,不影响使用。
如果固件中带有 qemu-ga,那么勾选 Qemu 代理 (此软件包类似于 VMware Tools,可以实现虚拟机与宿主机的交互,例如关机、重启、获取 IP 等)
'安装-3'

磁盘

删除默认的磁盘,直接点击下一步,待会创建虚拟机后再导入 OpenWrt 磁盘

CPU

通俗的来讲,插槽就是 CPU 的数量,核心就是每个 CPU 的核心数,这里根据自己的需求选择,类别选择 host,这样可以让虚拟机直接使用宿主机的 CPU,并且支持 CPU 的所有特性。
如果你使用的 CPU 性能比较差,可以增加这台虚拟机的 CPU 权重,这样当宿主机 CPU 负载比较高时,这台虚拟机会优先分配 CPU 资源。
'安装-4'

内存

根据自己的需求选择

网络

默认的虚拟网卡留着就行,不要删除,后面用于访问 PVE 管理界面
创建完成后不要启动虚拟机,我们还要导入 OpenWrt 磁盘

导入 OpenWrt 磁盘

注意:我这里使用的是 qcow2 格式的磁盘,如果你使用的是 vmdkimg 格式的磁盘,请自行在网络上搜索如何导入,这里不再赘述。
使用 qm importdisk 命令导入磁盘:

qm importdisk 100 /path/to/immortalwrt-x86-64-generic-squashfs-combined-efi.qcow2 local --format qcow2

100 是虚拟机的 ID,/path/to/immortalwrt-x86-64-generic-squashfs-combined-efi.qcow2 是 OpenWrt 的磁盘路径,local 是 PVE 的存储空间,默认是 local-lvm,如果你使用的是其他存储空间,请自行替换。(我合并了 locallocal-lvm,所以我这里使用的是 local,如果你也想整合自己的磁盘空间,也可以研究一下,这里不过多赘述)
导入完成以后,在虚拟机的 硬件 选项卡中,可以发现多了一块 未使用的磁盘,我们选中它,点击 编辑,然后在 总线/设备 中选择 SATA,如果你使用的是 SSD 则可以进一步勾选 SSD 仿真,这样可以提高性能。
导入完成后可以删除刚刚上传的磁盘文件,因为已经导入到 PVE 的存储空间中了。
'安装-5'

添加硬件直通的网卡

在虚拟机的 硬件 选项卡中,点击 添加,选择 PCI 设备,然后选择你要直通的网卡。

不要勾选所有功能

现在虚拟机有两种网卡,一种是显示为 网络设备 (net0) 的虚拟网卡,用于访问 PVE 管理界面,另一种是显示为 PCI 设备 (net1) 的直通网卡,用于 OpenWrt 直通硬件网卡作为 WAN 和 LAN 使用。
OpenWrt 中的网络结构如下:

  • eth0: 虚拟网卡,用于访问 PVE 管理界面
  • eth1: 直通网卡,用于 WAN
  • eth2 - ethx: 直通网卡,用于 LAN
OpenWrt 中的网卡配置会在此文中的下半部分提及

设置开机引导

在虚拟机的 选项 选项卡中,选中 引导顺序 并编辑,启用刚刚导入的 OpenWrt 磁盘,如果有其它磁盘或设备被勾选可以取消勾选
这样就完成了 OpenWrt 的安装,现在可以启动虚拟机了

0x02 OpenWrt

网络配置

默认有一个 WAN6 网卡,将其删除,以免干扰后面的配置
全局网络选项 中,将 IPv6 ULA 前缀 删除。

WAN

协议选择 PPPoE,填写你的宽带账号和密码即可,高级设置 中的 获取 IPv6 地址 选择自动,勾选 使用默认网关委托 IPv6 前缀; IPV6 分配长度 选择 已禁用

LAN

首先在 设备 中,配置设备 br-lan,网桥端口选择希望作为 LAN 口的网口,上面提到的用于 LAN 的直通网卡和 eth0 虚拟网卡在这里可以全部勾选
高级设置 中,勾选 委托 IPv6 前缀IPV6 分配长度 选择 64
DHCP 服务器 -> IPv6设置 中,RA 服务 选择 服务器模式,禁用 DHCPv6 服务NDP 代理IPV6 RA 设置 中勾选 启用 SLAAC,取消勾选 RA标记 中的所有选项

注意: RA 服务DHCPv6 服务 以及 NDP 代理 这三个选项在更新 OpenWrt 后可能会自动启用,所以每次更新后都务必检查一下。

详细设置如图:
'网络配置'

另外如果想访问光猫,可以添加一个新接口,名称随意,协议选择 DHCP 客户端 或自行配置静态 IP,设备选择连接光猫的网口,然后在编辑接口 -> 高级配置 中,取消勾选 使用默认网关,配置 使用网关跃点99,在 防火墙设置 选项卡中,创建/分配防火墙区域 选择 WAN,这样就可以访问光猫了。

DNS

网络 -> DHCP/DNS 设置中,取消勾选 重绑定保护,这样解析到内网的域名可以被正常解析
例如 www.example.com 解析到 192.168.1.254,我们在内网可以通过域名正常访问
另外在 高级设置 中,取消勾选 禁止解析 IPv6 DNS 记录,这样可以正常解析 AAAA 记录

MosDNS

参考: 软路由与 DNS 折腾笔记
这里不勾选 DNS 转发,因为我们要使用 OpenClash 劫持 53 端口,MosDNS 只是作为 OpenClash 的上游 DNS
广告规则、GeoIP & GeoSite 的数据库更新时间选一个自己喜欢的时间自动更新就好
DNS 广告过滤自动保存缓存 根据个人需求选择
'MosDNS-1'
'MosDNS-2'

如果后续想自己写 Hosts 规则,更建议在 MosDNS 中配置,一是为了方便管理,二是为了减轻 Clash 内核的负担

OpenClash

这里的配置比较多且复杂,有几个常见的 Q&A:

Q: 节点不支持 UDP 代理,勾选 UDP 流量转发 有什么用?
A: 启用 UDP 流量转发 只是为了让 OpenClash 支持 UDP,如果节点不支持 UDP 代理,那么 UDP 流量会自动被节点 Block,不会影响使用,但是有一些海外的游戏可能会无法连接,你可能需要使用支持 UDP 代理的节点,但游戏加速我更推荐使用加速器。

Q: 为什么要勾选 绕过中国大陆 IP?
A: 如果不勾选,国内的流量也会走 Clash 内核进行直连,虽然不会影响使用,但是会降低一点性能,缺点就是关于国内网站的分流会不起作用,比如分流 bilibili 番剧到 HK,在进入 Clash 内核前就被判断为中国大陆 IP,所以不会走代理,关于这种特殊情况你可以考虑不使用此选项。

Q: 节点不支持 IPv6,勾选 IPv6流量代理 有什么用?
A: 如果你的网络环境支持 IPv6,那么可以勾选 IPv6流量代理,这样 OpenClash 会将 IPv6 流量代理到节点,如果节点不支持 IPv6,那么会自动切换为 IPv4 代理,不会影响使用,并且由于勾选了 绕过中国大陆 IPv6,所以国内 IPv6 流量不会受到影响。如果你的网络环境支持 IPv6,并且你没有勾选 IPv6流量代理,那部分海外网站会直接通过 IPv6 访问,可能会影响到你的网络冲浪;如果你对访问中国大陆的 IPv6 网站没有需求,你可以考虑禁止 IPv6 的解析,同时不勾选 IPv6流量代理,这样既不会影响到 BT 连接 IPv6 下载,也不会影响你 IPv4 的网络冲浪。

Q: 为什么我使用 https://test-ipv6.com 检测我不支持 IPv6?
A: 和上面的问题一样,由于 test-ipv6.com 是海外网站,你的节点如果不支持 IPv6,那么会自动切换为 IPv4 代理,所以 test-ipv6.com 检测不到你的 IPv6 地址,你可以使用以下位于中国大陆的 IPv6 测试网站:

Q: 为什么我的 Instagram/YouTube 客户端 无法加载 / 访问很慢?
A: 确保勾选了 禁用 QUIC,如果 Instagram 还是无法加载,说明 Instagram 已经将 QUIC 的相关域名或连接资源缓存到了本地,可以尝试卸载重装 (Meta 系的 APP 基本都有这个问题,尽量避免在裸连环境下打开 Instagram)

插件设置 - 模式设置

运行模式中,Redir-Host 的兼容模式和混合模式根据自己的网络环境选择
如果你选择的是兼容模式,勾选 UDP 流量转发

插件设置 - 流量控制

勾选 禁用 QUIC绕过中国大陆 IP仅允许常用端口 选择 默认常用端口
如果你想使用 OpenClash 代理内网中客户端的 WARP 客户端流量,使其作为 WARP 的前置代理,有两种方法:

  • 禁用 绕过中国大陆 IP仅允许常用端口
  • 如果你不想影响内网中其它设备的上网,可以在 仅允许常用端口流量 中填写以下端口:
21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889 500 854 859 864 878 880 890 891 894 903 908 928 934 939 942 943 945 946 955 968 987 988 1002 1010 1014 1018 1070 1074 1180 1387 1701 1843 2371 2408 2506 3138 3476 3581 3854 4177 4198 4233 4500 5279 5956 7103 7152 7156 7281 7559 8319 8742 8854 8886

这里整合了 WARP 所需要的端口和 OpenClash 的默认常用端口

注意: 请确保使用支持 UDP 的节点作为 WARP 的前置代理,否则会导致 WARP 无法正常连接。

插件设置 - DNS 设置

本地 DNS 劫持 选择 使用 Dnsmasq 转发
勾选 禁止 Dnsmasq 缓存 DNS

插件设置 - IPv6 设置

勾选 IPv6流量代理UDP 流量转发允许 IPv6 类型 DNS 解析绕过中国大陆 IPv6
IPv6代理模式 选择 TProxy 模式

GEO 数据库订阅大陆白名单订阅 选择一个自己喜欢的时间自动更新

覆写设置 - DNS 设置

勾选 自定义上游 DNS 服务器
取消勾选 追加上游 DNS追加默认 DNS
在下方配置 DNS 服务器 (NameServer、FallBack、Default-NameServer) 中,删除或禁用所有默认的 DNS 服务器,将三个分组都指定唯一的 DNS 服务器:
服务器地址: 127.0.0.1
服务器端口: 5335
服务器类型: UDP

这样,MosDNS 就会接管所有的 DNS 请求,也就做到了 DNS 分流解析的目的。

至此,OpenClash 已经配置完成,在配置订阅里添加自己的订阅链接并更新订阅就能正常使用了。

注意: OpenClash 在更新系统后不会自动启动,需要手动启动一次。

UPnP

由于 OpenWrt 现已使用 nftables 作为默认防火墙,如果你没有公网 IPv4 地址,启用 UPnP 有一定的可能性会无法自动配置端口映射,可以在 UPnP 的高级设置选项卡中,启用 使用 STUN 碰碰运气,如果还是无法自动配置端口映射,那么只能在防火墙中手动设置端口映射了。
常用的国内 STUN 服务器:

  • stun.qq.com
  • stun.miwifi.com
端口均为 3478

关于 BBR

开启 BBR 可能会导致长连接挂掉,可能会让你的网络体验变差,所以不推荐开启或是在编译中启用,家用路由不像 VPS,不需要考虑 TCP 的拥塞控制。

9 + 5 =
快来做第一个评论的人吧~