最近某云服务厂商的域名发生了一次比较大的故障,所有域名解析都解析到了其他地方,导致服务不可用。这引发了我对传统域名访问服务的一次思考,如果中心化的域名解析可能会存在不可预见的问题,那么去中心化的方案是否是另一种方式呢?

在区块链中的实现页面有以下几个优势:

  1. 去中心化,所有的变更都需要基于去中心化的共识来实现;
  2. 无需证书,由于区块链本身就是基于加密的,因此可以节省证书的配置;

之前见过 TON 上的域名方案,当时觉得实用性不明确,传统的服务访问已经很成熟了,但是现在看来或许真的会有应用场景,因此准备重新学习一下。

在区块链中创建网站

我们将在这里尝试将一个网站部署在 TON 中。

区块链里的域名

区块链中的域名和现实世界中的域名概念其实是类似的,都是对某一复杂不易记的地址的别名,在区块链中是用户的地址,在 WEB2 中是服务的 IP 地址。

购买域名

以 TON 为例,域名的官方购买地址是 https://dns.ton.org/,以 TON 来计价。和 WEB2 一样,字符越短的域名价格越贵,价格在 1 - 100 TON 不等。

如果该域名没有被任何人拥有,那么你就可以以低价进行出价,并且在出价之后进入倒计时,在倒计时内所有人都可以竞价,直到倒计时结束。在拍的域名之后,域名会以 NFT 的方式存到用户的钱包里。域名 NFT 可以进行交易。域名的有效时间是 1 年,到期之后会被收回。

总结一下就是,购买域名可以通过在官网进行拍卖获得,也可以从别的用户那边交易得到。

准备前端页面

在这一步我们需要准备一个前端页面来作为展示。为了简单,我们只需要一个 html 文件加上 nginx 来将我们的页面暴露出去,当然,我们还需要一台云服务器来运行我们的页面。

绑定页面到 .ton

在拥有一个 .ton 域名之后,可以在 TON 的 DNS 官网绑定你的 ANDL 地址。当然你也可以使用 TON 提供的 T 链接工具,可以按照官网的介绍去绑定你的页面。

在绑定完成之后,你还需要在服务器上启动一个监听的端口,用于监听 http 请求并转发成 udp。我们可以使用官方提供的 rldp-http-proxy 工具,输入下面的命令就可以启动了:

1
rldp-http-proxy/rldp-http-proxy -p 8080 -c 3333 -C global.config.json

其中,8080是将在本地主机上监听传入 HTTP 查询的 TCP 端口,而3333是将用于所有出站和入站 RLDP 和 ADNL 活动的 UDP 端口(即通过 TON 网络连接到 TON 网站)。global.config.json是 TON 全局配置的文件名,可以在这里下载

访问 .ton 域名

想要直接在浏览器中敲 .ton 的域名去访问网站是没有效果的,因为浏览器不知道要将这个域名解析到哪里。

请求 .ton 的过程

在请求 .ton 域名的时候,首先会去链上查询对应 ANDL 地址,该地址可以简单理解为 WEB2 中的 IP 地址,在你部署网站的时候,会自动生成。这次的查询过程也可以类比为 DNS 查询过程。

之后根据 ANDL 的地址,请求会转发到你对应的机器上,这时候可以指定对应返回的页面。整体的过程和 WEB2 相当类似,主要区别在于地址和域名映射的查询方式不太一样。

通过代理访问页面

最推荐的方式使用官网提供的代理工具 Tonutils Reverse Proxy。下载安装启动之后,会启动一个 8080 端口用于代理,之后就可以去访问 .ton 的域名了。

可以看到我们能够访问 .ton 的域名了。

使用总结

目前使用下来,遇到了以下几个问题:

  1. 对网站运行的环境有要求。你的系统需要支持 glibc 2.34 版本以上,在阿里云的 centos 7 里面是不支持的。
  2. 文档不是很清晰。有可能是因为这个 TON 运行网站的需求不是很多,所以文档写的不是很好,需要自己摸索。中文的话更新不及时,落后于英文版本的内容。
  3. 访问的速度较慢。访问的速度会落后于传统的网站。当然这里面涉及到的因素会很多,只能说以后的进步空间很大。
  4. 没有被钱包支持。官方提供了一个简单的内嵌浏览器页面,你可以选择不安装代理就可以访问。但是目前这个网站被所有主流的钱包都认定为了钓鱼网站 o.0。

总而言之,体验其实一般般,后面还有很多可以提升改进的地方,但是这个方向我觉得挺好挺创新的,尝试一下也是不错的。