Outline 是非常流行的开源 VPN 工具,适用于非专业人员自建 VPN 服务并随时随地使用。互联网上各种反审查、反嗅探工具层出不穷,本文介绍另外一个小众的 VPN 工具-vpnhood,同样包含 gui 客户端。号称“无法检测”,即便知道这是不可能的,还是简单尝试一下。Vpnhood 是 github 上的一个开源项目,自述为混合 VPN,捕获、路由所有数据包,采用 socks 进行代理连接。VpnHood 支持 TCP、UDP 和 ICMP(仅限 Ping)。在将流量封装为 https 时,为了提高性能和功耗,如果原始 TCP 流已经经过了加密,则仅对原始 TCP 流的标头 (TLS Hello) 进行加密。
规避和隐私的另一种方式!
普通用户和专家无法检测到的 VPN。VpnHood 是一种绕过高级防火墙并规避深度数据包检测的解决方案。VpnHood 完全是用 C# 从头开始创建的。
An alternative way for circumvention and privacy!
Undetectable VPN for ordinary users and experts. VpnHood is a solution to bypass Advanced Firewalls and circumvent deep packet inspection. VpnHood has been created entirely from scratch in C#.
行为审计与流量
作者认为,行为、访问内容比协议重要 1000 倍,执法者不关心你用什么协议、什么软件,关心的是你干了什么,运营商关心的是你有没有滥用计算和网络资源。无论什么工具,在超大访问流量、黑名单内的访问内容、异常的行为面前都只是一张纸,切记出了问题,和工具开发者、服务提供商是无关的。
理论上,仅从数据包分析角度来看待流量特征,vpnhood 一类的工具是不可检测的。GFW 多数情况下表现为无状态,状态检测的功能缺失由电信运营商或企业级网关弥补。足够算力支撑下的状态检测,DPI 深度数据包检测仅仅是审计的一部分,行为审计则监控、记录、分析用户的上网行为,而非数据包特征。即使近似或等同于 https 流量,行为异常也同样会触发安全警告甚至被屏蔽。普通用户经常涉及的行为异常项包括:
- 访问过滤列表中的网站、服务或应用
- 持续或突然的高带宽占用、流量出现大幅度抖动
- 网络访问超出安全阈值(时间、数量、流量,涉及 IP、SNI、域名等)
- 异常的身份验证与劫持可能性等
国内正常工作需求场景下的月均流量大约是 80GB、日均不到 3GB,如果安全阈值设置为 2 倍历史均值、5 分钟切片时间,在某个时间段 5 分钟内收发了 6.1 GB 数据,就会触发行为异常处理。这里的 80 GB 只能来自于对持证上网者的统计数据。大部分人不需要刻意记录自己的上网流量或其他行为,因为大部分人和少量持证上网者的行为特征是相同的,仅从流量和带宽需求来看,大部分人的大部分时间消耗都不是在刷剧。
因此,将自己开通的 google e2-micro 配置为代理服务器,建议使用类似 vpnhood、wstunnel 等采用标准化协议的工具,可以有效降低服务的可探测性,把精力放在“哪个协议穿墙能力强”上是完全没必要的,采用 shadowsocks 2022 的 outline 至今大多数情况下工作良好。
Vpnhood部署
Vpnhood 服务端支持 windows、linux,客户端应用支持 windows、linux 和 android。
服务端部署
本文以 google e2-micro 为例,架构为 x64,操作系统为 debian 12。Vpnhood 默认采用自身的 Access Server 帮助生成、分发服务端访问密钥(access key),建议自行生成、分发。以下命令分别安装 vpnhood 服务端并设置开机自启、生成访问密钥(access key)、启动 vpnhood 服务。
bash <( wget -qO- https://github.com/vpnhood/VpnHood/releases/latest/download/VpnHoodServer-linux-x64.sh) /opt/VpnHoodServer/vhserver gen systemctl start VpnHoodServer
要查看 vpnhood 服务状态,可使用 systemctl 命令。
systemctl status VpnHoodServer.service
Vpnhood 也提供了 docker 部署方式,可以使用以下命令拉取镜像、加载容器。使用 docker 方式部署也可自行生成服务端访问密钥,容器映射的宿主机配置文件目录为 /opt/VpnHoodServer。
bash <( wget -qO- https://github.com/vpnhood/VpnHood/releases/latest/download/VpnHoodServer.docker.sh #docker run -v "/opt/VpnHoodServer/storage:/app/storage" "vpnhood/vpnhoodserver" gen
客户端安装与使用
Vpnhood 提供了 windows、linux 和 android 客户端,可在项目仓库release页面下载。
客户端安装之后,双击打开。点击服务器,将服务端生成的密钥(access key)添加进来即可。
单栈配置
Vpnhood 默认启用 IPv4/6 双栈,这会造成一些小麻烦。类似长期白嫖的 google e2-micro,只提供 IPv4 堆栈支持,很多免费或便宜的 vps 仅有 IPv6 堆栈。这种情况下,vpnhood 服务端存在的 bug 会导致无法正常启动。可通过添加、编辑服务端配置文件 /opt/VpnHoodServer/storage/appsettings.json 加以解决。
#具体路径可能不同,自行修改适配 cd /opt/VpnHoodServer/storage nano appsettings.json systemctl restart VpnHoodServer #/opt/VpnHoodServer/vhserver gen #生成新的 access key
单 IPv4 堆栈 vps 的配置文件完整参考如下:
{ "HttpAccessManager": null, "FileAccessManager": { "ServerTokenUrl": null, "HostPort": null, "IsValidHostName": false, "PublicEndPoints": null, "TcpEndPoints": [ "0.0.0.0:443" ], "DnsServers": [ "1.1.1.1", "[2606:4700:4700::1111]" ], "AddListenerIpsToNetwork": null, "SslCertificatesPassword": null, "ReplyAccessKey": true, "Tracking": { "TrackClientIp": false, "TrackLocalPort": false, "TrackDestinationIp": false, "TrackDestinationPort": false }, "Session": { "Timeout": 600, "UdpTimeout": 60, "TcpTimeout": 900, "IcmpTimeout": 30, "MaxDatagramChannelCount": 8, "TcpBufferSize": 8192 }, "NetFilter": { "IncludeLocalNetwork": false, "PacketCaptureIncludeIpRanges":[ "0.0.0.0/0"], "PacketCaptureExcludeIpRanges": [], "IncludeIpRanges": ["0.0.0.0/0"], "ExcludeIpRanges": [] } }, "IsDiagnoseMode": false }
如果是单 IPv6 堆栈主机,将参考内容中所有 IPv4 CIDR 替换为 IPv6,并注意以下几点:
- 防火墙放行相应端口,如示例的 TCP 443
- 使用小于或等于 1024 的端口,应为 vpnhood 提供 root 权限
- TCP、UDP 端点 IP 需保持一致
- 修改配置后建议重新生成服务器密钥
Vpnhood 还为开发者提供了广告接口、支付接口和 MAUI 支持,为不顾虑协议“单薄”的机场运营着,提供了更接近 vpn 的可能。Outline、vpnhood 等都是开源的 vpn 工具,从功能、稳定性、易用性等方面来看,vpnhood 还需要不断迭代才可能逐步流行。
更多精彩,敬请关注老E的博客!
文章评论