在Tor上搭建一个.onion网站
郑重声明与警告
本文旨在科普Tor网络的技术原理与搭建方法,仅供学术研究、个人兴趣及保护合法隐私之用。
请务必知悉:
利用Tor网络从事任何违法违规活动——包括但不限于传播违法信息、侵犯他人权益、进行非法交易等——均属严重违法行为,与本文作者及本博客无关,且将面临严厉的法律制裁。
技术无罪,但使用者有责。请严格遵守您所在地区的法律法规,切勿触碰法律红线。
本文未完待续
1.关于Tor和.onion
Tor这个词就是洋葱路由(The Onion Router)的首字母缩写,洋葱路由的概念始于1990年代中期,由美国海军研究实验室最早构想出tor的原型,tor的目标在于,找到一种尽可能隐私的方式来使用互联网,其想法是通过多个服务器转发流量并在每一步进行加密,数据一层层加密包装像洋葱一样,故名洋葱路由。
tor将这些服务器分为三类:守卫节点guard,中继节点relay和出口节点exit,这些节点服务器由个人或组织捐献给Tor
![]()
通过tor访问网站需要依靠tor代理,tor代理发起访问前会向三类节点各选一台,获得三个密钥,每个节点可以用自己签发的密钥对称加解密,后tor代理依次将数据按照从里到外exit=>relay=>guard的顺序,用各自密钥进行加密,在外面形成三个加密层,然后发送给guard,guard解密后发送给relay,relay解密后再发给exit,数据在三个节点间依次传递,其中:
- exit节点不知道谁在访问,只知道访问目标
- relay节点既不知道访问目标也不知道谁在访问
- guard节点知道谁在访问不知道访问目标
这样就实现了难以追踪溯源的访问
![]()
通过Tor访问网站可以实现匿名访问,但是普通网站对于外界本身就是透明的,网站被查同样可能暴漏访客信息,或者网站出现某些信息会导致被直接查抄或封锁,因此在Tor上可以使用洋葱服务来实现对网站和访客双向的匿名保护,洋葱服务将网站挡在自己后面,防止网站暴露真实的IP/域名等信息,并只能通过tor网络访问到,同时也无法通过一般搜索引擎搜索到,洋葱服务使用不是实名注册而是通过计算得到一种特殊的.onion域名,这种域名由tor代理向tor进行网站服务器的对应查找实现访问,而不是传统的DNS解析出IP再去访问IP。
洋葱服务因为其双向都不受追踪的特点,成为一些非法网站的温床,故onion又被叫做所谓的暗网,但是作为技术Tor和onion本身是中立的,并不是为这些非法网站而生,而且Tor上面也不像某些营销号说的那样全是非法网站,相反大多数Tor上面的网站都是合法的,很多的表网也有Tor的入口,甚至来自大型公司或组织,例如:
- BBC
bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd.onion - ProtonMail
protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion - DuckDuckGo
duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion
通过Tor访问onion网站,一般都会用到洋葱浏览器(Tor Browser),当然也可以普通浏览器加上Tor代理实现访问,有些互联网审查地区还需要配合Tor网桥实现接入,使用洋葱浏览器等不是本文重点,也没有技术含量,不再赘述。
2.发布一个.onion网站
很多人觉得在Tor上建站更加复杂,实则相反,比起表网需要购买域名,证书,公网服务器,这些东西onion网站都不需要,因为onion域名不是申请的,而是计算的,tor网络本身就加密,因此为防止被监听的话通常不需要https,至于服务器,实际上,从传输层的角度来看,tor节点不会主动访问onion网站,而是onion网站服务器部署的tor服务不断主动从tor获取请求转发给本地的http服务,所以不需公网服务器,一台能正常联网的计算机理论上就能做onion网站的服务器。
为了安全,做onion网站的服务器反而应该打开防火墙阻断一切连接传入,防止暴漏
前置准备:需要一台服务器,先将网站发布到nginx等web服务器,并仅允许nginx接受来自本机的访问,此处用rocky linux9加nginx为例。
另:服务器肯定要用境外IP的,Tor的节点必然都被GFW拉黑,境内IP的机器就不要想了..
安装tor服务
yum install torvim /etc/tor/torrc修改tor默认配置,打开这两行前的注释,使用默认的/var/lib/tor/hidden_service/域名和密钥路径,并将请求转发到127.0.0.1:80的nginx
HiddenServiceDir /var/lib/tor/hidden_service/HiddenServicePort 80 127.0.0.1:80打开tor服务
systemctl start tor不指定域名的话,tor服务会为我们自动生成,切换到/var/lib/tor/hidden_service/目录,可以看到tor为我们自动生成的域名和一些密钥信息,hostname文件中的就是生成的默认域名
[root@VM-0-3-rockylinux ~]# cd /var/lib/tor/hidden_service/[root@VM-0-3-rockylinux hidden_service]# lltotal 16drwx------ 2 toranon toranon 4096 May 7 13:08 authorized_clients-rw------- 1 toranon toranon 63 May 7 13:08 hostname-rw------- 1 toranon toranon 64 May 7 13:08 hs_ed25519_public_key-rw------- 1 toranon toranon 96 May 7 13:08 hs_ed25519_secret_key[root@VM-0-3-rockylinux hidden_service]# cat hostname kswxwejpmr3tpi4jhro5o5gzwvawf7u3wyjqzek6264m5jtsinezrdyd.oniontor服务启动的过程中,会将public_key公钥等信息注册到tor中,用于标识自己是哪个onion域名对应的网站,打开Tor浏览器,访问kswxwejpmr3tpi4jhro5o5gzwvawf7u3wyjqzek6264m5jtsinezrdyd.onion,即可通过tor网络访问到我们的网站页面,是个nginx刚装好的默认欢迎页面。
![]()
3.自定义.onion域名
github开源项目mkp224o可以用于计算生成暗网“域名”
切换到/opt目录,先拉取代码
git clone https://github.com/cathugger/mkp224o.git编译源码为命令
cd ./mkp224oyum install -y autoconf gcc gcc-c++ make autoconf automake libtool libsodium-devel./autogen.sh ./configuremake编译好后会生成一个mkp224o命令在当前路径,执行mkp224o -n 1 -d /opt/nana/ nana开始计算,计算完成后,会在/opt/nana/下生成一个开头是nana的onion域名信息的目录:/opt/nana/nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion/,目录的名字就是生成的域名,和里面hostname文件的内容是一样的,不过,为了防止层级过深,将这个文件夹下的所有内容全部转移到它的上一级中
自定义的前缀越长,计算时间越久,9位的自定义前缀可能都需要数月数年,因此要酌情选择,计算后生成的secret_key文件是私钥文件,一定不要泄露,否则相当于失去这个域名的控制权
./mkp224o -n 1 -d /opt/nana/ nanacd /opt/nana/nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion/mv ./* ../rm -fr /opt/nana/nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion/按照tor的要求,将nana目录本身和转移出来的几个密钥和域名文件设置权限
cd /opt/nana/chown -R toranon:toranon ./chmod 700 ./chmod 600 ./hs_ed25519_secret_keychmod 600 ./hs_ed25519_public_keychmod 600 ./hostnamevim /etc/tor/torrc修改tor配置HiddenServiceDir为/opt/nana/
HiddenServiceDir /opt/nana/HiddenServicePort 80 127.0.0.1:80再将默认的nginx页面换成Claude Code + DeepSeek生成的炫酷效果页面,重启tor服务,用新的域名访问即可
systemctl restart tor![]()