【旅行自用】手把手教你搭建自己的vpn服务器(需要树莓派)
自建树莓派 VPN 适合提升旅行上网隐私,但成本与维护较高,商业机场更省事。
1. 关键信息
- 方案概述:使用树莓派 + PiVPN(WireGuard) + Cloudflare DDNS 搭建个人 VPN,适用于公共 Wi‑Fi 环境的隐私保护(#1)。
- 硬件需求:树莓派 4B/5、microSD、路由器端口转发、域名、Cloudflare 账号(#1)。
- 软件步骤:烧录 Raspberry Pi OS Lite → 安装 PiVPN → 选 WireGuard → 配置 Cloudflare DNS 记录与 API Token → 安装
ddclient实现动态 DNS(#1‑3)。 - 客户端:手机/电脑安装 WireGuard,扫码导入配置(#1)。
- 局限:不适合翻墙/绕过 GFW,UDP 特征易被封锁(#1)。
- 替代方案:直接购买商业机场(10 元/月)或使用路由器自带 VPN、Tailscale、VPS + WireGuard、Shadowsocks、Hysteria2 等(#4‑7、#24、#31、#40)。
- 成本对比:树莓派+配件约 200 CNY;商业机场 10 元/月;VPS 2 USD/月(#82)。
- 实用性争议:部分用户认为自建麻烦且不稳定,建议购买机场或使用路由器/云服务(#4、#5、#6、#9)。
2. 羊毛/优惠信息
- 奇异云:10 元/月 1024 GB,适合短期旅行使用(#12、#70‑73)。
- Gigsky:全球 1 GB 免费 15 天 eSIM,可白嫖(#41)。
- 免费 Cloudflare DDNS:API Token 仅 DNS 编辑权限,无额外费用(#1‑3)。
- VPS 促销:VPS 活动期间低价入手,后自行搭建(#9)。
- 其他:无信用卡、酒店、航司、积分等相关优惠信息。
3. 最新动态
- 国内网络管控加强:2026‑04‑09 RFA 报道中国加强跨境网络管理,VPN 受限(#80)。
- 机场服务质量下降:部分机场被封或速度受限,用户转向自建或 VPS(#58、#85)。
- 技术更新:Hysteria2、Sing‑Box、Cloudflare Workers 等新协议提供更好的隐蔽性(#40、#71、#96‑98)。
4. 争议或不同意见
- 自建 vs 商业机场:
- 支持自建:强调隐私、可控性、学习价值(#1、#55)。
- 反对自建:认为成本高、维护麻烦、连通性差,推荐机场或路由器自带 VPN(#4、#5、#6、#24、#31)。
- 性能争议:WireGuard 在中国部分地区被封,建议使用 Hysteria2、Shadowsocks 或双跳方案(#40、#89、#90)。
- 设备选择:有人推荐 N150 小主机或旧电脑代替树莓派,认为性价比更高(#6、#30)。
5. 行动建议
- 评估需求:若仅需在旅行中临时加密公共 Wi‑Fi,直接购买可靠的商业机场(10 元/月)或使用路由器自带 VPN,省时省力。
- 若坚持自建:
- 选购性价比更高的 N150 小主机或二手电脑,避免树莓派 SD 卡可靠性问题(#6)。
- 使用 Cloudflare DDNS + PiVPN(WireGuard)或改用 Hysteria2/ Sing‑Box 提升隐蔽性(#40)。
- 配置好端口转发、DDNS、并在客户端使用 WireGuard 或 Tailscale。
- 备份方案:准备一个 VPS(2 USD/月)作为中转,防止家庭 IP 被封或 DDNS 失效。
- 安全合规:仅用于个人隐私保护,勿用于非法活动,遵守当地法律。
- 持续关注:留意国内网络政策变化(#80),及时切换到更隐蔽的协议或服务。
你是否有担心过酒店或者机场的网络不安全?
或者特定用户会担心某些奇怪的颜色软件如果换ip会导致不必要的风控,所以自建一个稳定的“回家通道”就很有价值。这样可以一定程度保持低调
这里教你怎么从0到1搭建自己的vpn服务器
重要免责声明
这个方案不适合用于翻墙/绕过GFW,因为UDP协议特征明显,在国内运营商环境下几乎秒封。本教程仅用于提升个人网络隐私与安全性(比如酒店/机场/咖啡厅等不信任的公共Wi-Fi),以及远程安全访问家里NAS/摄像头/内网服务。
前期准备
一台树莓派(推荐4B或5,性能更好;or 哪个便宜买哪个)
一张microSD卡和读卡器
一台电脑用来ssh进树莓派(或者愿意查显示器也行,这里推荐ssh)
家里宽带能端口转发(大部分家用路由器都可以)
拥有一个自己的域名(比如 .xyz / .top / .fun 都很便宜,一年十几块)
注册一个免费的Cloudflare账号
核心思路
用域名+cloudfalre来创建自己的DNS record,所以比如你去 vpn.mydomian.xxx 可以拿到自己家的ip地址
因为现在大部分都是动态ip,用ddclient service来更新cloudflare上自己域名的dns来point到正确的ip
用树莓派pivpn当服务器,简介方便创建profile
终端上(手机电脑)用wireguard来连进自己的pivpn
详细步骤
1. 树莓派系统准备
用 Raspberry Pi Imager 烧录最新 Raspberry Pi OS(64位 Lite 版推荐,省资源)
重要:别选错了,一定要64。 32 bit 的话如果你之后想deploy些别的service可能deploy不了或者特别麻烦,比如mcp。楼主就吃过这个亏
插上电源,开机,ssh 连上(或接显示器键盘)
2. 安装 PiVPN
curl -L https://install.pivpn.io | bash
安装过程中选择 WireGuard
DNS 选 Cloudflare(1.1.1.1)
完成后会提示你可以用 pivpn add 来添加客户端
3. 设置 Cloudflare DDNS(让域名始终指向你家IP)
在Cloudflare → 添加你的域名
在域名里创建一个 A 记录,例如:
名称:vpn
内容:先随便填一个IP(后面会自动更新)
Proxy status:关闭(灰色云朵!非常重要,WireGuard 是 UDP,不能开代理)
创建 API Token(只给 DNS 编辑权限)
My Profile → API Tokens → Create Token → 用 Edit zone DNS 模板
Zone Resources 选你的域名 → Permissions 选 Zone - DNS - Edit
在树莓派上安装 ddclient:
安装
sudo apt install ddclient -y
编辑配置文件:
sudo nano /etc/ddclient.conf
内容,注意等号后面没有空格,不然我记得好像会出问题
protocol=cloudflare
use=web
zone=你的域名.com
password=「第三步里的API Token」
vpn.你的域名.com
原神!启动!
sudo ddclient -force
sudo systemctl enable ddclient
sudo systemctl start ddclient
创建新的pivpn profile
pivpn add
pivpn qr
选择上面add 的profile展示qr code
打开你的手机,下载wire guard,扫上面的qr code
画蛇添足
太麻烦了
有这时间折腾 几十rmb买个机场用1年不舒服吗
真的别折腾了,就算跑通了,到了地方又不通,旅行变debug现场过于下头
真的有需求买个
image1584×190 47 KB
vpn client 各种配置UI都是现成的,商业化产品稳定性也强。先于LD进房间,插上这个,LD洗手的时候,把这个连上酒店Wi-Fi。之后ld的手机ipad自动都有网了,比啥都强
vpn server的话也别自己搭,要么泥潭110% cb免费的,要么直接10元买个机场(在中国用了两周,刷泥潭可快了)。不折腾。
【引用自 AnonAno】:
树莓派
2026年不要再买树莓派了,一个N150小主机性能是他的一倍,能跑完整X86,还能用ssd,也就100来块200出头。 树莓派以前流行是因为低价,现在涨价太凶,而且事实证明把系统塞SD卡里就是个错误的主意,SD卡这东西就不可靠。就算是廉价nuc里的ssd,可靠性也比sd卡好。
顺便一提泥潭用户不应该手上有无数吃灰的免费vpn吗,cb网站动不动就送120% 100%返现,不需要自己搭建。
【引用自 打豆豆】:
要么直接10元买个机场(在中国用了两周,刷泥潭可快了)。
not a good idea for
【引用自 AnonAno】:
个人网络隐私
小机场隐私政策不透明,很多连无日志政策都不承诺,天知道会拿你的数据去干什么。
当然你也可以说大vpn可能参与棱镜计划,国人小机场不会参与。只能说这种就是吃几碗粉的自证难题,全看你信得过谁,至少我不敢信任无日志政策都没承诺的小机场。
机场就是用来绕过墙的,vpn是为了隐私,不是一个目的。
没懂,在家里设备装个tailscale设置成出口节点不是一样的吗
arduino呢
vps搞活动的时候进货就行,至于怎么搭,甩给claude,基本上没有什么难度
【引用自 打豆豆】:
要么直接10元买个机场(在中国用了两周,刷泥潭可快了)
有机场推荐吗
【引用自 打豆豆】:
先于LD进房间,插上这个,LD洗手的时候,把这个连上酒店Wi-Fi。之后ld的手机ipad自动都有网了,比啥都强
这波服务拉满了,豆嫂都直呼内行
我买的 奇异云 (注意别买到盗版了
10元一个月1024GB,每次回国就花10元,两三周足够了。。。
【引用自 AnonAno】:
个人网络隐私
【引用自 klaxien】:
小机场
在中国翻墙是第一刚需,机场是必须要用的…否则刷不了泥潭心里痒
偶尔回国开个google fi漫游得了,机场还有个问题是ip质量一般都不高,访问美国的金融系网站容易被阻断。
【引用自 klaxien】:
google fi漫游
我是att 后付费无限漫游,速度太慢,几乎处于能用和不能用之间(大部分时间是LTE。Google Fi漫游时候速度如何? ld的老爷爷tmobile无限漫游也是非常慢
点外卖和打车基本上手机和放幻灯片一样,刷泥潭也很便秘。看YouTube就更别说了…
每次回国至少10天,还挺影响体验的。
【引用自 打豆豆】:
vpn server的话也别自己搭
買個asus router接到自己家解決,自帶VPN server,現在做為client在普通的VPN配置之外還可以下載他的App一鍵連
我回去了几趟都用的google fi,记得是漫游到移动,体验挺好的。网站没问题,视频稍微有点慢也能看。奇怪,按理来说几家大运营商应该都不会太差的。
点外卖和打车基本上手机和放幻灯片一样
这个肯定慢的,相当于流量走到美国一圈再回来,我的体验是能用,但是很慢,国内网站还是走国内网好。
【引用自 klaxien】:
记得是漫游到移动,体验挺好的
是LTE还是5G? ATT也是漫游到移动,但国内几个大城市都是一如既往的慢,我印象中speedtest国内版测试也就30 kbps,被歧视得太严重了。
买了机场在房间里刷泥潭飞速,还能YouTube看电视剧,关键是不用来回切,来回捣鼓每台设备,所有设备都生效,这个对我很重要…
【引用自 heheovereggs】:
router接到自己家
【引用自 Sundaysun13】:
tailscale
我家里路由器也是GL inet的,自带UI所以很简单就开了tailscale作为exit节点,但是在中国几乎也不能用,而且速度和那个10元的机场差远了。后来就没用过,只是ping通了,能打开家里router的portal,自娱自乐一下完事
那个 tailscale不是更好?
这种技术贴下面总能学到很多东西
无论是op还是评论
【引用自 打豆豆】:
是LTE还是5G
没记错的话,LTE和5G都有,大部分时间是LTE,偶尔有5G。
【引用自 AnonAno】:
不适合用于翻墙/绕过GFW
连这个都不行的话懒人版用tplink/asus之类路由器就好了啊,ddns加ftp加vpn一整套
【引用自 打豆豆】:
奇异云
截屏2026-01-02 20.11.052118×480 50.2 KB
只是为了刷泥潭,改个dns就行。用firefox在隐私设置里把安全dns设为强制,然后找一个国内可用的国外DoH地址。
所有被dns污染但后端接在cloudflare的网站都能开。
啊?没看懂为什么需要树莓派。家里有 static IP 的话直接家里电脑部署 Wireguard 不就好了,没有的话 VPS 上部署或者映射到 VPS 上也行,至于 profile 什么的,推荐 wg-esay 直接 WebUI 管理就好了啊。
https://%E5%A5%87ncloud.com
【引用自 klaxien】:
LTE和5G都有,大部分时间是LTE
image1179×2556 166 KB
合理怀疑att和中国移动没谈拢,或者wbgzcm恶意降速,还是说中国的5G频段美国的手机不支持
刚在曼谷测了一下,这漫游的5G速度飞快啊…
有什么推荐的机场吗?
有些地方会给你把所有vpn的协议都block的干干净净,只有shadowsocks可以用…
【引用自 打豆豆】:
10元买个机场
5元租个Linode不香吗,用别人的机场等于XP每天被人看光光
实在不行aws也可以白嫖最便宜的plan
需要自己动手的都太贵,我一行命令都不想打了(要不然也不会买gl路由器
额,我都是带迷你主机的,刷几个系统,一边当路由一边当电脑,比较方便
直接用tailscale不香吗
你用的是iPhone 吗?Android 回国以后会有一些奇奇怪怪的频段问题,建议用iPhone(开热点)。国内的东西用国内的流量比较好,速度很快,用外卡还要绕一大圈才能把线路跑完。
顺便问一下你有没有开international day pass?
美国买一个路由器回国插上,能自动翻墙吗
【引用自 Sundaysun13】:
tailscale不是更好
上周末刚让我国内兄弟试了,美国国内的话还行,在中国连我美国电脑能通,但可用性不好,和豆豆老师说的一样
我的设备是iPhone 16 (但之前14 pro,13 pro也是一样的症状,漫游到中国移动速度很慢,出奇地慢。只是绕路应该是延迟高,速度本身不应该那么慢,我觉得就是被恶意降速了…
【引用自 Anonymously】:
顺便问一下你有没有开international day pass?
我是公司的卡自动开启全球无限漫游(所以我觉得不应该是att的套餐挂壁,因为你看上面曼谷测速就很快)
【引用自 klaxien】:
能跑完整X86
其实在server端个人感觉ARM已经完全能用了,没看到什么软件是不支持ARM的……各大distro都有官方支持了
【引用自 打豆豆】:
在中国几乎也不能用
我在北美的Asus VPN server (走cisco IKEv2)在中國能用,機場Wi-Fi都可以用的那種
我Google Fi在中国快得飞起,带宽管够,ping比较高。
也是美版iPhone吗
用不着这么麻烦,任何能装linux的东西,包括旧电脑,旧机顶盒,旧手机(通过termux),openwrt路由器,都可以去装个xray一键脚本:
github.com
GitHub - mack-a/v2ray-agent: Xray、Tuic、hysteria2、sing-box 八合一一键脚本
Xray、Tuic、hysteria2、sing-box 八合一一键脚本
其中vless-reality和shadowsocket甚至不需要自己的域名就可以把本机当成代理服务器。
然后开服务器的机器在家里路由器设置好端口映射(或者直接搞成DMZ机器),配合ddns,就可以远程连回家了。
如果家里连公网IP都没有,可以用我写的这个服务,不需要任何中转机,利用TCP打洞,直接连回家:
github.com
GitHub - kanshurichard/GoHomeEasy: GoHomeEasy is a Serverless-based (Cloudflare...
GoHomeEasy is a Serverless-based (Cloudflare Workers / AWS Lambda) Shadowsocks/Clash subscription management tool, designed specifically for home broadband users without a public IP to access their home network remotely.
谢谢分享
不过基于美卡论坛的精神,免费的gigsky似乎更有性价比
【引用自 bill】:
免费多次白嫖 1GB 15天 eSIM 全球可用【Visa offer】
一张卡一个日历年可以白嫖1GB(部分卡可以白嫖2次),用完换号即可。
在自己家建,从中国连速度怎么样?这个线路没优化过。
在中国用去买优化线路VPS,有访问自己家的需求走remote desktop
在国内直接连的体验真的行么?我之前用 AWS 搭过,带宽很低,可用性极差,最后还是用机场了
泥潭薅的那些 VPN 大概都用信用卡支付的,被 subpoena 了还是相当于实名上网,我基本只用来下资源和跨区啥的
匿名支付这块我只服 Mullvad 的邮寄纸钞
这个你只能相信提供商的人品,还有就是不要干不该干的事。这东西只是给你保护隐私的,不是保护你干非法的事的。
我记得之前看到过一个用tor被警方盯上的,网络虽然完全匿名,最后是根据流量特征和上网时间确定的嫌疑犯。
美版iPhone ,之前用Android各种问题,换成iPhone 起飞。你可以确认一下你的套餐到底有没有高速流量,你说的那个限速我感觉是没有高速流量漫游。
【引用自 Anonymously】:
换成iPhone 起飞
那应该就是协议价里面没包括高速流量(或者我在美国用超了高速的部分?公司的套餐我看不到任何信息,算了。下次回国直接用中国移动的卡最省事
我是美国卡加中国卡一起用,凡是涉及到国内的东西并且速度要快一点的,我都用中国卡。不过这一次我发现有时候中国卡即使信号满格也会出现网速很慢的问题,可能还是一个基站附近的上网的人太多了。这时候WiFi 可以解决尴尬。
我还出现过火车站有信号但是完全没网(听着很像美国的tier 234那种子品牌),看来就是套餐没到位,被歧视了。
你敢的话,可以用hysteria2协议开在udp443端口模拟http3网站,从中国访问多差的线路都能跑满
我有两个日本的IP,看youtube都没问题,美国西海岸的话会慢不少
请问这个买国内版的刷成国际版系统功能一样吗?准备回国当透明代理用,发现京东上比美国便宜很多
我确实不是很了解这个,可能是老时代的人了哈哈 比较相信openvpn
早年买了两个树莓派3,建起vpn和HA都很方便,也省电。就是回国的时候依然经常连不上,用红茶解决。
不翻墙的话,你就搞个shadowsocks,搭建也方便,用起来也方便,无论是服务端还是客户端软件选择都超级多。
越简单的东西问题越少。
去楼下买包子就可以但是楼主想教大家做包子
【引用自 打豆豆】:
中国用了两周,刷泥潭可快了
我的搬瓦工访问泥潭都403
被迫折腾了t-mobile原生漫游通道
Beryl 可以搭配 机场一起使用吗?以前从来都没有搞过机场
【引用自 KanShu】:
旧手机(通过termux)
需要root吗?
不需要。
那方便多了
但可能需要搞个usb hub拖个有线网卡,用无线的话会很不稳定。
我去年回国用的是用asus xt8 创建的wireguard 访问完全没有问题
有没有反向翻回国的技术呢,不懂vpn,但是照着ai的操作搞了一个路由器刷成vpn路由器,完事了发现搞不到回国的节点
使用frp,找个有公网ip的机器反向代理回国内的家。只是可以用,速度不大行
也是个思路,感谢
我现在感觉还是tailscale最稳定,国内美国各放一个路由器
有反向回国的机场的,买一个就可以,自己搭建也不便宜
打豆豆: 我买的 奇异云 (注意别买到盗版了 谢谢豆豆老师,研究了一下准备上车,那个2.99$的App是必须要买? 这家做多久了?长期用是不是月付比较好?年付怕跑路了,不过也就100rmb
最近还有刷到用cloudflare workers搭梯子的github repo
877: 那个2.99$的App是必须要买? ??? 877: 长期用是不是月付比较好?年付怕跑路了,不过也就100rmb 是不是遇到假网站了 只有¥10一个月,童叟无欺啊。app不需要买,也没有年付 哦 看了下是有年付。我是每年买两次月付,2025年开始买的,目前没跑路。但这几天效果一般,我开始研究自建了 你是女生自用吗?别买了我直接把我的发给你吧…
机场是啥。。。
/uploads/short-url/hEHXfQu2YPV6UqpZq5PM7gnbHXF.png?dl=1 /uploads/short-url/TxvC9QepOrSxOUagHh3FhFXWTB.png?dl=1 我搜到的是这个 打豆豆: app不需要买 那个shadowrocket的软件是要2.99$,本来要下手了,觉得奇怪来找你问问 /uploads/short-url/xQ8WhnmhFW4xrWZjVp7ApOtkdwg.jpeg?dl=1 打豆豆: 但这几天效果一般,我开始研究自建了 具体怎么不好用,刚准备上车 打豆豆: 你是女生自用吗?别买了我直接把我的发给你吧… 我准备给在国内的我妈用,之前的年付surfshark到期了,最近靠我开小号30天一个30天一个续命,豆豆老师不用给我发,给我指个正版的路就好
网站是这个 但最近晚上延迟很大,甚至YouTube/爱一番看着都卡,有两天晚上接近不能用…
打豆豆: 网站是这个 那这个app是对的吗?难不成是去年app不收费,今年app变成收费2.99$赚点额外外快? 打豆豆: 但最近晚上延迟很大 最近zz因素,监管严了点,VPN基本都连不上,风头过了就好了
那个收费app不是必须的(我是旅行路由器命令行安装了 开源的openclash,直接复制粘贴订阅链接就能用了。 2.99的app只是一个壳,能用任何机场的订阅链接。同样其他clash client也能用任何机场的订阅链接。 手机上我记得有免费的 https://apps.apple.com/us/app/clash-mi/id6744321968 也是复制粘贴订阅链接就行。 电脑/安卓上免费的客户端应该更多… 有什么重大事件嘛 距离春夏之交还很远啊
打豆豆: 手机上我记得有免费的 https://apps.apple.com/us/app/clash-mi/id6744321968 也是复制粘贴订阅链接就行。 Clash MI 我用了没有两分钟就闪退了,还是得用 Shadowrocket
打豆豆: 有什么重大事件嘛 距离春夏之交还很远啊 最近打击机场居然不知道吗,大部分国内中转机场都阵亡了
奥感谢,一语点醒! 打豆豆: 有什么重大事件嘛 https://www.rfa.org/mandarin/shehui/2026/04/09/china-internet-vpn-block-greatfirewall/ https://www.rfa.org/mandarin/shehui/2026/04/09/china-internet-vpn-block-greatfirewall/ 海外社交媒体近期流传4至5份涉及中国加强网络管理的内部文件。文件显示,中共中央网信办及三大电信运营商正加强对跨境网络连接的管控,涉及企业和个人。 原因我就不知道了,实测surfshark想要连巨费劲巨费劲
这么说还是买一个吧
母鸡啊,我没什么国内技术论坛可以逛。 不过现在有AI自建也很方便了。用claude在我买的vps那里自建了一个,很快就拿到了订阅链接。可能我运气好买的vps的ip没被和谐,虽然是美东但速度不错,酒店看爱一番YouTube很丝滑。 /uploads/short-url/ylCM2HmMtJDK3fsBxzAfQe6uG4M.png?dl=1 我这2刀一个月的vps,感觉以后也不用买机场了
据说是因为天津超算中心被黑,10PB数据被人通过机场中转传了出去
最近X上都在说这个
我是买了美国机房针对 CN2 GIA 优化的 VPS,让 Claude 给我搭了一个 singbox 跑 Hysteria2,然后从这个 VPS 再用 wireguard 连回家里的 UDM,这样我在国内也可以一直使用我的家宽 IP,速度和延迟都还不错 /uploads/short-url/qec3Jp6Y0RfTbhsd9EsVGpG8BHm.png?dl=1
李十三: 然后从这个 VPS 再用 wireguard 连回家里的 UDM 妙啊 这样能解决人机验证的问题吗 我之前只用tailscale连家里的路由器/群晖,速度太慢了。不知道是协议不行还是家里线路不行 (等有空了再让ai从家里路由器搭一个
我是TMO/gigsky负责翻墙,再套wireguard冒充美国本土,基本上银行/券商都没问题 不翻墙硬连wireguard速度也是可以的,就是不知道啥时候被封杀 根据我公安的同学说,只是有时候他们懒得管,要管就不会有漏网之鱼
你可以去测一下你的 IP,家宽 IP 只要你不乱干肯定是最干净的,会少很多人机验证 Tailscale就是 wireguard,在国内很多地方基本上不能用,所以需要找一个线路优化过的中转box
wireguard 在中国很多地方基本上不能用,所以必须得中转一下
李十三: Tailscale就是 wireguard 那怪不得很慢,wireguard我记得特征太明显了,分分钟被封。 但我家静态ip好像更换还得找isp,我又怕搞黑了不舍得用
不翻墙的话,直接用家里的路由器不就行了(一般自带VPN服务的,直接开启就行了)?有点重复造轮子的意思了
只有你自己用为什么会黑?你在国内翻墙用的东西和你在美国用的又没什么区别
意思是被中国拉黑吧 留着以后关键时候用 好吃的要留到最后吃
不是,GFW又看不到你的家宽IP,你所有 traffic 都是先到 VPS 再回你家的
太高级了 有什么关键字吗 这个二次中转 晚上我让ai试试
我让 Claude 搞完以后复盘做的 skill,没有测试过 #p-8018266-name-proxy-tunnel-description-set-up-a-sing-box-hysteria2-proxy-on-a-fresh-debian-vm-with-a-wireguard-tunnel-back-to-a-home-udm-pro-so-that-client-traffic-exits-through-the-home-ip-invoke-when-the-user-wants-to-rebuild-or-deploy-this-tunnel-setup-on-a-new-vm-1name: proxy-tunnel description: Set up a sing-box Hysteria2 proxy on a fresh Debian VM, with a WireGuard tunnel back to a home UDM Pro, so that client traffic exits through the home IP. Invoke when the user wants to rebuild or deploy this tunnel setup on a new VM. #p-8018266-proxy-tunnel-hysteria2-wireguard-to-home-2Proxy tunnel: Hysteria2 + WireGuard-to-home Sets up a two-hop tunnel on a VM: [client in China] --Hysteria2/UDP--> [VM] --WireGuard--> [UDM Pro at home] --> internet (home IP) Sing-box terminates Hysteria2 and its direct outbound is bound to wg0 , so all proxied traffic exits through the home WireGuard. #p-8018266-what-to-ask-the-user-first-3What to ask the user first Before running anything, collect: VM SSH access : user@ip (usually root@<ip> ). Key is typically via 1Password SSH agent — don’t ask for key path unless the user brings it up. TLS mode : self-signed (default, easiest) or ACME with a real domain. Self-signed requires client insecure: true . ACME needs a domain pointed at the VM and port 80 open. WireGuard client config from the UDM Pro . The user must generate this in UniFi Network → Settings → VPN → VPN Server → WireGuard → add client peer → download/copy the .conf . It looks like: [Interface] PrivateKey = ... Address = 192.168.X.2/32 DNS = 192.168.X.1 [Peer] PublicKey = ... AllowedIPs = 0.0.0.0/0 Endpoint = <home-wan-ip-or-ddns>:51820 Port/password : default to UDP/443 + randomly generated password. Users can override. Obfuscation : default to salamander obfs enabled (GFW resistance). Use the same password as auth for simplicity. Remind the user that the UDM WAN firewall should allow UDP/51820 from the VM’s IP. #p-8018266-steps-4Steps #p-8018266-h-1-prep-the-vm-51. Prep the VM Always check for and kill a wedged unattended apt-get update first — this has happened before on fresh DMIT VMs and blocks installs for hours: ssh root@<IP> 'pgrep -ax apt-get; pgrep -ax unattended-upgr' # if stuck for >5 min on a CLOSE-WAIT connection: ssh root@<IP> 'pkill -9 apt-get; pkill -9 unattended-upgr; \ rm -f /var/lib/apt/lists/lock /var/cache/apt/archives/lock \ /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock' #p-8018266-h-2-install-sing-box-from-the-official-debian-repo-62. Install sing-box from the official Debian repo ssh root@<IP> 'set -e apt-get update apt-get install -y curl ca-certificates gnupg openssl mkdir -p /etc/apt/keyrings curl -fsSL https://sing-box.app/gpg.key | gpg --dearmor --yes -o /etc/apt/keyrings/sagernet.gpg chmod a+r /etc/apt/keyrings/sagernet.gpg echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/sagernet.gpg] https://deb.sagernet.org/ * *" \ > /etc/apt/sources.list.d/sagernet.list apt-get update apt-get install -y sing-box wireguard iptables conntrack' #p-8018266-h-3-generate-cert-password-and-sing-box-config-73. Generate cert, password, and sing-box config Self-signed cert with CN= bing.com (matches the masquerade). For ACME, replace the tls block per sing-box docs. PW=$(openssl rand -base64 24 | tr -d '/+=' | head -c 32) ssh root@<IP> "set -e mkdir -p /etc/sing-box/certs cd /etc/sing-box/certs openssl ecparam -genkey -name prime256v1 -out key.pem openssl req -new -x509 -days 3650 -key key.pem -out cert.pem -subj '/CN=bing.com' chown -R sing-box:sing-box /etc/sing-box/certs chmod 600 key.pem cat > /etc/sing-box/config.json <<EOF { \"log\": { \"level\": \"info\", \"timestamp\": true }, \"inbounds\": [ { \"type\": \"hysteria2\", \"tag\": \"hy2-in\", \"listen\": \"::\", \"listen_port\": 443, \"obfs\": { \"type\": \"salamander\", \"password\": \"$PW\" }, \"users\": [ { \"name\": \"me\", \"password\": \"$PW\" } ], \"masquerade\": \"https://bing.com\", \"tls\": { \"enabled\": true, \"alpn\": [\"h3\"], \"certificate_path\": \"/etc/sing-box/certs/cert.pem\", \"key_path\": \"/etc/sing-box/certs/key.pem\" } } ], \"outbounds\": [ { \"type\": \"direct\", \"tag\": \"direct\", \"bind_interface\": \"wg0\" } ] } EOF sing-box check -c /etc/sing-box/config.json" Save the password — needed for clients. Note the same password is used for both auth and obfs; this is fine for a single-user personal proxy. #p-8018266-h-4-configure-wireguard-with-policy-routing-dont-break-ssh-84. Configure WireGuard with policy routing (don’t break SSH) Paste the UDM-generated client config with two critical modifications : Add Table = 200 so wg-quick installs routes in a custom table instead of replacing the system default. Without this, SSH replies go out wg0 with source=192.168.x.2, home NATs them back to its WAN, and SSH breaks. Strip the DNS = ... line (don’t let wg-quick rewrite system resolv.conf). Add PersistentKeepalive = 25 . ssh root@<IP> 'umask 077 cat > /etc/wireguard/wg0.conf <<EOF [Interface] PrivateKey = <from-UDM> Address = 192.168.X.2/32 Table = 200 [Peer] PublicKey = <from-UDM> AllowedIPs = 0.0.0.0/0 Endpoint = <home-endpoint>:51820 PersistentKeepalive = 25 EOF chmod 600 /etc/wireguard/wg0.conf' #p-8018266-h-5-persist-loose-rp_filter-95. Persist loose rp_filter ssh root@<IP> 'cat > /etc/sysctl.d/99-wg-rpfilter.conf <<EOF net.ipv4.conf.all.rp_filter=2 net.ipv4.conf.default.rp_filter=2 EOF sysctl --system' #p-8018266-h-6-enable-and-start-services-106. Enable and start services ssh root@<IP> 'systemctl enable --now wg-quick@wg0 systemctl enable --now sing-box sleep 2 wg show systemctl is-active sing-box wg-quick@wg0' #p-8018266-h-7-verify-117. Verify # WG handshake (should show a recent timestamp and non-zero received bytes) ssh root@<IP> 'wg show wg0 latest-handshakes' # Egress IP through the tunnel (should be the HOME WAN IP, not the VM IP) ssh root@<IP> 'runuser -u sing-box -- curl -s -4 --max-time 10 ifconfig.me' If curl as sing-box returns empty or times out, the WG handshake didn’t complete — check UDM firewall (WAN LOCAL must allow UDP/51820 from the VM IP) and that the peer’s public key on the UDM matches what the private key in wg0.conf derives. #p-8018266-client-config-output-12Client config output Give the user all three forms: Shadowrocket URI (importable via clipboard): hysteria2://<PW>@<IP>:443/?sni=bing.com&insecure=1&alpn=h3&obfs=salamander&obfs-password=<PW>#<NAME> sing-box client outbound : { "type": "hysteria2", "server": "<IP>", "server_port": 443, "password": "<PW>", "obfs": { "type": "salamander", "password": "<PW>" }, "tls": { "enabled": true, "server_name": "bing.com", "insecure": true, "alpn": ["h3"] } } Mihomo / Clash.Meta YAML : - name: <NAME> type: hysteria2 server: <IP> port: 443 password: <PW> obfs: salamander obfs-password: <PW> sni: bing.com skip-cert-verify: true alpn: [h3] #p-8018266-gotchas-learned-the-hard-way-13Gotchas — learned the hard way Do NOT use iptables fwmark + OWNER-MATCH to route sing-box traffic through WireGuard. The WG kernel module propagates the inner skb’s mark onto its encapsulated UDP packets, which causes a recursive routing loop through wg0. Sing-box’s native bind_interface: "wg0" on the outbound avoids this entirely. Do NOT make wg0 the system default route . It breaks SSH (replies get routed through home) and requires complex source-based rules to work around. Use Table = 200 in wg-quick config so wg0 routes only apply when explicitly targeted (e.g. by bind_interface ). DMIT VMs often ship with a wedged initial apt-get update holding the dpkg lock for 20–30+ minutes on a stale CLOSE-WAIT TCP connection. Detect and kill it before trying to install. Home WAN IP change breaks the tunnel. Use DDNS on the UDM and set Endpoint to a hostname. Self-signed cert + GFW active probing : if the GFW probes the server with TLS, a self-signed cert claiming to be bing.com is a giveaway. For long-term China use, consider ACME with a real domain. Obfs + auth passwords : Hysteria2 salamander obfs takes its own password, separate from user auth. Using the same value for both is fine for a personal proxy; use different values if you prefer.
斯兰你的内哭