搭建一个可分流的个人VPN网关:WireGuard、sing-box与Gluetun的组合实践

在之前的文章中,我介绍过一种比较直接 的链式 VPN 方案:所有设备先连接到自己搭建的WireGuard 服务器,再由服务器把流量转 发到 Gluetun,最终通过上游 VPN 服务商的出口访问互联网。 这个方案的核心价值很明确: 所有设备只需要配置一个 WireGuard; 上游 VPN 只需要在服务器端维护; 可以把手机、电脑、平板、家用设备统一接入同一个虚拟局域网; 出口 IP 由商业 VPN、公司 VPN 或其他上游 VPN 提供,而不是直接暴露 VPS IP; 整套系统可以通过 Docker 部署,尽量不污染宿主机环境。 相比于直连VPN,该方案下VPN服务商能看到的只是你的VPN网关出口(你的VPS服务 器),而不是每个设备的真实 IP。 另外,本地的ISP等也看不到你是否是在使用主流VPN,因为他们只能知道你在连接到一个 VPN网关(你的VPS服务器),但流量最终去了哪里是未知的。 不过,随着使用场景变多,原来的结构也逐渐暴露出一些局限。最典型的问题是,对流量的 控制不够细粒度。默认情况下所有流量都必须进入上游 VPN 隧道,这对于某些服务可能会 触发风控,或者导致访问问题。而且比较难方便地进行流量工程,对不同服务采用不同的出 口策略。原先通过 iptables 和路由表的方式虽然能实现分流,但规则一多就难维护。 因此,我把原来的方案重新整理成了一个更完整的个人 VPN 网关架构。新版方案不再只是 简单的 WG-Easy + Gluetun,而是变成了: WG-Easy + sing-box + Gluetun + AdGuard Home + config.yaml 统一配置生成 对我来说,这套方案已经不只是“VPN 套 VPN”,而是一个可以长期维护、可扩展、可观察的 个人网络出口。它既可以服务日常上网,也可以服务远程办公、家庭内网访问、开发测试和 多设备统一管理。如果你只需要最简单的全局 VPN 转发,旧版思路仍然够用。但如果你希 望在隐私、可控性、分流规则和 DNS 管理之间取得更好的平衡,新版架构会更合适。 ...

2026年5月23日

搭建个人链式VPN网络:高效隐私保护、设备无限制管理与远程访问

在某些场景中,我们可能需要搭建一个链式 VPN 结构,即先让内网设备连接到自建的 WireGuard 服务器(如个人 VPS),再通过该服务器将所有流量转发到另一个 VPN(公司、 学校或商业 VPN 服务)后才进入互联网。搭建这种「VPN 套 VPN」的网络架构,有以下明 显优势: 强大的隐私保护:内网设备的数据流量首先通过自己搭建的 WireGuard 加密隧道传输至 个人 VPS,再由 VPS 二次通过商业或公司 VPN 进行转发,最终从该 VPN 的 IP 出口访 问互联网。这种方式彻底避免了使用 VPS 自身 IP 地址直接访问目标网络,大大降低了 个人 IP 被跟踪或泄露的风险。 集中化便捷管理:所有客户端设备统一连接到单个 WireGuard 服务,免去逐一配置每台 设备的麻烦。更重要的是,它还能巧妙绕过一些商业 VPN 服务商设定的账号设备数量限 制,一次付费,所有设备共享。 灵活便捷,轻松切换:由于商业或公司 VPN 配置仅在自建 WireGuard 服务器端修改一次 即可生效,下游客户端(手机、电脑等)无需单独调整。这使得更换或重新配置上游 VPN 时更加迅速和便捷,大大提高日常维护的效率。 打造专属虚拟局域网,实现跨设备互通:一旦所有设备连接到自建的 WireGuard VPN 服 务器后,将自动获得统一的 VPN 虚拟局域网 IP 地址(例如:10.8.0.0/16)。处于该网 络中的设备能够直接互相通信,无需额外设置。 这种便捷性意味着无论你身处何处,都能轻松实现: 远程 SSH 登录:随时访问家中或办公室的服务器。 私有 NAS 媒体访问:在外轻松访问家中 NAS 存储的媒体文件。 远程办公:随时随地安全访问公司内部网络资源。 方案 经过本人的探索和实践,我逐步摸索出了自己的一套链式 VPN 方案。总体来看,我的方案 完全基于 Docker 部署,所用到的核心组件有: ...

