在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服务器,并仅允许80端口接受来自本机的访问,此处用rocky linux9加nginx为例。

另:服务器肯定要用境外IP的,Tor的节点必然都被GFW拉黑,境内IP的机器就不要想了..

安装tor服务

yum install tor

vim /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]# ll
total 16
drwx------ 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.onion

tor服务启动的过程中,会将public_key公钥等信息注册到tor中,用于标识自己是哪个onion域名对应的网站,打开Tor浏览器,访问kswxwejpmr3tpi4jhro5o5gzwvawf7u3wyjqzek6264m5jtsinezrdyd.onion,即可通过tor网络访问到我们的网站页面,是个nginx刚装好的默认欢迎页面。


虽然tor网络本身加密,但是为了更加安全,也可以将请求改为https实现tor+https双重保险,比如BBC的onion站就是https的

首先vim /etc/tor/torrc改为通过https访问域名并转发到nginx的443,tor浏览器访问域名时会自动加上https

HiddenServicePort 443 127.0.0.1:443

nginx配置和正常互联网站设置类似,除了80跳转到443的路由可以省略,其他都差不多,onion域名过长可能导致nginx启动报错,http节点内新增server_names_hash_bucket_size配置即可

onion域名现在也可以向CA机构申请ssl证书了,但是能为onion域名签发证书的平台不多,免费版的onion证书目前也没有找到,不过因为tor本身加密因此tor浏览器对自签证书还是比较宽容,可以自己签发一个证书。

http {
    #...
    server_names_hash_bucket_size 256;

    server {
        listen       127.0.0.1:443 ssl;
        server_name  www.nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion;
        ssl_certificate /opt/cert.pem;
        ssl_certificate_key /opt/key.pem;
        root         /opt/dist;

        #...
    }


    server {

        listen 127.0.0.1:443 ssl default_server;

        ssl_certificate /opt/cert.pem;
        ssl_certificate_key /opt/key.pem;

        server_name nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion;

        return 301 https://www.nanazolamwaqczux2bfjnptwz7fudrv63e5nw3tqr77pevfgk23zx4ad.onion$request_uri;
    }


}

3.自定义.onion域名

github开源项目mkp224o可以用于计算生成暗网“域名”

切换到/opt目录,先拉取代码

git clone  https://github.com/cathugger/mkp224o.git

编译源码为命令

cd ./mkp224o
yum install -y autoconf gcc gcc-c++ make autoconf automake libtool libsodium-devel
./autogen.sh 
./configure
make

编译好后会生成一个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/ nana
cd /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_key
chmod 600 ./hs_ed25519_public_key
chmod 600 ./hostname

vim /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

4.Tor绝对安全吗

很多人都认为tor网络是绝对安全的,理由是技术上的实现天衣无缝,且在暗网活动的人被抓的很少,就连棱镜门爆料者斯诺登都建议使用tor上网,但是笔者认为没有绝对的安全,虽然建设tor网络的代码都是开源的,但是tor目前由美国政府实控,否按照源码部署建设tor网络不是明面可见的,甚至很多人怀疑“丝绸之路”站长落网就是tor网络最大赞助商美国政府监听了tor导致的,近年来,也发生过一些国家的公权力部门和黑客通过捐献蜜罐节点给Tor用于监听暗网活动或者盗取未加密传输内容中的比特币的事件,虽然tor在不断努力清除蜜罐节点,但是也无法保证绝对安全,除这些外,网站自身有漏洞的话tor也无能为力了,比如代码编写不当导致遭受越级提权、远程代码执行、密码爆破等攻击,都会导致网站真实IP泄露甚至数据泄露,严重的话可能服务器都会沦为肉鸡。

因此一句话总结就是:技术是人发明的,自然受到人性的影响,不可避免的受到人的控制,技术实现也不可能真的天衣无缝,因此Tor本身并不真的安全,Tor的安全与网站自身的安全也完全是两回事。

参考

  1. https://www.torproject.org/zh-CN/about/history/
  2. https://www.youtube.com/watch?v=24JK_b-2V4A&t=530s
  3. https://www.ruanyifeng.com/blog/2025/08/weekly-issue-361.html

"如果文章对您有帮助,可以请作者喝杯咖啡吗?"

微信二维码

微信支付

支付宝二维码

支付宝


在Tor上搭建一个.onion网站
https://blog.liuzijian.com/post/2026/05/07/onion-site-on-tor/
作者
Liu Zijian
发布于
2026年5月7日
许可协议