--- layout : post title : "Free domain & Cloudfare" subtitle : "免费的不一定是最贵的~" date : 2023-05-22 10:57:56 author : "Manford Fan" catalog : false header-img : "img/post-bg-universe.jpg" tags : - Cloudfare - EU.ORG - Domain --- 最近又有时间探索互联网的奥秘了,发现了一个比较好玩的东西——免费域名。俗话说,免费的也是最贵的,是有一定道理,但是这次,我要把白嫖贯彻到底! ## 一、Free Domain 19年的时候,在阿里云购买了`rustle.cc`这个域名,当时花了380大洋,10年期,算是比较便宜了,而且还是我自己喜欢的域名,上周末闲来无事,突然有了域名到期焦虑,于是在互联网上寻找免费域名服务,一开始找到的都是一些免费1年的域名,而且有各种限制,这不是我想要的;再后来找到了[Freenom](https://www.freenom.com/),欣喜之后,发现如下新闻,详细可以查阅下[Meta is suing Freenom, cybercriminals' favorite domain registrar](https://www.techspot.com/news/97856-meta-suing-freenom-cybercriminals-favorite-domain-registrar.html)。 > 2023年3月3日,Meta(即Facebook)在美国加利福尼亚州法院起诉Freenom,指控Freenom存在域名抢注和商标侵权行为,同时Meta向法院申请要求Freenom提供二十多名注册者的身份信息。直到被起诉后Freenom发个简短的说明表示由于技术原因新注册申请暂停,当前正在研究解决方案,希望尽快恢复运营。 所以Freenom这条路又被堵死了,据说是可以申请免费域名一年,然后提前14天免费续约,听起来其实也可以。最后的最后在YouTube上找到了一个视频,介绍了[eu.org](https://nic.eu.org/)这个域名,瞬间心情又被拉起来了。为表敬意,将贡献出这个域名的初衷附在如下: > **"Companies have voted with their feet [on the issue of domains], they want to have domain names that are international or at least country neutral. The same freedom should apply to individuals; all individuals should be able to have and own their own domain names".** #### Step 1. 注册账号 访问[https://nic.eu.org/](https://nic.eu.org/)页面,点击`Sign-in or sign-up here!`中的`here`超链接进行注册,使用[地址生成器](https://www.meiguodizhi.com/)工具,获取一个英国人的信息,最好是年龄合适的信息,比较容易通过。 ![cf_free_domain](/img/posts/cf_free_domain.png 'cf_free_domain') 注册好了之后,会忘注册邮箱发一封注册信息邮件,其中最重要的信息是用户名信息,然后根据之前设定的密码就可以登录这个网站进行第二步域名申请的工作。 #### Step 2. 申请域名 全新的账号登录进去是空白的页面,没有任何域名信息,需要申请通过之后才会显示在这一页。 1. 点击`New Domain`,跳转到域名注册页面 2. 需要注意的地方有两个,`Complete domain name`和`Name servers` 3. 配置`Complete domain name`,这里需要填写你想要申请的完整域名,包括`eu.org`后缀 4. `Name servers`的配置,这里选择第一个单选框`server names`,然后在名称服务器1和2填写相应的解析DNS服务器 ![cf_free_domain_app](/img/posts/cf_free_domain_app.png 'cf_free_domain_app') 目前第四部步中需要填写的服务器可以是腾讯阿里的DNS服务器,也可以是国外的某些DNS提供商的,这里使用的是业界良心[Cloudfare](https://www.cloudflare.com/zh-cn/)的解析服务器,可以自己注册一个账号,并添加站点,添加完成无需解析生效,就能获得DNS解析服务地址。 > 可以在[Open domains and policies](https://nic.eu.org/opendomains.html)页面查看可以注册的域名形式。 #### Step 3. 等待申请通过 根据网络上之前网友申请的经验来看,通过申请的时间通常会比较久,一般是三周甚至两个月,针对我自己申请的情况,是上周日上午11点53分申请的,下午18点20分就收到了通过的邮件提示,算是一个surprise吧。根据跟人经验,邮箱使用gmail等国外邮箱,注册地点选择美国或者英国,申请人的年龄在20-30之间,这类申请比较容易通过。 ![cf_free_domain_ok](/img/posts/cf_free_domain_ok.png 'cf_free_domain_ok') ## 二、设置Cloudfare解析 Cloudflare是一家云安全公司,成立于2009年,总部位于美国旧金山。Cloudflare提供一系列云安全和云储存服务,旨在帮助客户保护其网站和应用程序免受拒绝服务攻击、恶意软件和其他网络安全威胁。此外,Cloudflare还提供**免费CDN(内容分发网络)服务**,可以加速网站和应用程序的加载速度,并降低网络延迟和带宽消耗。Cloudflare的网络遍布全球超过200个城市,可以分布式提供这些服务,并保护客户的在线业务免受网络攻击。Cloudflare已经成为许多互联网公司、企业和政府机构的首选云安全和CDN服务提供商。 #### 1. 注册账号 Cloudfare的注册相当简单,不需要绑定信用卡,只需要一个邮箱就可以了,这里就不详细记录。 #### 2. 添加并配置域名 登录后,Cloudfare平台上有个添加站点的按钮,所谓的添加站点,就是将已经申请好的免费域名添加到平台,可以根据如下步骤来操作。 > **添加站点** ![cf_add_domain](/img/posts/cf_add_domain.png 'cf_add_domain') > **选择免费计划** ![cf_choose_free](/img/posts/cf_choose_free.png 'cf_choose_free') > **快速扫描DNS记录并确认** ![cf_scan_dns](/img/posts/cf_scan_dns.png 'cf_scan_dns') > **继续** ![cf_go_on](/img/posts/cf_go_on.png 'cf_go_on') > **修改服务器名称** ![cf_change_server_name](/img/posts/cf_change_server_name.png 'cf_change_server_name') > **验证通过** ![cf_varify_done](/img/posts/cf_varify_done.png 'cf_varify_done') 全部流程走完之后就可以在Cloudfare上配置域名解析了,进而访问自己的站点。 ## 三、证书申请 有了域名,部署上线内容是一部分,重要是的要配置好证书,虽说目前主流都会用证书加密网站,获得证书的门槛也极大地降低了,有很多免费提供证书的机构,实际做起来,发现并没有那么顺利,最后还是选择了[acme.sh](https://github.com/acmesh-official/acme.sh)这个工具,就像之前的[FRP&ACME——内网穿透+证书签发](https://blog.rustle.cc/2022/05/28/frp_and_acme/)这篇博文所记录的,acme.sh目前已经支持了绝大多数主流DNS厂商的API调用,只要提供相应的信息,该工具可以自动帮助申请签发域名证书,并自动续期(每60天会renew一次)。 针对[Cloudfare平台的域名使用acme.sh工具签发证书](https://github.com/acmesh-official/acme.sh/wiki/dnsapi#1-cloudflare-option),需要导入相关的环境变量,Cloudfare提供两种方案,一种是全局权限的API Key,另一种是针对域名粒度的API Token调用,从安全的角度建议是后者,从方便的角度,大部分人使用的是前者,可参考文档,选择合适的方式,配置好之后可以使用如下命令做证书签发: ```bash acme.sh --issue -d rustle.eu.org -d '*.rustle.eu.org' --dns dns_cf ``` ## 四、相关NG配置 Web服务器我是用的是Nginx,之前使用单域名的时候,所有站点都使用同一张泛域名证书,所以几十个站点配置都在同一个配置文件中也没有关系。现在有多个域名,要考虑配置文件的格式问题了,另外就是,如果某个**内网服务**使用了非80/443端口,使用FRP内网透传的时候可以做一个代理转发,进而使访问域名的时候不体现端口信息,那如果是**外网服务**使用的是非80/443端口呢,比如FRP的管理员面板? #### 1. 多证书配置 针对多域名证书配置,最好的办法是文件隔离开,也即每一个主域名一个配置文件,这样可以比较清晰的做配置,这里说的是主域名而不是域名,意思是一个配置文件中包含很多子域名的配置,也可以将这些子域名的配置各分配一个文件,只不过当自域名数量太多的时候会不放面统一管理;另一种方案就是把所有主域名域名放置在通过一个配置文件,也即大杂烩,将各自证书配置在对应的Server块中,不建议后者。 > **nginx.conf 内容** ```nginx user root; worker_processes 4; worker_rlimit_nofile 4096; worker_cpu_affinity 1000 0100 0010 0001; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; multi_accept on; worker_connections 2048; } http { include mime.types; default_type application/octet-stream server_tokens off; more_set_headers "Server: rustle"; include /usr/local/nginx/conf/domain_confs/*.conf; } ``` > **domain_confs内包含的配置文件内容(其一)** ```nginx server { server_name frp.erratic.eu.org; listen [::]:443 ssl http2; listen 443 ssl http2; charset utf-8; access_log logs/frp-erratic.access.log main; ssl_certificate /opt/configs/certs/erratic.eu.org.cer; ssl_certificate_key /opt/configs/certs/erratic.eu.org.key; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header Cache-Control no-cache; proxy_pass http://1.1.1.1:27999; client_max_body_size 4000M; } } ``` #### 2. FRPS主机端口访问 以搭建的FRP服务为例,该服务支持一个管理员面板,配置的时候要求指定用户名,密码以及端口,并使用`IP:PORT`的形式,这样很不优雅,而且不容易记忆。所以新增加了一个A记录的`frp.rustle.cc`域名,但访问还是需要带上端口,除非使用的端口是80/443,可是搭建的FRP服务已经将80/443端口占用了...... ![cf_visit_flow](/img/posts/cf_visit_flow.png 'cf_visit_flow') 如上是用户访问内网服务的一个简图,根据图示,FRP服务的管理面板也可以类似配置达到域名访问的目的。 ## 参考文档 - [Freenom - 人人都熟悉的名字](https://www.freenom.com/) - [EU.org, free domain names since 1996](https://nic.eu.org/) - [ACME API调用签发证书](https://github.com/acmesh-official/acme.sh#8-automatic-dns-api-integration)