2025年6月2日

自建图床服务并配置免费CDN全球加速 过程记录

个人有一些图片托管的需求,在很多场景下比如说在博客文章中插入图片,在社交网站上分 享图片,抑或是个人开源项目中的图片等等,都需要在文档(特别是 MarkDown)中嵌入一 个 URL 直链来指向图片。对于一些免费的图床服务商,个人感觉并不是很信任。数据安全 是一方面,另一方面如果服务商跑路了,那么很多原先我创建的链接都会失效。据我所知, 这样的例子比比皆是。 网上还有一些教程将 GitHub 当成免费图床来用。这样做弊端也很明显,GitHub 在国内的 访问速度非常慢,图片加载很慢。另外,缺少很多图床该有的功能,比如说自动压缩,自动 转换成 Webp,自动重命名等等。这样做也是不太可行的。下面就是一个我将 GitHub 用作 图床的例子。每次我还需要将图片移动到代码仓库里,然后 commit,push,我个人感觉很 麻烦。 还有一段时间我试过把 WordPress 的 Midea 库当作图床来使用,但是我发现图片链接中带 有 wp-content/upload 这样的路径。然后链接中还会出现图片的名称。我感觉并不是很雅 观,而且在隐私的保护中有一种说不好的感觉。就像是别人一看这个 URL 链接,就能获知 一些图片以外的信息。下面就是用 WordPress 的 Media 库当图床例子。可以看到,产生的 直链不是很美观,而且还能暴露一些信息。 所以,我这边产生了自建图床服务的想法。这种图床最好能自动转换 jpg、png 格式的图片 为 webp。这样图片就能比较高质量、快速地在用户浏览器中加载出来。有关 WebP 的简要 介绍如下: WebP is a raster graphics file format developed by Google intended as a replacement for JPEG, PNG, and GIF file formats. It supports both lossy and lossless compression,[8] as well as animation and alpha transparency. ...

2023年11月18日

搭建一个免费开源好用的Docker面板 Portainer

Portainer 是一个好用的 Docker 容器控制面板。它的代码仓库在这 里。它支持单节点和集群部署。 在此之前,我已经将个人服务器完全容器化了。如果能够可视化操作、监控各种容器,对于 日常的运维帮助很大,感觉一切尽在掌握。 可以看看搭建好后的效果,界面还是很美观 的。 可以快速拉取镜像 可以可视化发布容器,并灵活设置环境变量、网络、重启策略等等参数。 可以在镜像更新的时候,快速用新镜像更新容器。 还可以快速进入接入容器命令行,查看容器日志。 可以说,我日常需要的功能都有,感觉很完善了。 搭建 那么对于单点服务器来说,该如何搭建呢,首先你要确认你的服务器目前有安装 Docker。 可以输入docker -v来看看当前环境中是否存在 docker。 如果不存在,需要安装 docker,你可以在 Google 找找教程。对于 AWS 的 EC2,可以输入sudo yum install docker -y来安装。 确认安装好 Docker 后。确认一下 Docker 是否启动。然后看看 /var/run 路径下是否有 docker.sock 文件。 然后,确认 8000 端口和 9443 端口都没有 被占用,因为 Portainer 后续要用到这两个端口。 将应用数据存储在 Docker Volume 如果你想将 Portainer 产生的应用数据存在 Docker Volume 中,你可以直接执行下面的命 令。后续部署完成后,Portainer 所使用的 Docker Volume 也可以在 Portainer 看到并管 理。如果 8000 端口被占用了,可以将-p 8000:8000改成其他端口,类似-p 12345:8000。9443 端口也是类似。 如果你想指定容器名为其他,可以修改–name 参数, 比如说--name myportainer。 ...

