This repository has been archived on 2023-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
blog/_posts/2023-05-22-cloudfare_domain.md
2023-06-03 15:58:09 +08:00

183 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)