😡 太长不读版:使用 VLESS + WebSocket + TLS 方案、Cloudflare CDN 保护、Cloudflare WARP 解锁服务,在 RackNerd 的 10.99/yr 起廉价服务器上搭建一个安全、隐私、不易封的代理服务器。无广告,很详细。
本文如未特殊提及,货币单位均为美元。好吧,其实是会被 KaTeX 识别成数学公式……
各位想必都已经混迹互联网十余载,对于这门技术有所耳闻,甚至自己购买过机场的订阅,在外面的世界已经遨游过一番了。今天词元就讲一个老生常谈的问题:老是觉得那些机场主都不可靠,我能不能自己搭一个?
首先在文章开始之前,国际惯例,对于几个常见误解进行声明:
- 词元没有收一分钱;相反,还因为购买服务器和域名花了 30 多,本文请放心食用;
- 搭建代理服务器是一个比较复杂的过程,您应当有最基本的 Linux 使用能力,对网络相关知识有一定了解;
- 无论是自建的代理还是机场,总有被封或跑路的一天,您的钱若打了水漂,词元不负责。
12 月 28 日更新:删去了大段大段没啥用的安全性分析。
👌 我知道了,开始吧
准备好了?让我们先看看大概要做什么。
- 购买 RackNerd 服务器;
- 购买 Namesilo 域名并用 Cloudflare 托管;
- 服务器初步设置,对于建站比较通用;
- 搭建代理服务器,此时您已经可以使用代理了;
- (可选)使用 Cloudflare 的 CDN 和 WARP 服务,对服务器前后流量进行优化;
- (可选)安全性和速度提升(0x06 节)。
词元趁着双十一购买了服务器和域名,总价 27.86(¥200.87,按照支付宝和 Stripe 的汇率),如果您不幸地在没什么活动的时候看到这篇文章,也可以选择到 RackNerd 社区去找找优惠,下面会说到。如果没有什么意外(不可能),搭建时间会在 30 到 40 分钟。
💵 花钱
其实词元一直都想哪次出国旅游,把台式机带着,找个角落连上网线和电源,就这么免费享受家宽加上超高性能。当然是瞎想了。
首先我们来到 RackNerd。活动期间会有首页横幅,点击进入即可。RackNerd 的老板据说是华人,除了北美常见节日有活动,双十一、春节等等国内节日也有,并且优点是续费可以原价。如果有可能的话,就在双十一前后买,这样到期之后重新购买,相当于免费换一个 IP。
如果没有活动,也可以去 RackNerd 的社区活动,常年有优惠,最低价格 10.99,甚至比这个活动还要低。
无论如何,我们现在可以选择四个套餐,具体配置大家可以自己看,这里词元推荐:
- 如果您没有建站的需要,11.11 套餐足矣。
- 如果您希望在代理之外做点好玩的(WordPress、游戏服务器等),建议购买 25.98 套餐。
注:这里的价格是按照双十一活动写的,如果您查看的是社区活动,请相应选择第一档和第三档套餐。为啥?主要看以下几个指标:
- 🧮 vCPU 和内存:这两个决定了能跑多少服务以及性能,如果只是代理,1 vCPU 加上 1 GiB 内存绰绰有余,但是如果有其他想法,尤其是内存容易捉襟见肘;
- 🛜 流量和带宽:决定你一个月能用多少流量,最低的 1 TiB 都远超机场了,但是注意这个流量包括您在服务器上下载的内容和发送的内容,也就是说您做代理的的用量会是两倍,如果您要看什么 8K 视频,建议还是选大点的带宽为妙;
- 💾 硬盘:能存多少东西,RackNerd 是全 SSD 的,词元跑过分,也说明如此,大可放心,至于容量,看您自己的需求;
- 🗺️ 位置:重点来了,这是我们的场景下最重要的内容之一。RackNerd 只有一处 MC 机房(洛杉矶),其他均为 CC(关于 MC 和 CC 区别请自行搜索),后者有时候会出现谷歌验证码、流媒体封禁的情况,而 11.11 套餐是没有 Los Angles DC-02 选项的!并且洛杉矶有直通中国的电缆,因此速度上会比较好看,丢包也稍微少点,通过 RackNerd 的测试页面来看,前后差距能达到 10 倍!但是 RackNerd 看来是超售了,晚高峰时间段还是会卡顿。
12 月 12 日更新:如果使用了下文所述的 WARP 代理,有一定几率也会跳谷歌验证码,介意的话可以不开 WARP,或者多试几次,找一个好的 IP 用。
12 月 28 日更新:是 WARP 的锅,由于其默认使用 IPv6,提高了许多站点的敏感度,而且这些 IP 都是万人共用,有追求的话可以购买 WARP+ 或者——换一家 VPS 吧。
关于地址再多说一点,千万不要为了省几刀去买最便宜的套餐,垃圾线路对速度影响真的很大。如果您已经选择了稍贵一点的线路,也请注意不要选错位置,不然多花的钱就浪费了。
以下是一个示例,需要注意的地方词元用红框框标注了,大家自查:
大家应该知道 Ubuntu 并不适用于服务器,但是我们这里还是没有选择企业级 Linux 例如 Rocky Linux,主要有几个原因:
- Rocky Linux 9 的 NetworkManager 更新需要手动操作,怕大家不大熟悉 Linux;
- Rocky Linux 的软件包很旧,有些新的脚本用不了;
- Rocky Linux 预装了比较麻烦的 SELinux,这是个好东西,但是在我们的情况下比较复杂且易导致错误。
12 月 28 日更新:其实用 Rocky Linux 也可以,文末添加了教程。不知道为什么 Ubuntu 的 SSH 总是一顿一顿的。
选好了服务器配置,接下来就可以付款了。记得选择支付宝,用手机扫码付款,然后注册一个 RackNerd 账号来管理,这些就不详细说,相信大家是会的。付款之后,您填写的邮箱会收到一封邮件,里面包含了 VPS 的 root 密码,以及他们 NerdVM 管理账号。先不着急去连接,我们再来付钱买个域名。
域名嘛,我直接推荐大家去 Namesilo 注册一个 .top,江苏的一家公司运营,非常便宜,首年 1.88,续费 4.88,什么 .com 之类的就别奢望了,价格普遍 20+。其实 Spaceship 有一些活动非常诱人,例如 .one 首年只要 0.98,但是次年要 23.98,所以……擦亮眼睛吧。
接下来,同样注册一个账号,我们直接付款购买。
域名注册好之后,我们马上会将 DNS 记录转移到 Cloudflare 托管,但是由于 Cloudflare 的域名注册没有 .top 的授权,所以不能彻底转移,后期的续费等操作还是要在 Namesilo 上操作。其实如果你只是想搭建一个代理,可以没有域名,但是为了证书和避免 IP 暴露,我们还是买一个为好。
打开 Cloudflare,注册之类的工作相信大家都会,就不细说了,完成之后我们看到账户主页就有 Add a domain 的选项,我们点击。
输入你的域名,并根据提示在 Namesilo 将 DNS 服务器修改为 Cloudflare 提供的两个。要说 Namesilo 的管理界面是真的古旧,算了算了,还是给大家演示一下怎么修改 DNS 记录吧。
首先,在用户的 Dashboard 上打开域名管理。
然后选择我们刚刚购买的域名,右侧有一个疑似数据库管理的图标——实际上是 DNS 服务管理。
然后我们删除原来所有的 DNS 服务器,并添加 Cloudflare 提供的服务器。
这时候我们回到 Cloudflare(是的,接下来基本可以和 Namesilo 这个丑陋的界面说再见了),等待 Cloudflare 的 DNS 信息更新,过一会儿我们就能看见成功的提示了。
关于 Cloudflare 服务的用法还有很多(大善人的名号不是白叫的),目前的设置应该够用了,词元过段时间可能再写一篇文章,说说怎么用 Cloudflare 的服务给自己的网站增加安全性。(致各位信奥赛选手:如果您的机房采用了极域、育林卫、(旧版)联想以及很多旧的网络控制系统,让您无法上网(但是可以看到一个阻止页面),那么 DNSSEC 能让您的网站正常使用(防止 DNS 污染)。)
🚉 建站
现在我们可以翻出刚刚 RackNerd 的那封邮件了。简单阅读一下,最重要的信息是两个:
- IP 地址和用于 SSH 的用户名和密码;
- NerdVM 账户。
后者我们暂时还是用不到,所以先别着急删除邮件。如果您使用 Windows,打开 PowerShell;如果您使用 Linux——这还需要词元教您吗?总之打开一个现代的终端,几乎所有平台都已经有了 OpenSSH。我们使用以下命令连接:
$ ssh root@[YOUR_IP_ADDRESS]
嗯……有问题吗?前面那个 $
不是命令的一部分啦,是说您要用普通用户执行![YOUR_IP_ADDRESS]
是刚刚看到的 IP 地址!
词元说过您需要最基本的 Linux 知识。
如果您是首次连接,那么会出现询问您是否保存指纹的提示,直接输入 yes
即可。然后输入刚刚的 root 密码,密码是不显示的,输完之后直接按回车,如果输出了按住退格一会儿,清空输入,如果干脆不想连接了直接按 Ctrl-C 中止。
不出意外,一长串信息将会欢迎您:
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-125-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of ***
System load: *** Processes: ***
Usage of /: *** Users logged in: ***
Memory usage: *** IPv4 address for eth0: ***
Swap usage: ***
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
*** updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
这段文字里包含了系统信息、版本,当前状态,还有,咳咳,Ubuntu 的广告。
下面会出现一个您可能很熟悉的东西——刚刚输入 SSH 命令的时候见过?
root@racknerd-***:~#
这就是命令提示符了,您后面的命令都需要这样输入。但是现在我们通过 root 登录,还用 SSH,这是非常危险的,所以第一步是建立一个有 sudo 权限的普通账户,并且禁止 root 通过 SSH 登录。
root@racknerd-***:~# useradd -m -G sudo admin
添加一个名为 admin
的用户,并分配进入 sudo
组。注意似乎除了 Ubuntu 没人把特权组叫作 sudo
,不是都叫 wheel
吗?
root@racknerd-***:~# passwd admin
New password:
Retype new password:
passwd: Password updated successfully
在提示输入新密码的地方输入,然后重复一遍。注意仍然是不显示的。
在修改 SSH 设置之前,我们先测试一下,防止设置有问题,待会儿就没法通过 root 连接服务器了。
root@racknerd-***:~# su - admin
admin@racknerd-***:~$
注意到提示符的变化了吗?我们进入了普通用户模式。
admin@racknerd-***:~$ sudo apt --version
[sudo] password for admin:
输入您刚刚设置的密码,你应该可以看到 APT 的版本信息,但是如果你看到的是:
admin is not in the sudoers file.
说明你刚刚的设置存在问题,比如没有加入 sudo
组。
如果没有什么问题,接下来我们就可以禁用 root 的 SSH 登录了。
admin@racknerd-***:~$ sudo vim /etc/ssh/sshd_config
路径名称可以使用 Tab 补全。如果您不会使用 Vim,请自行在网上搜索一下,有很多相关的教程,这里只需要关注两个:
- 正常模式(启动时)下输入
i
进入输入模式; - 按下
<esc>
退出输入模式,回到正常模式; - 正常模式下输入
/
搜索,回车到达; - 结束编辑之后,在正常模式下输入
:wq
退出 Vim 并保存。
很简单吧!我们这里只需要查找到 PermitRootLogin
这个设置,将之后的 yes
修改为 no
就行,然后退出 Vim,并重启 sshd 服务:
admin@racknerd-***:~$ sudo systemctl restart sshd
然后输入 exit
并重新用 admin@[YOUR_IP_ADDRESS]
连接,这样您使用的就是普通用户了。
12 月 28 日更新:如果您想进一步防止 SSH 暴力破解密码,请按使用 SSH 公钥登录服务器并禁用密码的说明操作。
最基本的事情做完了,接下来我们来更新一下。目前 RackNerd 提供的最新版本是 22.04 LTS,最新的则是 24.04 LTS,您千万不要动心去 do-release-upgrade
,主要是因为我们毕竟不在服务器跟前,防止出现什么问题我们无法调试。什么?需要换源吗?开玩笑,我们的服务器可是在美国!
admin@racknerd-***:~$ sudo apt update && sudo apt upgrade
更新完成,由于我们没有 Live Patch 之类的高科技,还是需要老老实实地重启:
admin@racknerd-***~$ sudo reboot
稍等 1 分钟,再次连接,Ubuntu 的软件包就是最新的了!
接下来,我们就开始代理的搭建了。其实最好是要自己手动搭建,毕竟那些 N 合一的脚本出过一些挂马、挖矿的幺蛾子丑闻,但是这里为了方便(绝对不是词元没搭建成功),我们还是采用一个词元验证过且很有名的脚本:233boy/v2ray,这样一死一大片。
首先下载脚本:
wget https://raw.githubusercontent.com/233boy/v2ray/refs/heads/master/install.sh
执行,安装:
bash install.sh
这时候脚本会直接给出一个链接,但是暂时不要使用,因为它是纯 VLESS,没有加密,没有 CDN,也没有配置我们花费 1.88 巨款买的域名来防止 IP 泄露。我们再次打开面板:
sudo v2ray change
然后输入 1
更改协议,输入 8
选择 VLESS + WS + TLS。选择 WebSocket 作为加密是因为 Cloudflare CDN 只支持 WS。
然后便又一次给出一个订阅链接。这个链接其实已经可以使用了,但是建议还是不要连接,否则特征流量太多容易被封。
我们回到 Cloudflare 将域名(可以是子域名)解析到服务器 IP,注意这时候不要开启小黄云,否则脚本无法验证域名是否能到达服务器。
再次使用 sudo v2ray change
打开修改面板,选择 3
更改域名,输入上述域名,这时候可以发现给出的订阅链接又有变化,但是依然不要使用。
再再次使用 sudo v2ray change
,我们来换个端口,考虑到大家可能会用服务器来建站,所以我们尽量不要占用 443 端口,而是使用 Cloudflare CDN 支持的端口,根据您的情况,可以修改为:2053,2087,2096 或者 8443。给出的链接依旧不要使用。
再再再回到 Cloudflare(读者:你有完没完),打开小黄云。好了,你可以使用上一步的代理链接了。
什么?您手滑把终端 clear
了?这么不小心,肯定和词元没关系。使用 sudo v2ray i
查看配置就行了。
12 月 28 日更新:如果您不小心把原来的 SSH 公私钥丢了,上述命令能让您在无法显示中文的 VNC 中直接查看订阅信息。
⚙️ 优化
到这时候我们安全的问题就基本解决了。我们的请求现在是这样的:
- 您的客户端发送请求到 Cloudflare 边缘服务器(过墙,HTTPS 加密,常规流量);
- Cloudflare 边缘服务器发现 CDN 没有缓存(那肯定的),发送请求到服务器(墙外,TLS 加密,常规流量);
- 服务器的 v2ray 接收到请求,将数据包发送回 Cloudflare 边缘服务器(墙外,TLS + WS 加密,VLESS 特征流量);
- Cloudflare 边缘服务器将您的数据发送回客户端(过墙,HTTPS + TLS + WS 加密,VLESS 特征流量)。
可以发现,我们的客户端和服务器都只与 Cloudflare 边缘服务器进行通信,本质上和您访问 Cloudflare Dashboard 没有区别。但是还有一点:您的服务器 IP 是 IDC 机房 IP,非常脏,有些流媒体服务无法使用。因此我们可以在服务器端再次部署一个 WARP 代理,使用 Cloudflare 的 IP 获得更好的纯净度。
wget https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh
接下来,运行脚本:
bash menu.sh
第一个选项选择 3
,剩余的保持默认即可。不出意外,您的服务器将可以连接 WARP 网络,获得一个(大概率)IPv6 地址。恭喜您,最后一块砖,填上了!
还是很不错的。
您现在应当可以观看 YouTube+、Disney+ 和 Netflix 非自制剧。如果您是维基人,那么很遗憾,Wikipedia 的编辑还是无法解锁,并且 MediaWiki 不知道有什么魔法,能识别两个 IP,您获得了一个双重封禁!
12 月 28 日更新:刚刚运行 v2ray 的时候不要着急启动 WARP,这将导致 Caddy 自动获取证书失败。后期如果发现没法连接,也可以回来关掉 WARP,重启 Caddy,获取成功之后再启动。
✏️ 后记
其实这篇文章到这里还没有结束。服务器管理本身就是很复杂的工作,如果您还想建站,那又是很复杂的工作。您现在想必已经可以自由访问,虽然晚高峰时段部分站点存在卡顿,但是整体还是很不错的。
最后,提醒您:外网可供您学习、娱乐,但是如果您不是隐私大佬,请不要贸然使用您的任何真实信息和国内身份注册任何服务,或者在网站上发表不当言论。词元是 OIer,外网对词元的吸引力集中在 Stack Overflow、GitHub、Google Scholar 和 Wikipedia,而您,我不知道为啥会想上外网。
⛰️ 附录:RHEL 系发行版指南
如果您是 RHEL 忠实用户、想使用 SELinux 或者就是不喜欢 Ubuntu,那么本指南的大部分内容依旧适用,有几点需要注意。
特权组名称为
wheel
而非sudo
。如果您计划禁用密码登录,请勿设置
UsePAM no
。默认启动
firewalld
,出于安全考虑,请不要按照网上的教程直接关闭,放行部分端口即可:1 2 3
$ sudo firewall-cmd --add-port=2053/tcp --permanent # 2053 改为您在一键脚本里设置的端口号 $ sudo firewall-cmd --add-port=2053/udp --permanent # 别忘了 UDP $ sudo firewall-cmd --reload # 所有未加 --permanent 的规则会失效
SELinux 会阻止 v2ray 使用 443 端口。在做其他事儿的时候也经常会干涉,硬控词元的调试时间。这玩意儿词元也玩不转,据说是 Linux 权限系统的补充,所以还是把它关掉吧:
1 2 3
$ sudo vim /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled $ sudo reboot # 必须重启
调试 SELinux 导致词元的服务下线时间比 DDoS 还长,于是就自暴自弃了 😮💨
某些额外的包没有预装,按照报错
sudo dnf provides [name]
再sudo dnf install [name]
即可。RackNerd 提供的 Rocky Linux 和 AlmaLinux 首次更新的时候由于 network-scripts 被弃用,会报错,添加
--allowerasing
参数即可。12 月 28 日更新:Rocky Linux 更新导致三四个包都出了问题,词元也不能打包票好用。建议转换至 AlmaLinux,处理起来比较简单。