2022年11月23日

Ubuntu双系统重装Windows后修复grub2引导 UEFI

如果你在安装了 Ubuntu 和 Windows 双系统后,又重装了 Windows 系统。那么 Grub 引导 项大概率会被 Windows Boot Manager 覆盖,这时候你就进不了 Ubuntu 了。但不要慌,按 照下面的步骤可以修复 grub2 引导,而且不需要安装额外的软件。 制作 Ubuntu 的 U 盘启动盘 为了修复引导项,我们需要用到 Ubuntu 系统提供的软件工具。虽然我们暂时进不去原来的 Ubuntu 系统,但是我们可以使用写在 Ubuntu U 盘中的镜像来获得一个可用的基本 Ubuntu 环境。 在Ubuntu 官网下载镜像文件。 制作 U 盘启动盘可以使用免安装、小巧好用的rufus。你可以使 用 rufus 快速创建一个 U 盘启动盘,注意选择 GPT 模式。 引导 U 盘启动盘 重启电脑,在 BIOS 引导设置中引导 U 盘,然后进入 Ubuntu 引导安装程序后,在安装界 面选择 Try Ubuntu 进入 Ubuntu Live。 执行 Grub2 重建操作 使用 fdisk,找到 EFI 分区,/boot 挂载点所在的分区(如果你没有设置/boot 挂载点则 为/挂载点)。 挂载/boot 挂载点所在的分区到/mnt 下(我的分区在 nvme 固态硬盘 上)。 ...

2021年11月26日

解决yarn安装electron、chromedriver等软件包超时、缓慢的问题

在国内使用 yarn 安装 electron、chromedriver 是经常出现无法连接的问题,这个时候, 相对于设置代理,我们可能更希望使用在国内的镜像仓库来加速这个过程。并且安装 electron 的时候,单单设置 yarn 的全局代理是没有用的。那如何根据不同的软件包设置 代理呢?你可以按照以下列表中提供的命令样例来设置。 yarn 全局设置 设置 yarn 安装一般的软件包时使用的仓库地址。 yarn config set registry https://r.npm.taobao.org 注册模块镜像 yarn config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像 这是运行以上命令的结果,你可以很清楚地看到设置是否成功。 yarn 安装特定软件包设置 设置 yarn 安装 electron 、chromedriver 等软件包安装使用到的仓库地址。你可以按照 需要选择一两个命令来设置,一股脑全部加上是被必要的。 yarn config set sass\_binary\_site https://npm.taobao.org/mirrors/node-sass # node-sass 二进制包镜像 yarn config set electron\_mirror https://npm.taobao.org/mirrors/electron/ # electron 二进制包镜像 yarn config set puppeteer\_download\_host https://npm.taobao.org/mirrors # puppeteer 二进制包镜像 yarn config set chromedriver\_cdnurl https://npm.taobao.org/mirrors/chromedriver # chromedriver 二进制包镜像 yarn config set operadriver\_cdnurl https://npm.taobao.org/mirrors/operadriver # operadriver 二进制包镜像 yarn config set phantomjs\_cdnurl https://npm.taobao.org/mirrors/phantomjs # phantomjs 二进制包镜像 yarn config set selenium\_cdnurl https://npm.taobao.org/mirrors/selenium # selenium 二进制包镜像 yarn config set node\_inspector\_cdnurl https://npm.taobao.org/mirrors/node-inspector # node-inspector 二进制包镜像 和上面的类似,运行命令后你可以很清楚地看到设置是否成功。 ...

2021年11月22日

oh my zsh 在Ubuntu下的配置教程

