用CNAME记录解决多端口服务访问

我们可能需要部署多个服务,特别是在一些条件限制下,只能用域名后跟端口号来作为服务的入口,如果购买多个域名费用也不少,而且维护起来非常繁琐,其实比较好的是在二级域名下配置多个子域名,这样一个端口就可以接入多个服务,避免一堆端口,怎么也记不住。

子域名可以用A记录,也可以用CNAME记录。A记录指向IP地址,所以需要针对每个地址配置DDNS,这样要配置很多的动态解释,而且有些客户端很不好,不容易连接成功,有些甚至对一个DDNS服务商限制多个动态解释,如群晖。而CNAME是指向域名,只要被指向的域名不变,永远能保证CNAME记录解释到正确的IP,不用进行解释记录的动态更新。

这样利用已有的域名和反向代理,不做DDNS和泛解释,一次性使用多个三级域名代替原来的多端口连接,简单方便且稳定。

一、申请域名

注册域名服务商,申请购买二级域名,如 xxx.com

申请方法网络上很多,有些还比较便宜

二、注册域名解释服务商

在网络找一家比较靠谱的免费域名解释服务商,完成注册,并添加第一步注册的域名。查找到该服务商的域名解释服务器地址,并复制下来。

三、设置域名服务器

登录购买域名的服务商,在相关设置页面,设置Name Server为解释服务商的域名解释服务器地址,将xxx.com域名的解释服务指向域名解释服务商。

以上设置有一个生效时间,有的甚至需要24小时,可能需要等待。

四、在域名解释服务商设置CNAME记录

进入服务商的DNS设置页面,添加CNAME解释,域名如aa.xxx.com bb.xxx.com cc.xxx.com等。

Name填以上aa等,将Hostname填写为你已有的域名,TTL改为600秒,提交。

五、验证以上三级域名的解释

在任意浏览器输入以上aa.xxx.com:1234 bb.xxx.com:1234 cc.xxx.com:1234等地址,应该能正确访问并指向同一个服务。

六、为以上三级域名设置反向代理,将域名指向不同的服务

反向代理的设置需要修改服务器上的网络门户,网络上有大量的教程,通过设置以后,以相同的端口号访问以上不同的域名,将进入不同的服务。

七、为以上域名申请免费SSL证书

用以上域名直接访问,浏览器会提示不安全,因为此时用的是http访问,而浏览器认可的安全访问需要经过认证的https访问。

现在证书的申请可以用acme标准的客户端进行连接,并自动续期,客户端有各证书机构自己开发的,也有第三方开发,第三方客户端有的可以适应多个机构的申请。

1、准备一个linux环境,安装必要的依赖

apt install cron -y && apt install socat -y && apt-get install curl -y

2、下载并安装一个第三方客户端

curl https://get.acme.sh | sh

3、向环境变量中加入申请证书需要的ID和密码

export ID=””
export Secret=””

以上的ID和密码,是以API方式进行域名服务器的登录,用以上方式登录后才能在证书申请中获得DNS的认证,每个DNS解释服务商的ID和密码都不一样,可以在服务商的文档中找到或向客服咨询。

4、申请免费的SSL证书

~/.acme.sh/acme.sh –issue –dns dns_ali -d aa.xxx.com -d bb.xxx.com -d cc.xxx.com –server letsencrypt

–dns dns_ali表示域名解释服务商是阿里,每个服务商的简称不一样,可以在相关文档中查找。–server letsencrypt表示向letsencrypt申请免费的证书,该第三方客户端默认的是向ZeroSSL 申请证书,需要注册和收费。

运行成功后系统会提示证书和密钥存放位置,将两个文件复制并保存。

八、为反向代理使用证书

将证书和密钥导入系统,并为反向代理使用证书,再次在浏览器访问将不再提示安全问题。

参考文献

群晖反代服务器实现外网访问内网服务无需端口号

Let’sEncrypt 免费通配符/泛域名SSL证书添加使用教程