Skip to content

在 DSM 上安装 OpenWrt 虚拟机搭建透明代理旁路由

起因

  • 想在家里电视上看动画疯,但是电视不支持设置代理(暂且把国产智能电视能不能装动画疯丢在脑后)
  • 以前跟着教程在群晖上折腾过 Koolshare OpenWrt/LEDE+KoolClash (赞美 SukkaW) 旁路由,想再折腾一次
  • 有个透明代理很方便

更新:找了旧版本动画疯的APK装到电视上,打开弹窗说设备没有 Google Play 服务无法运行,点击确认之后完全正常使用 😃

软件版本号

本文撰写时最新稳定版 OpenWrt 24.10 使用的是 opkg 包管理器,未来新的版本会迁移到 apk 包管理器,请留意。

在 DSM 中安装 OpenWrt 虚拟机

网上这个的教程太多了,本节改自知乎文章

安装 Synology Virtual Machine Manager (VMM)

查看适用机种:Virtual Machine Manager - 加值套件 | 群晖科技 Synology Inc.

在 DSM 里安装好 Virtual Machine Manager 虚拟机套件后,打开套件跟随开箱体验创建一个存储空间

下载 OpenWrt 磁盘映像

到 OpenWrt 官网下载 x86/64/generic-squashfs-combined.img.gz 压缩包。

https://downloads.openwrt.org/releases/24.10.3/targets/x86/64/

openwrt 24.10.3 x86/64 target 的下载网站页面,显示有多个不同的文件。红框圈中其其中的 generic-squashfs-combined.img.gz

参考资料:

[OpenWrt Wiki] OpenWrt on x86 hardware (PC / VM / server)

目标:

  • 64 位适用于现代 PC 硬件(2007 年左右及以后的任何硬件),它专为 64 位计算机构建,并支持现代 CPU 功能。除非您有充分的理由不选择此选项,否则请选择此选项。

磁盘映像文件:

  • squashfs-combined-efi.img.gz 此磁盘映像采用传统的 OpenWrt 布局,包含一个 squashfs 只读根文件系统和一个用于存储您安装的设置和软件包的读写分区。由于此映像的组装方式,您将只有不到 100MB 的空间来存储额外的软件包和配置,并且 extroot 无法使用。它支持从 EFI 启动。
  • squashfs-combined.img.gz 此磁盘映像与上面的相同,但它旨在通过 PC BIOS 而不是 EFI 启动。

[OpenWrt Wiki] Table of Hardware: Firmware downloads
[OpenWrt Wiki] I can not connect via webbrowser

开发版(snapshots)不包含 LuCI,如果不手动安装 LuCI,您将无法通过浏览器访问设备。

在 VMM 导入映像

在 VMM 里打开映像 > 硬盘映像 > 新增,上传上一步下载解压出的 img 镜像:

打开 VMM 的 映像 标签页,然后打开 硬盘映像 标签页,点击新增,上传文件后多了一行刚才导入的硬盘映像

创建虚拟机

等待镜像上传完成,镜像状态显示为良好之后,点击 虚拟机 > 创建下拉菜单中的 导入

打开 VMM 的 虚拟机 标签页,然后点击 创建 下拉菜单中的导入

我的虚拟机配置:

CPU:2核

内存容量:2GB

网络 > 高级选项 > 型号:e1000

配置 OpenWrt

主路由地址 192.168.1.1 ,电脑地址 192.168.1.10,OpenWrt 将配置在 192.168.1.128

设置 root 密码

执行 passwd,输入两次密码。这将是你用于登录 LuCI 和 ssh 的密码。

配置 OpenWrt 地址

参见: [OpenWrt Wiki] Network configuration /etc/config/network

修改 /etc/config/networkoption ipaddr 192.168.1.1 行的 IP 地址修改为192.168.1.128,执行service network reload 后生效

配置网络接口

使用网页浏览器访问 http://192.168.1.128 进入 LuCI

Network > Interfaces > (lan) Edit

  • General Settings 修改 IPv4 Gateway 为主路由地址 192.168.1.1
  • Advanced Settings > Use custom DNS servers 添加 192.168.1.1dnsmasq 将拾起这个 DNS 作为上游。
  • DHCP Server > General Setup 开启 Ignore interface (Disable DHCP for this interface.)
  • 点击 Save 保存关闭弹窗后,点击 Save & Apply

配置镜像站软件仓库

OpenWRT 软件仓库镜像使用帮助 - MirrorZ Help