oh my zsh 是十分好用的基于 zsh 的配置框架,它能简化 Linux 终端用户的很多日常操 作。而且,它的界面相对于原始的 bash 来说,非常好看。这篇文章就是用来介绍如何在 Ubuntu 下安装并配置 oh my zsh 及其常用插件的。 oh my zsh 安装与基本配置 在 oh my zsh 安装前需要先执行以下命令安装下列 git、curl、zsh。 % sudo apt install git curl zsh 安装完依赖项目后,直接执行下面的命令来一键安装: % sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 设置 zsh 为默认 shell: % chsh 按照提示一步一来,输入/bin/zsh 即可。 常用插件安装 单单配置 oh my zsh 本身是远远不够的,你可能需要以下常用插件来真正达到简化操作的 目的。 z 历史目录管理 zsh-autosuggestions 命令提示 zsh-syntax-highlighting 高亮 sudo 忘记加 sudo 前缀之时 extract 一个命令解压几乎所有安装包 z 无需额外安装,直接在 plugins 中填写即可。 zsh-autosuggestions 先执行以下命令,然后在 plugins 中填写。 ...

2021年11月22日

使用 space-vim-dark 一键配置、美化vim编辑器

一直以来我都使用一些成熟的配置文件来帮助我配置、美化 vim 编辑器,然而我原来使用 的 spf13-vim.sh 已经很久不更新了,它的插件列表中有些插件已经不能正常下载了。所以 我想寻找它的替代品,最后发现 space-vim-dark 还不错。 space-vim-dark 基本介绍 经过我的寻找,找到了一个比较好用且美观的配置文件 space-vim-dark。这个 space-vim-dark 可能是国人编写的 vim 配置文件,它能很好使得 vim 适应暗色模式。 先 贴出仓库地址:https://github.com/liuchengxu/space-vim-dark 这是它的效果图,整体 看还是不错的。 用它配置、美化 vim 编辑器 设置 space-vim-dark 非常简单,你只需要在你的 vim 插件管理器中添加下面的设置。 Plug 'liuchengxu/space-vim-dark' 整体使用下来,我觉得该有的插件还是有的,并且用起来顺手不少。 加入额外配置 在~/.spacevim 中可以加入你自己的一些配置。

2021年11月22日

为MacOS的终端加上代理设置

MacOS 现在默认采用 Zsh,所以在用户家目录下寻找.zshrc 配置文件,如果没有则自行创 建。 编辑.zshrc 文件,在最后加入下列代码 \# set proxy alias proxy='export all\_proxy=socks5://127.0.0.1:1234' alias unproxy='unset all\_proxy' 添加完毕后,保存,在终端输入以下命令 % source ~/.zshrc 完毕。 如果需要使用代理,则预先输入 proxy 命令。如果需要取消代理,则输入 unproxy 命令。 或者如果需要默认启用代理的话,在.zshrc 配置文件末尾添加 % export https\_proxy=http://127.0.0.1:7890 http\_proxy=http://127.0.0.1:7890 all\_proxy=socks5://127.0.0.1:7890 保存。 % source ~/.zshrc 完毕。

2021年5月25日

HyperV Ubuntu虚拟机开启增强会话 调整分辨率 启用剪切板

在 HyperV 下 Windows 系虚拟机默认就能够开启增强会话。在增强会话下可以方便地和宿 主机共享剪切板与文件,并且在增强会话开启时也能够比较方便地调整分辨率。而 Ubuntu 等 Linux 系统下则默认为基本会话,分辨率的调整需要修改引导文件,而剪切板和宿主机 是独立的非常不方便。 进过查找,找到了一种可以在 Ubuntu 20.04 下开启增强会话的方 法,使用后有效,遂在此记录。 首先需要开启增强会话的话必须先在创建虚拟机的时候开 启第二代虚拟机选项,在首次启动的时候关闭 Secure Boot。记得在安装 Ubuntu 的时候不 要开启自动登录选项。 在终端下输入 % wget https://raw.githubusercontent.com/Hinara/linux-vm-tools/ubuntu20-04/ubuntu/20.04/install.sh % sudo chmod +x install.sh % sudo ./install.sh 在 Windows Power Shell 运行以下命令,然后重启。 \> Set-VM -VMName <your\_vm\_name> -EnhancedSessionTransportType HvSocket 重启后,就能看到链接虚拟机后会话已经为增强会话模式而后 Ubuntu 进入的 XRDP 登录页 面,此时正常输入用户名密码即可。

2021年5月25日