简介
会做这个尝试是因为最近看到一个Youtube视频,大概讲述了如何在网络上实现全局匿名。然后又看到了一篇说明如何在暗网架设网站的文章,于是冒出了这个想法。
能不能在树莓派上面直接架设一个Socks服务器(理论上按照Tor路由的原理来说任何代理都可以),然后用洋葱路由接入到洋葱网络里面。这样其实也变相实现了内网穿透。最后把树莓派直接丢到任何地方都可以架设服务器进行代理。
这篇文章使用了Gost进行架设,当然你也可以使用v2ray进行架设,原理是通用的。
优势劣势分析
比起直接在互联网上面搭建服务,在Tor上面直接架设服务有一些很明显的好处和坏处。
优势
- 高度匿名服务器:在互联网上服务器想要匿名身份的难度远远大于客户端,这是因为服务器必须要暴露高可控的IP(公网可路由、可控的防火墙策略)才能让他人访问,客户端可以通过多重手段隐藏自己的IP,访问互联网网站也不需要太高的防火墙权限。而高可控的公网IP一般只能由ISP直接提供,ISP又会遭受来自政府和媒体的审查,固然会对IP购买方提出很多要求。
在洋葱网络上的服务器会受到Tor的三重代理保护,再加上访客也会经由三重代理才能连接到互联网和洋葱网络,即任意访客和服务器之间都会有六个Tor节点,提升溯源的难度,实现双方的高度匿名身份。 - 不需要公网IP:洋葱网络是使用分布式散列表记录服务器的公钥和描述符,使用私钥应答验证服务器真实性的。服务器接入洋葱网络后,客户端便可以使用公钥路由到服务器,所以不需要公网IP,也不需要购买服务器,甚至可以使用任何接入互联网的网络架设服务。
劣势
- 速度:如同优势1所提到的,每访问一个洋葱网络上的网站都需要流经分布在全世界的6个Tor节点,这样会大大降低网络的稳定性,连接速度会受到很大影响。
- 连通性与审查:洋葱网络被很多国家和地区所限制,也有很多国家和地区设立了洋葱网络诱骗节点进行审查。使用Tor或许会提升被执法机构关注的机会。
架设过程
1. 安装Tor服务端
主流Linux发行版都收录了Tor,例如Debian即可直接使用apt安装。
apt install tor
systemctl enable tor --now #开机自启Tor
2. 配置Tor服务端
Tor即可以作为客户端,也可以作为中继,也可以作为服务器使用。如果Tor作为服务器运行,那么这个Tor实例称为Onion Service.
默认情况下Tor仅作为客户端运行,监听本地9050端口。修改配置文件可以启用Tor不同功能,只需要在/etc/tor/torrc
中添加以下两行,即可让Tor作为Onion Service运行。
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 11154 127.0.0.1:10000
第一行的目录用于保存Onion Service的私钥文件private_key
和域名文件hostname
,私钥等于onion地址的控制权限,与区块链的私钥概念相同。 在洋葱网络上域名即为公钥,其他人使用公钥访问服务,服务器使用私钥验证自己的真确性。
第二行的HiddenServicePort是反向代理目标地址。HiddenServicePort PortA AddressB
表示虚拟端口PortA
,并把PortA
的流量转发到AddressB
。
以上的HiddenServicePort 80 127.0.0.1:10000
意思即为打开洋葱服务的80端口,将洋葱服务的80端口流量转发到127.0.0.1:10000。
需要注意的是,洋葱服务只支持TCP协议,所以通过暗网是无法直接提供UDP服务的。
配置完成后重启Tor服务,即可开启Onion Service。
systemctl restart tor
cat /var/lib/tor/hidden_service/hostname #获取洋葱地址
3. 搭建代理服务端
为了方便,使用GOST搭建Socks服务端。先在Linux发行版中一键安装GOST。
wget -q -O - https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz | gzip -dc > /usr/local/bin/gost && chmod +x /usr/local/bin/gost
安装Systemd服务。
cat > /etc/systemd/system/gost.service << EOF
[Unit]
Description=Gost Proxy
After=network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/gost -C /etc/gost/config.json
Restart=always
[Install]
WantedBy=multi-user.target
EOF
创建配置文件文件夹以及写入配置文件
mkdir /etc/gost
cat > /etc/gost/config.json << EOF
{
"Debug": true,
"Retries": 0,
"ServeNodes": [
"username:password@127.0.0.1:10000"
]
}
EOF
启动服务与开机自动启动。
systemctl enable gost --now
4.配置客户端Tor与GOST
客户端方面的Tor配置相对较为简单,直接启动Tor之后Tor会默认开启端口为9050的Socks代理,只需要通过Socks5进行连接即可。
客户端的GOST也相同,执行以下命令即可
gost -L=:8080 -F=socks5://127.0.0.1:9050 -F=username:password@[你的洋葱地址.onion]:11154
这样便在8080端口开启了通往洋葱网络上服务节点的代理。
结语
这个实现方案如果部署在手机上面,可以直接实现手机作为完全匿名不可查找的网络代理节点。部署在树莓派上面的话可以实现安全的远程黑入网关,或者是别的匿名用途。
洋葱域名只要私钥是确定的,域名是不会有所改变的。所以即便公网IP如何变动,只要接入了互联网,访客都是可以连接到onion service上的。某种意义上可能比公网IP还要更加稳定。