bash
sed -i 's_https\\?://downloads.openwrt.org_https://mirror.nju.edu.cn/openwrt_' /etc/opkg/distfeeds.conf

临时配置 HTTPS 代理(可选)

首先安装 wget-ssl, 否则在启用代理时在HTTPS 页面重定向时会导致 400 Bad Request

bash
opkg install wget-ssl

临时在会话中通过环境变量设置代理(我的 HTTP 代理服务器位于 192.168.1.10):

bash
export HTTPS_PROXY=http://192.168.1.10:7890

设置环境变量也可以在当前会话中应用到 opkg 上

安装 OpenWrt-Nikki

https://github.com/nikkinikki-org/OpenWrt-nikk

bash
wget -O - https://github.com/nikkinikki-org/OpenWrt-nikki/raw/refs/heads/main/feed.sh | ash
opkg install nikki
opkg install luci-app-nikki
opkg install luci-i18n-nikki-zh-cn

安装成功后,等待几分钟, 导航栏将出现 Service > Nikki

配置 Nikki 透明代理

(可选)勾选 混入配置 > 混入文件内容 > 启用;然后进入 编辑器,编辑 “用于混入的文件”,前加以下内容来覆盖默认geo文件URL地址。

yaml
geoip: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat
geosite: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat
mmdb: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb
  • 配置文件 上传配置文件或配置并拉取订阅,
  • 打开 插件配置选择配置文件,勾选启用
  • 点击 Save & Apply

如果不出意外,透明代理就就绪了。你可以在 日志 > 核心配置 检查是否发生错误。

Nikki 基本上开箱即用,并且默认配置了 Fake IP。

配置设备

在设备上配置静态地址,如:

原本主路由 DHCP 获取到地址 192.168.1.123,网关 192.168.1.1,DNS 192.168.1.1

现在将网关设置为 OpenWrt 旁路由的地址 192.168.1.128 即可(DNS 无关紧要)。

附:在 Hyper-V 上折腾 OpenWrt

将 img 转换为 VHDX

Hyper-V 使用 UEFI ,故选择 squashfs-combined-efi

qemu-img.exe convert -f raw -O vhdx openwrt-24.10.3-x86-64-generic-squashfs-combined-efi.img openwrt-24.10.3-x86-64-generic-squashfs-combined-efi.vhdx

但是这个 vhdx 无法挂载,报错:

无法装载文件
确保该文件位于NTFS卷中并且不在压缩的文件夹或卷中。
Couldn't Mount File
Make sure the file is in an NTFS volume and isn't in a compressed folder or volume.

把这个 vhdx 添加到虚拟机中开机会得到如下错误

由于虚拟磁盘系统限制,无法完成请求的操作。虚拟硬盘文件必须是未压缩和未加密的文件,并且不能是稀疏文件。
The requested operation could not be completed due to a virtual disk system limitation. Virtual hard disk files must be uncompressed and unencrypted and must not be sparse.

运行以下命令将虚拟磁盘文件去稀疏化

bash
fsutil sparse setflag openwrt-24.10.3-x86-64-generic-squashfs-combined-efi.vhdx 0

相关链接:

QEMU disk image utility — QEMU documentation
QEMU block drivers reference — QEMU documentation

虚拟机配置

  • 关闭安全启动
  • 设置 > 固件 > 启动顺序 中将 硬盘驱动器 向上移动到顶部

虚拟交换机配置

  • 在控制面板内把 “内部” vEthernet 桥接到你的物理网卡上,这和 VMWare Workstation 的桥接网络或 Synology VMM 的“外部”网络类似。
  • 或者如果你想要创建一个新的 NAT 供虚拟机使用,类似于 Windows 零售版中 Hyper-V 自动创建的 Default Switch,参见:设置 NAT 网络 #创建 NAT 虚拟网络 | Microsoft Learn
powershell
New-VMSwitch -SwitchName "OpenWrt-Network" -SwitchType Internal
Get-NetAdapter
# Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
# ----                      --------------------                    ------- ------       ----------             ---------
# vEthernet (OpenWrt-Netwo… Hyper-V Virtual Ethernet Adapter #2          62 Up           00-15-5D-89-01-08        10 Gbps
New-NetIPAddress -IPAddress "10.0.1.1" -PrefixLength 16 -InterfaceIndex 62
New-NetNat -Name "OpenWrtNAT" -InternalIPInterfaceAddressPrefix "10.0.1.1/16"

Set-NetConnectionProfile -InterfaceIndex 62 -NetworkCategory Private