淅淅沥沥

用简洁的文字描述本站点。

0%

Amazon Route 53 是什么?


Amazon Route 53“ 看名字就知道是 亚马逊 Amazon 提供的一项服务,它属于 Amazon AWS(Amazon Web Services) 众多服务中的一个,它是一个高可用的弹性 DNS 服务,这项服务主要包括三大功能:

  • 域名注册
  • 域名解析
  • 检查资源运行状况

Route 53 为什么要叫 Route 53 呢?网上有答案了:Quora 【这个帖子】表明了原因:It refers to the TCP/UDP port 53, where DNS server requests are addressed.

这篇帖子针对普通用户,只说域名注册和域名解析。学识有限,如果有错误烦劳指出。

域名注册


作为云计算全球头把交椅服务商,亚马逊当然也有域名注册服务。但是亚马逊自己只提供三个后缀的域名注册即最常见的 .com .net .org 其他后缀都是和 Gandi.net 合作,任何除了这三个之外的其他后缀的注册商都会在 whois 信息里显示 “Registrar: Gandi SAS” 。

注册特性

转移锁定(Transfer lock):当然支持,保护域名不会被所以转出当前注册商;打开之后域名状态里面会多一条 “Status: clientTransferProhibited” 这个大家都清楚;

转移密码(Authorization code):自助获取,如果域名要转出必须;历史上,国内的域名注册奸商就是在这个环节各种限制以此限制域名转出,当年我就是写了各种纸质材料送去了北京万网总部才得以转出域名(继续在此差评并且鄙视之);

隐私保护:免费,所有域名免费提供隐私保护;但是!我记得如果是除了 .com .net .org 以外的注册在 Gandi.net 的域名是不能隐藏所有人名称的,详细看【这里】 。

DNSSEC status:DNSSEC 启用需要 DNS 服务本身支持和域名注册商支持,注册在 Amazon Route 53 的域名解析服务截止当前(2018-09-23)不提供 DNSSEC 相关功能但是如果你使用的是支持 DNSSEC 的解析服务(比如 ns1.com)那么是可以在这里设置相关信息以启用 DNSSEC 的。

域名价格

后缀 注册和续费 转移 恢复 转入
.com $12.00 $0.00 $66.00 $12.00
.net $11.00 $0.00 $67.00 $11.00
.org $12.00 $0.00 $69.00 $12.00

其他域名价格请参考【这个文档】。

域名注册不能用任何代金券抵扣注册费用,其他的 Route 53 服务费用是可以抵扣。

题外:对于老牌域名注册商 Gandi.net 网络上有两大派别,一大派别极力支持,另一大派别极力反对说各种坑。我个人建议是否要使用这个注册商还需要每个人自己去琢磨它的长处和短处。

域名转入

域名从其他注册商转入 Route 53 流程是自动的,一般情况下如果是国外的注册商转入会当天完成,有的自动处理的甚至半小时就可以完事就是收发几封邮件的事情。同其他注册商一样,转入域名需要支付一年域名费用并且会延期一年,转入以后两个月内不可以转出。

域名解析


Amazon Route 53 域名解析包括两部分:

公共域名解析(Public Hosted Zone):大家理解的传统的域名解析,域名到 IP 地址转换。作用于整个互联网的查询;

私有 Amazon VPN 解析(Private Hosted Zone for Amazon VPN):也是解析,但是仅限于 AWS VPC 内的资源响应,公网无法访问。

先前文章《2017年 DNS 解析服务商列表》当中粗略介绍过 Amazon Route 53 这个优秀的互联网 DNS 解析服务。

品质

高可用,AWS SLA 服务承诺中说明了 Route 53 提供 100% 可用。

根据 Datanyze 统计,Alexa top 1K 中有 21.10% 使用了 Route 53,第二名 Cloudflare 占有 18.87%,而第三名 Dyn 则占了 12.48%。而第二名则是由于优秀的 CDN 服务带动了 DNS 占有率,而第三名的互联网老牌服务商如今被 Oracle 收购了的 Dyn 也没有这么高的占有率。市场足见品质。

特性

优点

Route 53 是当前地表数一数二的优秀的域名解析服务商,基本上一般所有的用户诉求都能满足。常规的域名解析服务商只是做一个域名到 IP 地址的映射,稳定速度快的就已经很难得了。而 Route 不但如此,而且:

  • 可编程,提供各种语言支持的 API 可以编程动态改变路由;
  • 是弹性的,可扩展的提供海量查询服务的 DNS 解析服务;
  • SOA 可以编辑,一般的大多数的 DNS 服务商 SOA 是不可编辑的;
  • 提供流量控制,你的流量怎么路由完全可控;
  • 提供基于基于延迟的路由;
  • 提供基于地理位置的 GEO 解析;
  • 提供 Failover 故障转移确保解析服务高可用;
  • 如果您使用 AWS CloudFront CDN 服务时支持裸域;
  • 如果你使用 AWS S3 支撑网站部分资源,那么支持裸域;
  • 支持 Amazon ELB(Elastic Load Balancing) 集成;
  • 提供加权轮询(WRR)路由功能;
  • Route 53 还是截至目前为止(2018年09月25日)地表屈指可数的提供 DNS 查询日志的服务商(Google Cloud DNS 目前还不提供)而且日志提供导出到 S3 可做各种深度分析;
  • 当然也支持 Anycast 任播;
  • 当然 CAA 也是支持的;

缺点

不支持 DNSSEC 相关,这点比不上 Google Cloud DNS 了,参看上文相关部分介绍。

定价

Route 53 解析的价格由多个因素组合而成:

  1. 托管的域名数量
  2. Traffic Flow 记录数
  3. 标准查询数
  4. 基于延迟的路由查询数
  5. Geo DNS 和临近地理位置查询
  6. 运行状况检查

价格计算还有一些细节的规则,具体请查看 Amazon Route 53 定价 页面。

这里举几个例子:

  • 个人博主,只有一个域名一台主机也没有特别针对的用户,每个月查询50万次,那么每月 0.5 + 0.4 * (50/100) = 0.7
  • 个人开发者,有多个域名假设手里有10个设置各种乱七八糟的只是自己知道的指向几乎没有人访问,有上面同款博客一个,那么每月大约 0.5 10 + 0.4 (50/100) = 5.2
  • 米农,手里持有100个域名但是都只做了指向,有几个爆款指向每月大概加起来有25万次查询,那么每月 0.5 25 + 0.1 (100 - 25) + 0.4 * (25/100) = 20.1

以上计算还要注意区分资源的指向是谁,建立了多长时间等等价格页面的细则。大概的套路就是每项资源使用量*单价-符合免费或折扣策略的价格=总价,除了第一个托管以外其他的都是按比例收取,托管则有一个 12 小时的免费时间窗口。

设置

公共域名解析(Public Hosted Zone)

公共解析和其他的常规 DNS 解析没有什么区别,选择合适的类型在文本区域内会有格式例子给出照着写就可以了,解释一下有别于其他常规 DNS 解析的名词:

Alias(别名):可以理解为一类特殊的 cname 类型,但是指向的对象只能为 aws 资源或者是同类型的同域的其他资源才可以。 aws 资源可以是 CloudFront,Elastic Beanstalk 环境,ELB 负载均衡器,S3 资源。比如给一个 A 记录 hosta 创建一个 alias 叫做 hostb

TTL:如果是别名并且指向的是 aws 资源,则无法指定 TTL 值,一切由 aws 帮你搞定。如果别名指向的是同域的其他相同类型记录,则使用目标记录的 TTL 值。如果不是 alias 的话 TTL 可以设置为你想要的值,默认 300

Routing Policy(路由策略):

  • Simple:一般策略。Route 53 只根据记录值相应查询;这更像是普通的其他常规 DNS 解析,一般用于将流量路由到单个资源;
  • Weighted:加权路由,权重路由,基于权重的流量路由策略。资源的权值是一个 0 到 255 的整型值。思路:把多个资源关联到同一个域名上(可以是单域名或者是子域名),可以认为是一个资源组,然后根据权重(占该组中所有记录总权重的比例)指定向每个资源路由多少流量。如果某个资源的权重为0则不向这个资源路由流量这个特性可以用作测试或者临时停机之类的用途。如果将所有资源的权重都设置为0则会以相同的概率向所有资源路由流量。比如你有3个资源权重费别为 5 10 15,那么分到第一个的流量则为 5/(5+10+15)= 5/30 = 1/6 ,第二个则为 10/(5+10+15)= 10/30 = 1/3,第三则为 15/(5+10+15) = 15/30 = 1/2. Set ID 是一个在加权记录组中唯一标识当前记录的值,可以认为是当前资源名称的一个描述或者备注之类。
  • Latency:Latency-based- Routing(LBR) 基于延迟的路由策略。简单来说就是谁延迟低把流量给谁处理;创建多个同名记录的同时指定响应区域,当 DNS 查询被路由到 Route 53 以后 Route 53 会以一段时间内执行的延迟测量给出路由响应。值得注意的是,网络延迟是动态的,不是一定不变的,也可能和地理位置没有太大关系,例如:不一定香港连接台湾就比香港连接新加坡块。
  • Failover:故障转移路由。这个必须和 Health checks 配合使用,就是 Health checks 发现你的第一个资源如果挂了就把请求路由到第二个资源上。系统推荐为了更高的可用性而把此类记录的 TTL 设置为 60 或更低。
  • Geolocation:传说中的 GEO 路由,地理位置路由。根据用户的地理位置来选择提供流量的资源。位置可以精确到大陆、按国家/地区或者按美国各州指定地理位置。如果您为重叠的地理区域创建了单独的记录 (例如,北美一个记录,加拿大一个记录),则最小的地理区域具有更高的优先级。系统推荐为了更高的可用性而把此类记录的 TTL 设置为 60 或更低。地理位置的路由不仅有利于提高响应速度,而且可以根据地理位置提供本地化内容,还可以控制应用权限,还可以以可预测可控的方式在终端节点进行负载均衡。地理位置路由还可以配合 Traffic Flow 使用达到更加较为精确的流量控制的目的,这部分内容参看【官方文档】。
  • Multivalue Answer:多值应答路由。多值应答记录的值只能设置一个。大部分记录类型都可以设置多个值,比如 A 记录可以指定多个 IP 地址,那为什么还要使用多值应答?为了配合使用状态检查 Health checks 来提高可用性和负载均衡性。如果您没有为多值应答记录关联运行状况检查,则 Route 53 始终认为记录正常。

提示:

如果要设置裸域/顶级域,则不要输入“@”符号,保持空白即可;

三流的邮箱服务商还没上 SPF 的时候二流的服务商还在拿 SFP DKIM 和 DMARC 为骄傲的时候一流的服务商现在已经不推荐设置 SPF 记录了,文档表达的理由是:

RFC 7208 中的 Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1 (在电子邮件中授权使用域的发件人策略框架 (SPF),版本 1) 已更新为:“…[I]ts existence and mechanism defined in [RFC4408] have led to some interoperability issues. Accordingly, its use is no longer appropriate for SPF version 1; implementations are not to use it.“(…在 [RFC4408] 中定义的其存在和机制已导致一些互操作性问题。因此,它已不再适合 SPF 版本 1;实施方案中不应再使用它。) 在 RFC 7208 中,请参阅第 14.1 节 The SPF DNS Record Type

一般情况下创建了一条 DNS 记录以后这条记录大概 60秒 内传播到所有 Route 53 服务器。

私有 Amazon VPN 解析(Private Hosted Zone for Amazon VPN)

如要使用 Route 53 解析 aws VPC 资源,请参考【官方文档】

记录检查(Test Record Set)

要知道某条记录的生效情况可以选中该条记录以后单击菜单栏上的“Test Record Set”来测试,还可以指定特定的其他 DNS 服务器或者客户端 IP 地址来判断 Route 53 给他们返回了什么。

这里的检查只适用于公共域而不能用于私网。

DNS response code 状态可以参考【这个文档

DNS 查询日志(DNS query logging)

前面说了 Route 53 是当前地表屈指可数的提供查询日志的服务商,大厂里面更是几乎唯一的一个。如何配置查看 DNS 查询日志呢?

访问【这个页面】,也就是点击 Route 53 页面左侧的 “Hosted zones”这里会看到你的已经创建了解析记录的域名列表,点击你要配置查询日志的域名前面的单选框(小圆点)(不是点击域名),右侧弹出一个面板叫做“Hosted Zone Details”。页面最下方点击“Configure query logging”按钮。

查询日志只能放在 US East(N. Virginia) 不能放在其他地方。

建议为每一个域名建立一个 log group。那么选择 “New log group in US East(N. Virginia) “即可,下面的”New log group name”为了方便管理建议写成 /aws/route53/example.com 这种。

下一步,配置权限,根据需要配置完成后测试,测试成功创建即可。

查看日志:如同上面一样点击域名前面的小圆点右侧弹出面板里面点击前面写的日志组名称就可以查看了。会跳转到 CloudWatch 页面的“日志”标签。

处理日志:选中日志组名称,上面菜单按钮“操作”里面选择。


对于虚拟机而言,一般服务商给 虚拟机(VM(Virtual Machine))不会分配交换空间,有较少数的服务商在图形界面面板里可以配置交换空间(例如 Linode)。这样的话通过把已有硬盘划分一块给一个单独的文件并把这个文件格式化成交换分区的格式然后挂载给系统然后永久启用就可以了,具体如下:

需要创建一个 2GB 大小的 /swapfile 文件,文件路径随意,但是为了好管理,所以放在了根目录下:

1
dd if=/dev/zero of=/swapfile bs=1024 count=2048000

(坑:不能使用 fallocate 否则后续会报错 理由 https://unix.stackexchange.com/questions/294600/i-cant-enable-swap-space-on-centos-7)

输出:

1
2048000+0 records in2048000+0 records out2097152000 bytes (2.1 GB) copied, 6.28804 s, 334 MB/s

查看一把生成的文件:

1
ls -lh /

输出:

1
-rw-r--r--.  1 root root 2.0G Jul 11 23:30 swapfile

改变文件权限:

1
chmod 600 /swapfile

查看一把改变以后的权限:

1
ls -lh /swapfile

输出:

1
-rw-------. 1 root root 2.0G Jul 11 23:30 /swapfile

格式化当前文件为交换空间文件系统:

1
mkswap /swapfile

输出:

1
Setting up swapspace version 1, size = 2047996 KiBno label, UUID=cd2e05ae-daf4-4917-a4a7-7317ab989440

把这个文件设置为交换空间:

1
swapon /swapfile

查看当前交换空间是否生效:

1
swapon -s

输出:

1
Filename    Type    Size    Used    Priority/swapfile   file    2047996    0        -1

使交换空间永久生效:
备份需要更改的系统文件:

1
cp /etc/fstab /etc/fstab_20180711_original

编辑文件把下列内容加入文件末尾:

1
vim /etc/fstab
1
/swapfile   swap    swap    sw  0   0

保存文件重启系统。

介绍


IBM 去年 2017年11月 推出了一套叫做 Plex 的字体!
为啥呢?有两个目标:1.自己用 2.给你用

这套字体历时两年,是一套开源并且可以免费下载和使用的英文字体。当前提供 Sans, Serif, Mono 和 Sans Condensed 形式并且满足在所有环境下使用。

下载


主页:https://github.com/IBM/plex

下载:https://github.com/IBM/plex/releases

使用


网页使用指导:https://github.com/IBM/plex#web-usage

Windows 安装:

注意下载页面提示:【TrueType.zip is recommended for MacOS and Windows.】

下载然后解压,把所有文件夹内的 .ttf 复制到 C:WindowsFonts 文件夹内即可,然后就可以在任何你想使用并且可以设置字体的软件内使用了。

小提示:可以在解压后的文件夹内搜索 “*.ttf” 然后全选复制,避免了一个一个文件夹去打开多次复制的繁琐。

Linux 安装:

Linux 中的字体可分为两大类:

轮廓或矢量字体

包含作为字形组成相关绘图指导的数学描述。因此,每个字形都可以缩放为任意大小而无损质量。在可以使用此类字体(或字形)之前,需要将数学描述转换为光栅(网格)。此过程称为字体光栅化。字体微调(嵌入在字体中)可改进和优化特定大小的渲染效果。光栅化和微调通过 FreeType 库实现。

Linux 下的常用格式为 PostScript Type 1 和 Type 2、TrueType 及 OpenType。

位图或光栅字体

包含一个为特定字号设计的像素阵列。位图字体渲染速度极快,而且非常简单。然而,与矢量字体相比,位图字体无法在不损质量的情况下进行缩放。因此,这些字体通常以不同的大小发布。现在,Linux 控制台中仍然使用位图字体,有时终端中也会使用这些字体。

在 Linux 下,便携式编译格式 (PCF) 或字形位图分布格式 (BDF) 是最常用的格式。

这些字体的外观主要会受两个方面的影响:

  1. 选择合适的字体系列,
  2. 采用某种算法渲染字体,达到接收者眼睛最舒服的效果。

最后一点只与矢量字体相关。虽然上面两点都需要根据个人情况而定,但仍有一些默认值需要创建。

Linux 字体渲染系统由具有不同关系的几个库组成。基本字体渲染库是 FreeType (http://www.freetype.org/) ,它会将支持的格式的字体字形转换为优化的位图字形。渲染过程由算法及其参数(可能受专利问题影响)控制。

使用 FreeType 的每个程序或库都应该参考 Fontconfig (http://www.fontconfig.org/) 库。
此库会从用户及系统那里收集字体配置。用户修改其 Fontconfig 设置后,此更改将导致发生 Fontconfig 感知的应用。

Arabic、Han 或 Phags-Pa 等脚本所需的更复杂的 OpenType 成型以及其他更高级别的文本处理依赖于 Harfbuzz (http://www.harfbuzz.org/) 或 Pango (http://www.pango.org/) (这只是一部分示例)。

Linux 系统有这么几个地方存放字体:

1
2
3
4
5
6
7
# 系统目录 适用于每个系统用户
/usr/share/fonts
/usr/local/share/fonts

# 用户目录 适用于当前用户
~/.config/fonts
~/.fonts

详细目录区别请参考:**Filesystem Hierarchy Standard (文件系统层次标准,FHS)**标准

下载字体文件:

1
wget https://github.com/IBM/plex/releases/download/v1.0.2/TrueType.zip

解压字体文件包:

1
unzip TrueType.zip

复制字体到字体文件夹:

1
sudo cp -R TrueType /usr/share/fonts/

刷新字体缓存:

1
sudo fc-cache -fv

Done.

概要


Oracle 数据库的默认安装非常繁琐复杂,但是大致的套路无非就是找一个能满足业务需求的硬件环境和一个能满足需求(并最大限度提升性能)的系统环境(操作系统环境,网络环境等等)把安装程序扔上去然后让它跑起来就可以了。抛开硬件环境不说,这里只说 Linux 软件环境。

对于常规的三大派系的 Linux 发行版:RedHat SUSE Debian 而言。Oracle 默认是不支持 debian 的,所以这个系列的发行版不推荐安装 Oracle 数据库,即便你再喜欢把 Ubuntu 玩的再 6 也不要试图去把 Oracle 安装再 Ubuntu 上(除非哪天 Oracle 官方支持了),也有一些特别执着的人可能实现了安装,但是生产环境绝不推荐这种做法。剩下的两大流派商业发行版 RedHat(CentOS/Fedora) 和 SUSE(openSUSE) 都是支持的。

对于 RedHat 而言,当然首先应肯定支持度最好的是 RHEL(Redhat Enterprise Linux)但是大多数情况下社区发行版使用更多一些,所以明显的 CentOS 几乎成了 Oracle 免费方案下最稳妥最靠谱最通用的办法。而 RedHat 系而言,Oracle 自己在 RHEL 的基础上做了少许改进有了 Oracle Linux,可以认为是 CentOS 的兄弟版本而且专为 Oracle 数据库而生,所以商业付费订阅领域最适合 Oracle 数据库的无疑是 Oracle Linux 了。当然 Fedora 也是支持 Oracle 数据库的,但是不推荐生产环境使用。对于 SUSE 而言,SLES(SUSE Linux Enterprise Server)得到了 Oracle 的官方支持,当然 openSUSE 肯定也是可以安装 Oracle 数据库的。

具体操作起来,有两种解决方案:

1.使用 CentOS 安装:本文覆盖范围

2.由于 Oracle Linux 和 CentOS 的关系,所以可以直接把 CentOS 转成 Oracle Linux 来获取官方支持的 preinstall 安装相关的支持套件来简化安装程序,这也是官方推荐的做法。

第二种方法可以参考如下内容:

1
https://linux.oracle.com/switch/centos/https://gist.github.com/martndemus/7ad8209f9be9185bcf3a

对于安装,Oracle 默认采用图形化安装方式,但是大多数服务器,尤其是虚拟机没有图形环境,网上有一些采用 Xmanager 的方式,但是不推荐。图形环境安装无非就是设置了一些变量给了 Oracle 系统,那么这些设置肯定是可通过文本进行配置编辑的。所以本文采用静默方式安装。

安装环境


本次安装使用当前最佳免费方案,使用当前的最新版 CentOS 7.5 系统。由于 Oracle 18c 的改进较大,所以使用最广泛的次新版 12c 进行安装。

1
2
3
4
5
6
CentOS 7.5 x64 (2GB 1vCPU 3.10.0-862.2.3.el7.x86_64)
Oracle Database 12c Release 2 (12.2.0.1.0)

这个机器配置如下:
内存:2GB
硬盘:50GB

相关术语及其工具说明


Oracle Universal Installer(OUI) 是一个安装 Oracle 相关软件的工具,它可以自动启动 ODCA 来安装数据库;

Oracle Database Configuration Assistant(DBCA) 是一个从模板创建 Oracle 提供的数据库的工具,它可以帮助相关人员更快地建立和配置新数据库;

Net Configuration Assistant 是一个可以让相关人员配置监听器(listeners)和命名方法(naming methods)的工具,它是 Oracle 数据库网络的关键工具;

Oracle Enterprise Manager Database Express(EM Express) 是一个基于 Web 的主要的用来管理 Oracle 数据库的工具;Oracle 同时也提供了单独需要购买的 EM 工具和插件还有其他特定环境可以增强 Oracle 数据库管理能力的付费产品;

SQL Developer 是一个 GUI 的访问数据库的工具。它同时支持 SQL 和 PL/SQL 语言。用它可以浏览数据库实体,运行 SQL 语句和 SQL 脚本,编辑和调试 PL/SQL 语句。

Automatic Storage Management(ASM) 这个套件是 Oracle 用来自动管理数据库文件的存放和命名空间的地方(placement and naming)。对于大量的磁盘文件,这个工具简化了数据库管理工作并且提高了数据库性能。ASM 在文件层面执行软件拆分和镜像(striping and mirroring at the file level)以便获得最大化的灵活性可用性和性能。

Oracle ASM 使用一个有别于数据库实例的 Oracle ASM 实例,用来配置和管理磁盘组。ASM 实例可以同服务器上的多数据库存储。

自从 Oracle Database 11g Release (11.2) 开始,ASM 是 Grid Infrastructure 的一部分了。

Grid Infrastructure(GI)是给数据库系统提供包括卷管理,文件系统和自动重启功能的软件。如果你打算使用 Oracle Restart 或者 ASM 的话,必须在安装数据库之前安装 GI。

版本区别


企业版 Oracle Database Enterprise Edition:

全功能的企业级数据库,专为核心业务和高安全性的在线事务处理而生,并且支持数据仓库相关功能;

标准单一版 Oracle Database Standard Edition One:

小型业务使用的单台服务器环境使用,包含了所有构建关键业务所需要的核心功能;

标准版 Oracle Database Standard Edition:

适合工作组或部门级别的应用,适合中小型企业。提供和关系型数据库的核心功能并且集成了一些管理工具。

个人版 Personal Edition (只能用于 Microsoft Windows 系统):

这个版本和企业版相同,但是只支持单用户。

学习版 Oracle Database Express Edition:

免费使用的入门级的用于快速下载快速安装部署和管理的数据库系统。俗称 Oracle XE 版本,它也可以容易地升级到 Oracle 的其他版本。它可以容易地安装再任何数量 CPU 的机器上,但是它只会使用一个 CPU,而且限制最大数据容量是 4GB 容量,最多使用 1GB 内存。技术支持方面仅支持在线论坛。

当前(2018年7月)XE 的最新版本是 Oracle Database XE 11g Release 2(11.2),比其他高级版本滞后两个版本。

更多细节:

https://docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm

安装所需


硬件环境所需:

最小内存:1GB

推荐内存:2GB

如需安装 Oracle Grid Infrastructure(GI) 那么最小内存 8GB

软件环境所需:

Oracle 可以安装在常规的 Linux 发行版上,但是只支持两大商业主流发行版和派生版(红帽 Linux 和 SUSE Linux)官方不支持 Debian 及其衍生版(Ubuntu 等等),虽然网上有 Ubuntu 和 Debian 上安装 Oracle 数据库的方法,但是不推荐生产环境这样做。对于操作系统内核要求如下:

RHEL7/CentOS7: 最低 3.10.0-123.el7.x86_64

SLES 12 SP1: 最低 3.12.49-11.1

Oracle Database(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html)

其他说明:

1
2
3
1. 对于性能敏感的系统为了提升性能 Oracle 建议关闭 Linux 系统的 Transparent HugePages 特性。
2. 下载需要 Oracle 账号并且需要登陆账号同意下载协议
3. 官方下载链接带尾巴不支持 Linux axel 下载工具,建议使用 wget 下载。

环境准备


更新系统:

1
yun update

启用 epel 源:

1
yum install epel-release -y

安装必备软件:

1
yum install wget vim unzip

设置时区:

1
timedatectl set-timezone Asia/Shanghai

启用时间同步:

1
timedatectl set-ntp true

关闭 Transparent HugePages 特性:

详细 Redhat 文档1:https://access.redhat.com/solutions/46111(需要登陆红帽账户)

详细 Redhat 文档2:https://access.redhat.com/solutions/1320153(需要登陆红帽账户)

详细 Redhat 文档3:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-configuring_transparent_huge_pages

详细 Mongodb 对于不同操作系统而言关闭方法文档:https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/index.html

1
mkdir /etc/tuned/no-thpvim /etc/tuned/no-thp/tuned.conf

输入以下内容:

1
[main]include=virtual-guest[vm]transparent_hugepages=never

保存文件

使其生效

1
tuned-adm profile no-thp

测试生效

1
cat /sys/kernel/mm/transparent_hugepage/enabledcat /sys/kernel/mm/transparent_hugepage/defrag

如果两句都输出

1
always madvise [never]

说明成功。

交换空间:

Oracle 安装所需的交换空间大小依据物理内存而定:

内存 256MB:内存3倍

内存 256MB 到 512MB 之间:内存2倍

内存 512MB 到 2GB 之间:内存1.5倍

内存 2GB 到 16GB:内存1倍(等于内存容量)

内存大于 16GB:16GB

如果你的 Linux Server 启用了 HugePages 没有关闭的话,那么你应该在计算交换分区的时候从可用内存里减去给 HugePages 分配的容量再计算。

对于物理机而言在安装系统的时候就应该分配好交换空间,普遍的说法是物理内存大小的两倍,但是如果你硬盘紧张而内存足够大的话少划分一些给交换空间也是可以的,后续可以通过重新分配磁盘或者逻辑卷管理(LVM)的方式改变大小。

添加交换空间:

1
https://6ki.org/2018/07/add-swap-to-linux.html

为了性能提升,还需要(可选)做如下系统修改:

备份要修改的文件:

1
cp /etc/sysctl.conf /etc/sysctl.conf_20180712_originalvim /etc/sysctl.conf

编辑文件加入以下内容:

1
vm.swappiness = 10vm.vfs_cache_pressure = 50

保存重启

安装系统必须库文件相关组件:

1
yum install unzip bc binutils compat-libcap1.x86_64 compat-libstdc++-33.x86_64 glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender make net-tools nfs-utils smartmontools sysstat -y

本地 SSH 配置:

1
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_20180711_originalvim /etc/ssh/sshd_config

编辑文件并把相关条目修改为:

1
LoginGraceTime 0PasswordAuthentication yes

保存重启服务:

1
systemctl restart sshd

用户和组


创建用户和组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba

# 建立安装全部 Oracle 软件安装用户
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle

# 建立仅仅安装 Grid Infrastructure 用户
useradd -u 54331 -g oinstall -G oinstall,dba,asmdba,asmoper,asmadmin,racdba grid

设置用户密码:

1
passwd oraclepasswd grid

系统内核优化


有则打开无则创建 /etc/sysctl.d/97-oracle-database-sysctl.conf 并加入以下内容: (不推荐网上写的直接修改 /etc/sysctl.conf 文件的做法)

1
2
3
4
5
6
7
8
9
10
11
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

保存文件然后重启系统或者运行

1
sysctl --system

编辑 /etc/security/limits.conf 为 oracle 用户设置上限

1
2
3
4
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

准备相关目录


创建 Oracle 安装目录:(不建议更改安装目录,这种目录符合 Oracle 的推荐标注,并且这种形式有个名字叫做 Optimal Flexible Architecture (OFA) Path)

1
2
3
4
5
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/12.2.0/dbhome_1/
mkdir -p /u01/app/grid
mkdir -p /u01/app/12.2.0/grid

从官网下载 Oracle Database 压缩包并解压文件

1
2
3
4
5
6
7
8
#提示1:推荐使用 axel 而不是用 wget下载
#提示2:需要使用 Oracle 登陆网站,如果你在 Windows 上操作,等本地浏览器开始下载以后停止当前下载并复制完整 URL 到 Xshell/PuTTY 等工具。
# filename:linuxx64_12201_database.zip
# fllesize:3293.7MB(3.2GB)

wget http://download.oracle.com/otn/linux/oracle12c/122010/linuxx64_12201_database.zip?AuthParam=[all-full-url-with-your-own-login]

unzip linuxx64_12201_database.zip -d /u01/app/stage/

更改属主和权限

1
2
3
4
5
6
7
8
# 如果需要安装 GI 那么
#chown -R grid:oinstall /u01/app/oraInventory
# 如果不需安装 GI 只安装数据库 那么
chown -R oracle:oinstall /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oracle
chown -R oracle:oinstall /u01/app/oracle/product/12.2.0/dbhome_1/
chown -R grid:oinstall /u01/app/grid
chown -R root:root /u01/app/12.2.0/grid

设置环境变量


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 注意环境变量目录后面不能有“/”

su - oracle

vim ~/.bash_profile

export ORACLE_HOSTNAME=instance8

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1

export ORACLE_SID=db1sid

export DISPLAY=127.0.0.1:1.0

export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH

配置安装


创建安装配置文件

1
2
mkdir /u01/app/oracle/etc/
cp /u01/app/stage/database/response/* /u01/app/oracle/etc/

编辑文件文件 /u01/app/oracle/etc/db_install.rsp 并设置以下值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1/
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
#oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=ZHS16GBK
oracle.install.db.config.starterdb.password.ALL=[YourPassword]
oracle.install.db.config.starterdb.password.DBSNMP=[YourUserName]
oracle.install.db.config.starterdb.managementOption=CLOUD_CONTROL
oracle.install.db.config.starterdb.emAdminUser=[YourUserName]
oracle.install.db.config.starterdb.emAdminPassword=[YourPassword]

过程安装


1
2
cd /u01/app/stage/database
./runInstaller -silent -ignorePrereq -responseFile /u01/app/oracle/etc/db_install.rsp

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 500 MB. Actual 38822 MBPassed
Checking swap space: must be greater than 150 MB. Actual 1999 MBPassed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2018-07-12_04-42-48PM. Please wait ...[oracle@instance8 database]$ You can find the log of this install session at:
/u01/app/oraInventory/logs/installActions2018-07-12_04-42-48PM.log
The installation of Oracle Database 12c was successful.
Please check '/u01/app/oraInventory/logs/silentInstall2018-07-12_04-42-48PM.log' for more details.

As a root user, execute the following script(s):
1. /u01/app/oraInventory/orainstRoot.sh
2. /u01/app/oracle/product/12.2.0/dbhome_1/root.sh



Successfully Setup Software.

根据提示切换为 root 用户执行上面两个脚本(此处需要再按一次回车)

1
2
su - 
sh /u01/app/oraInventory/orainstRoot.sh

输出

1
2
3
4
5
6
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

执行

1
sh /u01/app/oracle/product/12.2.0/dbhome_1/root.sh

输出

1
Check /u01/app/oracle/product/12.2.0/dbhome_1/install/root_instance8_2018-07-12_17-27-20-794486182.log for the output of root script

配置静默监听


1
2
3
4
su - oracle
# 如果下面这句执行不了则需要认真检查环境变量
# 如果发生错误提示“The information provided for this listener is currently in use by other software on this computer. Listener start failed.” 则重启一次机器
netca /silent /responsefile /u01/app/oracle/etc/netca.rsp

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /u01/app/oracle/etc/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/u01/app/oracle/product/12.2.0/dbhome_1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0

配置静默建库


1
vim /u01/app/oracle/etc/dbca.rsp

内容如下,可以根据自己的需要按照注释填写:

1
2
3
4
5
6
7
gdbName=db1
sid=db1sid
sysPassword=[YourPassword]
systemPassword=[YourPassword]
dbsnmpPassword=[YourPassword]
CHARACTERSET=ZHS16GBK
# 注意 Oracle 推荐的密码长度为 8位并且包含数字大小写字母各 1为,如果密码太弱下一步会提示警告

执行

1
dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile /u01/app/oracle/etc/dbca.rsp

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
CAUSE:
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
[WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
CAUSE:
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
Copying database files
1% complete
2% complete
18% complete
33% complete
Creating and starting Oracle instance
35% complete
40% complete
44% complete
49% complete
50% complete
53% complete
55% complete
Completing Database Creation
56% complete
57% complete
58% complete
62% complete
65% complete
66% complete
Executing Post Configuration Actions
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/db1/db1.log" for further details.

查看实例


1
2
su -
ps -ef grep ora_ grep -v grep

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
oracle   13030     1  0 18:27 ?        00:00:00 ora_pmon_db1sid
oracle 13032 1 0 18:27 ? 00:00:00 ora_clmn_db1sid
oracle 13034 1 0 18:27 ? 00:00:00 ora_psp0_db1sid
oracle 13036 1 1 18:27 ? 00:00:01 ora_vktm_db1sid
oracle 13041 1 0 18:27 ? 00:00:00 ora_gen0_db1sid
oracle 13043 1 0 18:27 ? 00:00:00 ora_mman_db1sid
oracle 13047 1 0 18:27 ? 00:00:00 ora_gen1_db1sid
oracle 13051 1 0 18:27 ? 00:00:00 ora_diag_db1sid
oracle 13053 1 0 18:27 ? 00:00:00 ora_ofsd_db1sid
oracle 13057 1 0 18:27 ? 00:00:00 ora_dbrm_db1sid
oracle 13059 1 0 18:27 ? 00:00:00 ora_vkrm_db1sid
oracle 13061 1 0 18:27 ? 00:00:00 ora_svcb_db1sid
oracle 13063 1 0 18:27 ? 00:00:00 ora_pman_db1sid
oracle 13065 1 0 18:27 ? 00:00:00 ora_dia0_db1sid
oracle 13067 1 0 18:27 ? 00:00:00 ora_dbw0_db1sid
oracle 13069 1 0 18:27 ? 00:00:00 ora_lgwr_db1sid
oracle 13071 1 0 18:27 ? 00:00:00 ora_ckpt_db1sid
oracle 13073 1 0 18:27 ? 00:00:00 ora_smon_db1sid
oracle 13075 1 0 18:27 ? 00:00:00 ora_smco_db1sid
oracle 13077 1 0 18:27 ? 00:00:00 ora_reco_db1sid
oracle 13079 1 0 18:27 ? 00:00:00 ora_w000_db1sid
oracle 13081 1 0 18:27 ? 00:00:00 ora_lreg_db1sid
oracle 13083 1 0 18:27 ? 00:00:00 ora_w001_db1sid
oracle 13085 1 0 18:27 ? 00:00:00 ora_pxmn_db1sid
oracle 13089 1 2 18:27 ? 00:00:02 ora_mmon_db1sid
oracle 13091 1 0 18:27 ? 00:00:00 ora_mmnl_db1sid
oracle 13093 1 0 18:27 ? 00:00:00 ora_d000_db1sid
oracle 13095 1 0 18:27 ? 00:00:00 ora_s000_db1sid
oracle 13097 1 0 18:27 ? 00:00:00 ora_tmon_db1sid
oracle 13152 1 0 18:27 ? 00:00:00 ora_tt00_db1sid
oracle 13154 1 0 18:27 ? 00:00:00 ora_tt01_db1sid
oracle 13156 1 0 18:27 ? 00:00:00 ora_tt02_db1sid
oracle 13159 1 0 18:27 ? 00:00:00 ora_aqpc_db1sid
oracle 13164 1 0 18:27 ? 00:00:00 ora_p000_db1sid
oracle 13166 1 0 18:27 ? 00:00:00 ora_p001_db1sid
oracle 13168 1 0 18:27 ? 00:00:00 ora_cjq0_db1sid
oracle 13170 1 0 18:27 ? 00:00:00 ora_p002_db1sid
oracle 13175 1 0 18:27 ? 00:00:00 ora_p003_db1sid
oracle 13412 1 0 18:27 ? 00:00:00 ora_qm02_db1sid
oracle 13417 1 0 18:27 ? 00:00:00 ora_q002_db1sid
oracle 13421 1 0 18:27 ? 00:00:00 ora_q003_db1sid
oracle 13599 1 0 18:28 ? 00:00:00 ora_w002_db1sid

查看监听状态


1
2
3
4
su - oracle
lsnrctl status
# 关闭监听 lsnrctl stop
# 启动监听 lsnrctl start

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 12-JUL-2018 18:29:56

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instance8)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 12-JUL-2018 17:48:15
Uptime 0 days 0 hr. 41 min. 41 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/instance8/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instance8)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "db1" has 1 instance(s).
Instance "db1sid", status READY, has 1 handler(s) for this service...
Service "db1sidXDB" has 1 instance(s).
Instance "db1sid", status READY, has 1 handler(s) for this service...
The command completed successfully

登陆查看实例


1
sqlplus / as sysdba

输出

1
2
3
4
5
6
7
8
9
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jul 12 23:14:31 2018

Copyright (c) 1982, 2016, Oracle. All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

此处看到 SQL> 命令提示符以后在提示符后面输入启动命令启动数据库

1
2
3
# 启动数据库:startup 
# 关闭数据库:shutdown immediate
SQL> startup

输出

1
2
3
4
5
6
7
8
9
10
ORACLE instance started.

Total System Global Area 771751936 bytes
Fixed Size 8625464 bytes
Variable Size 583008968 bytes
Database Buffers 176160768 bytes
Redo Buffers 3956736 bytes
Database mounted.
Database opened.
SQL>

查看实例状态

1
SQL> select status from v$instance;

输出

1
STATUS------------OPEN

查看数据库版本信息

1
SQL> select * from v$version;

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
BANNER
--------------------------------------------------------------------------------
CON_ID
----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
0

PL/SQL Release 12.2.0.1.0 - Production
0

CORE 12.2.0.1.0 Production
0


BANNER
--------------------------------------------------------------------------------
CON_ID
----------
TNS for Linux: Version 12.2.0.1.0 - Production
0

NLSRTL Version 12.2.0.1.0 - Production
0


SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
CON_ID
----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
0

PL/SQL Release 12.2.0.1.0 - Production
0

CORE 12.2.0.1.0 Production
0


BANNER
--------------------------------------------------------------------------------
CON_ID
----------
TNS for Linux: Version 12.2.0.1.0 - Production
0

NLSRTL Version 12.2.0.1.0 - Production
0


SQL>

安装完毕。

症状:

Windows 10 锁屏界面选择了“Windows 聚焦”无法自动更新?
或者
Windows 10 锁屏界面选择了“Windows 聚焦”以后直接蓝色屏幕或者灰色屏幕而没有图片加载出来?

网上给出的方法有关于策略组的,关于网络的,关于注册表的,关于组建完整性的;我试过的都无效。


解决方法:

  1. 打开“此电脑”(或者叫了多年的“我的电脑”),菜单栏选择“查看”,打开“文件扩展名”和“隐藏的项目”;
  2. 进入下面的文件夹:
1
C:\Users\[Your-Name]\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_ger_[Something-else]\Settings

注意:
[Your-Name] 是你的登录名;
[Something-else] 每个人不同,随机的一个字符串;

现在你看到两个文件:

1
2
roaming.lock
settings.dat
  1. 选中这两个文件,按一次 Ctrl + c 和 Ctrl + v(就是备份一下啦:D),然后删除这两个文件;
  2. 进入下面的文件夹:
1
C:\Users\[Your-Name]\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_[Something-else] \LocalState\Assets

删除文件夹中全部文件。

说明:
这个文件是 Windows 10 聚焦更新的图片存放的地方,有些聚焦图片确实很美,来这里把文件复制到其他地方,改一下后缀为 .jpg 即可使用。

  1. 使用管理器权限(右键选择”管理员身份运行“)打开 PowerShell 工具(命令提示符(cmd.exe)不行),输入如下代码:
1
Get-AppxPackage Microsoft.Windows.ContentDeliveryManager -allusers  foreach {Add-AppxPackage -register “$($_.InstallLocation)appxmanifest.xml” -DisableDevelopmentMode}
  1. 重新选择锁屏背景为”图片“,再切换到”Windows 聚焦“。Over

介绍

Google Cloud DNS 是运行在 Google 基础架构上的可扩展、可靠、托管式的权威域名系统 (DNS) 服务。它延迟低、可用性高,是将您的应用和服务提供给用户的一种经济实惠的方式。Cloud DNS 是可编程的。您可以使用我们简单的界面、命令行界面或 API 轻松地发布和管理数百万个 DNS 地区和记录。由于谷歌试用了 Anycast(任播)技术并且云平台是弹性的,所以可以提供给用户 生产级质量的高流量权威 DNS 服务 而且可在全球任何地方以高可靠低延迟访问。100% SLA 保证。同时,所有的访问都是支持 DNSSEC 的,这保证了一定的安全性。

价格

Google Cloud DNS 根据网文介绍之前是有 5K 每天的免费查询额度的,但是现在已经取消了免费额度。所有的服务都是收费的,其实收费机制也很简单,只有两部分组成:托管的域名数量和域名查询数量。而且,无论是域名数量还是查询数量,都是越多越便宜。对于最低配置而言,总量 25个 域名以内的 1个 域名按照每月最低套餐的 100万 查询以内的话,则是 域名托管费用 $0.20 + $0.40 = $0.60 ,价格是相当的经济实惠。价格细节

规模

当前(2018年1月3日),Google Cloud DNS 有 ns-cloud-a1.googledomains.com 到 ns-cloud-h1.googledomains.com 这么 8 大组解析服务器,每组又有 ns-cloud-a1.googledomains.com ns-cloud-a2.googledomains.com ns-cloud-a3.googledomains.com ns-cloud-a4.googledomains.com 这么 4 小组解析服务器。
不幸:每一大组的第一个 ns-cloud-*1.googledomains.com 中国大陆均无法 ping 通。虽然你可以删除第一个,但是无法保证获得 100% SLA。

特性

  1. 前面已经提过支持 Anycast 和 DNSSEC 并且 100% SLA 保证。
  2. 除了常规的记录类型以外,当前还支持 CAA IPSECKEY NAPTR NS PTR SOA SSHFP 和 TLSA 记录。虽然支持 SPF 类型,但我还是强烈建议把 SPF 按照 TXT 类型来写。支持记录类型细节
  3. 最低 1秒 TTL。
  4. SOA 可以编辑
  5. 支持多级域名,不限于顶级域名。

先决条件

使用 Google Cloud DNS 之前,需要满足这两个条件:

  1. 启用账单,就是添加了信用卡而且你当前的项目链接到了某个账单账户。对于中国大陆用户而言,Google 接受 Visa MasterCard 借记卡和 Visa MasterCard AmericanExpress 大莱卡(Diners Card)和 JCB 实体信用卡。不接受虚拟卡和预付卡。国内发卡行发行的信用卡(62 开头银联不行)基本都是可以接受。支付细节
  2. 安装 gcloud 。(这个主要是为了导入和进行大量操作而准备,如果你的域名和域名记录数不多的话或者你可以接受手工操作的话则不必安装(仅仅针对 Google Cloud DNS 而言,对于其他 Google Cloud Platf 产品而言是否需要安装取决于你自己的需求))。我比较推荐在国外的 VPS 上安装 gcloud 客户端,如果你在试用国内的 VPS 的国内节点或者是国外 VPS 的国内节点等不能从 VPS 内访问谷歌的话则不要安装在此类 VPS 上。要安装在可以访问谷歌的 VPS 上。安装细节

日志记录

当前(2018年1月4日)不支持查询日志记录,但是支持你的操作的审计日志(audit logs)将会被保存 400 天。这部分内容可以到 https://console.cloud.google.com/logs/ 查看。

基本使用

大部分的操作都可以在网页提供的图形界面中操作,除了导入和导出和事务还有变更等高级操作。当然,如果你有大规模操作的需求或者事务的操作需求,则必须试用命令行。

gcloud dns 工具提供了三类操作对象:managed-zones project-inforecord-sets

managed-zones: 管理域名基本操作。提供的操作有 添加域名 删除域名 列举域名 和 描述域名细节

project-info: 项目信息细节描述,这个需要项目 ID 。就是创建 Google Cloud 项目的时候你指定的那个 ID ,一般是字母和数字的一个组合而且是全局唯一。

record-sets:记录管理基本操作。提供的操作除了有 导出 导入 列举当前记录 这三个显而易见的以外,还提供有 事务(transaction)和 变更(changes)的操作。

假设我们要操作如下任务:

  1. 添加一个叫做 “staff-mail” 的 staff.mail.eg.zone 域名到一个叫做 “project-demo-20180104” 的项目下;
  2. 给这个域名添加 1 个 A 记录 和 1 个 AAAA 记录;
  3. 给这个域名添加 1 个 DKIM 和 1 个 DMARC 的 TXT 类型记录;(关于 SPF DKIM 和 DMARC 参考本文
  4. 给这个域名添加 2 个 MX 记录;
  5. 把 MX 和 DKIM 和 DMARC 放到一个叫做 “exmail” 的事务中;
  6. 控制 “exmail” 事务的行为;
  7. 查看记录变更细节;

添加域名

1
gcloud dns managed-zones create "staff-mail" --dns-name="staff.mail.eg.zone." --description="A zone for staff mail"

注意:Google Cloud DNS 每次操作的时候都根据 Zone name 来标示域名而不是根据域名来标示。也就是上面的例子中的 “staff-mail”。

同时,Google Cloud DNS 支持全局 flag 来控制命令行工具的一些行为和属性。细节 页面中的 “GLOBAL FLAGS”部分

列举域名

1
gcloud dns managed-zones list

描述域名细节

1
gcloud dns managed-zones describe "staff-mail"

删除域名

1
gcloud dns managed-zones delete "staff-mail"

描述项目信息

1
gcloud dns project-info describe "project-demo-20180104"

这个操作可以获取当前项目下的资源试用限额,如果你的资源使用量大,就用这个查看,查询结果大致如下:

1
2
3
4
5
6
7
8
9
10
11
id: project-demo-20180104
kind: dns#project
number: '964123456789'
quota:
kind: dns#quota
managedZones: 10000
resourceRecordsPerRrset: 100
rrsetAdditionsPerChange: 1000
rrsetDeletionsPerChange: 1000
rrsetsPerManagedZone: 10000
totalRrdataSizePerChange: 100000

导入记录

假设我们有一个 “staff-mail.zone” 文件是从其他地方导出获得的,注释掉 SOA 和 NS 记录,大致内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
staff.mail.eg.zone. 300 IN A 10.134.12.34
staff.mail.eg.zone. 300 IN AAAA 2604:a880:1a:2c::6b:1

staff.mail.eg.zone. 300 IN MX 10 alt1.aspmx.l.google.com.
staff.mail.eg.zone. 300 IN MX 20 alt2.aspmx.l.google.com.

;staff.mail.eg.zone. 21600 IN NS ns1.he.net.
;staff.mail.eg.zone. 21600 IN NS ns2.he.net.
;staff.mail.eg.zone. 21600 IN NS ns3.he.net.
;staff.mail.eg.zone. 21600 IN NS ns4.he.net.
;staff.mail.eg.zone. 21600 IN SOA ns1.he.net. dnsmaster.he.net. 2 21600 3600 259200 300

_dmarc.staff.mail.eg.zone. 300 IN TXT "v=DMARC1; p=none; sp=none; fo=1; aspf=s; adkim=s; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com"

exmail._domainkey.staff.mail.eg.zone. 300 IN TXT "v=DKIM1; k=rsa; p=H23456789039digNp7HWM3+FK9xfWR4vFAX7Xpdy1Q78eR7MsysdGK0i9Wn8OzHFNZsicBuDU8PFtq39TLVq1ahlNHhgMIGfMA0GCSqGSIb3DQEBAQUAAaassB0EZueo2GCtZE5dmbrwIDAQAB"

使用命令导入:

1
gcloud dns record-sets import ./staff-mail.zone --zone-file-format -z "staff-mail"

然后你会看到大致如下:

1
2
3
4
Imported record-sets from [./staff-mail.zone] into managed-zone [staff-mail].
Created [https://www.googleapis.com/dns/v1/projects/project-demo-20180104/managedZones/staff-mail/changes/1].
ID START_TIME STATUS
1 2018-01-03T17:49:26.367Z pending

关于导入的小提示:

  1. 注释掉 ns 和 soa 记录,因为你的 zone 文件来自于先前的 dns 服务商,很明显这里要使用 Google Cloud DNS 的新内容了,如果你对 SOA 记录的部分内容有修改需求,可以等导入以后再图形界面修改即可。
  2. 部分 txt 字段过长可能会导致导入失败,当前已知如果你的 Gsuite 的 dkim 使用了 2048 位的话会因为记录过长而导入失败,所以需要改成 1024 位。

导出记录

1
gcloud dns record-sets export staff-mail.zone --zone "staff-mail" --zone-file-format

列举当前变更

1
gcloud dns record-sets changes list -z "staff-mail"

然后你会看到大致如下:

1
2
3
ID  START_TIME                STATUS
1 2018-01-03T17:49:26.367Z done
0 2018-01-03T17:10:13.956Z done

可以看到 ID 为 1 的 changes 已经从 pending 变为 done 了。

描述当前变更细节:

此处我们查看上面我们导入操作这个 changes 的细节内容,所以 ID 指定的是 1:

1
gcloud dns record-sets changes describe 1 -z "staff-mail"

得到回馈大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
additions:
- kind: dns#resourceRecordSet
name: _dmarc.staff.mail.eg.zone.
rrdatas:
- '"v=DMARC1; p=none; sp=none; fo=1; aspf=s; adkim=s; rua=mailto:postmaster@example.com;
ruf=mailto:postmaster@example.com"'
ttl: 300
type: TXT
- kind: dns#resourceRecordSet
name: exmail._domainkey.staff.mail.eg.zone.
rrdatas:
- '"v=DKIM1; k=rsa; p=H23456789039digNp7HWM3+FK9xfWR4vFAX7Xpdy1Q78eR7MsysdGK0i9Wn8OzHFNZsicBuDU8PFtq39TLVq1ahlNHhgMIGfMA0GCSqGSIb3DQEBAQUAAaassB0EZueo2GCtZE5dmbrwIDAQAB"'
ttl: 300
type: TXT
- kind: dns#resourceRecordSet
name: staff.mail.eg.zone.
rrdatas:
- 10.134.12.34
ttl: 300
type: A
- kind: dns#resourceRecordSet
name: staff.mail.eg.zone.
rrdatas:
- 2604:a880:1a:2c::6b:1
ttl: 300
type: AAAA
- kind: dns#resourceRecordSet
name: staff.mail.eg.zone.
rrdatas:
- 10 alt1.aspmx.l.google.com.
- 20 alt2.aspmx.l.google.com.
ttl: 300
type: MX
- kind: dns#resourceRecordSet
name: staff.mail.eg.zone.
rrdatas:
- ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 2 21600 3600 259200
300
ttl: 21600
type: SOA
deletions:
- kind: dns#resourceRecordSet
name: staff.mail.eg.zone.
rrdatas:
- ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600 259200
300
ttl: 21600
type: SOA
id: '1'
kind: dns#change
startTime: '2018-01-03T17:49:26.367Z'
status: done

列举记录集

1
gcloud dns record-sets list -z "staff-mail"

得到回馈差不多和我们导入的 zone 文件内容一致,就是当前的记录集。

导出

1
gcloud dns record-sets export staff-mail.zone --zone "staff-mail" --zone-file-format

添加事务

这里我们添加两个事务,不使用 –transaction-file 表示使用了默认的事务文件名即”transaction.yaml”。

1
2
gcloud dns record-sets transaction start --zone="staff-mail"
gcloud dns record-sets transaction start --zone="staff-mail" --transaction-file="exmail.yaml"

添加记录到事务

这里我们把上面提到的 A 和 AAAA 添加到默认事务,把 MX 和 DKIM 和 DMARC 添加到 “exmail.yaml” 事务中。

1
2
3
4
gcloud dns record-sets transaction add --name "staff.mail.eg.zone." --ttl 300 --type "MX"  "10 alt1.aspmx.l.google.com." --zone "staff-mail" --transaction-file="exmail.yaml"
gcloud dns record-sets transaction add --name "staff.mail.eg.zone." --ttl 300 --type "MX" "20 alt2.aspmx.l.google.com." --zone "staff-mail" --transaction-file="exmail.yaml"
gcloud dns record-sets transaction add --name "_dmarc.staff.mail.eg.zone." --ttl 300 --type "TXT" "v=DMARC1; p=none; sp=none; fo=1; aspf=s; adkim=s; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com" --zone "staff-mail" --transaction-file="exmail.yaml"
gcloud dns record-sets transaction add --name "exmail._domainkey.staff.mail.eg.zone." --ttl 300 --type "TXT" "v=DKIM1; k=rsa; p=H23456789039digNp7HWM3+FK9xfWR4vFAX7Xpdy1Q78eR7MsysdGK0i9Wn8OzHFNZsicBuDU8PFtq39TLVq1ahlNHhgMIGfMA0GCSqGSIb3DQEBAQUAAaassB0EZueo2GCtZE5dmbrwIDAQAB" --zone "staff-mail" --transaction-file="exmail.yaml"

描述事务细节

1
2
gcloud dns record-sets transaction describe --zone="staff-mail"
gcloud dns record-sets transaction describe --zone="staff-mail" --transaction-file="exmail.yaml"

我们会发现 SOA 属于默认事务。

从事务里删除记录

1
gcloud dns record-sets transaction remove --name "_dmarc.staff.mail.eg.zone." --ttl 300 --type "TXT"  "v=DMARC1; p=none; sp=none; fo=1; aspf=s; adkim=s; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com" --zone "staff-mail" --transaction-file="exmail.yaml"

中断事务并且删除事务文件

1
gcloud dns record-sets transaction abort --zone="staff-mail"

启用 DNSSEC 支持

1
gcloud beta dns managed-zones update "staff-mail" --dnssec-state on

禁用 DNSSEC 支持

1
gcloud beta dns managed-zones update "staff-mail" --dnssec-state off

如果启用了 DNSSSEC 的话,在域名注册商那里填写相关的 DS 记录或者其他信息即可。

DNSSEC 状态验证

其他使用 Google Cloud DNS 办法

其实是没有办法的,但是,发现 Google Domains 默认提供的 DNS 服务使用的 NS 和 Google Cloud DNS 是一样的。作为个人和小流量没有苛刻需求的情况下,可以把域名转入 Google Domains 来几乎免费使用和 Google Cloud DNS 品质一样的 DNS 解析服务。

Google Domains 自带 DNS 解析大致特性

  1. 内建支持 DNSSEC 而且方便使用只需要启用即可,手动添加 DS 的步骤都省了;
  2. 支持动态 DNS 解析;
  3. 支持一键设置 Gsuite 各种相关的 DNS 记录;
  4. 支持设置跳转;
  5. 可以设置胶水记录(glue records);
  6. 支持 CAA DS SSHFP TLSA 记录;
  7. 但是当前已知 Google Domains 自带 DNS 限制每个域名只有 100 条记录(对一般需求绝对够用);

Google Domains 官方页面

  1. Google Domains 价格列表和支持的域名类型
  2. Google Domains 帮助页面
  3. Google Domains 官方特性介绍

  1. 提到的服务或/和价格可能在你查看本贴的时候改变了;
  2. 如果你还知道靠谱的服务可以反馈给我;
  3. 转载不需要获得授权但需要链接到本文;
  4. 最后更新2019年1月31日;

DNSPod 中国版

方案:免费版,个人专业版,企业基础版,企业标准版,企业旗舰版

没有被腾讯收购前尤其是没有编入腾讯云之前,大红大紫是个人都喜欢,限制小功能强大。后来被腾讯收购以后现在变成了 腾讯云解析 ,官网基本上就是个空壳了感觉,限制也特别大,曾经追捧 DNSPod 免费版的个人站长和一些博客博主很多人都觉得 DNSPod 免费版的服务质量在下降。

腾讯云解析价格总览:这里 。而且貌似 发生过多次让大家不爽的事情 事件1 事件2

它的优势在于对于国内刚需(忽略备案)和域名实名制问题以后的企业而言,运营商线路细分和省份线路细分会有一定的优势,对于死不回国(不接受实名制和备案)的个人用户而言,意义不大。同时,免费版不提供 SLA,而个人收费版 99% SLA 和企业版 最低 99.9% SLA。

DNSPod 国际版

出了国门的 DNSPod 就什么都不是了,没有那么强的竞争力了,毕竟,能撑起半个互联网的 DNS 解析服务商也是有的,超长历史的 DNS 解析服务商也是有的。如果国内版 DNSPod 面向中国大陆,那无疑国际版就面向海外用户了,主要是加快了海外用户的解析速度,据说解析服务器全部在美国。当然,不用把域名实名制和备案。

国际版网站给出了一个成功案例,里面有星巴克中国,星巴克中国作为腾讯的战略合作伙伴选择的不是国内版 DNSPod 而是国际版,囧,这当然不是考虑到备案和域名实名制问题(星巴克中国在上海)。当前(2017年12月27日)DNSPod 国际版首页顶部出现提示文字:

DNSPod 国际版解析业务暂停维护,不影响您继续使用。如操作过程中给您带来不便,敬请谅解!国内用户请访问 www.dnspod.cn

Cloudflare DNS

方案:免费版,专业版,商业版,企业版

全球知名的 CDN 服务商,世界级 DNS 服务商,属于这个行业的第一梯队的企业。

特点:低延迟,超低延迟而且全域名提供 DNSSEC 支持,但是免费版只有两组解析服务器,收费版最便宜的价格是20美元,但是提供四组服务器,提供 DDOS 保护服务,流量统计,SSL加密,加速,缓存,流量控制等等众多强大功能,支持 Anycast 技术,支持 IPv6,但是只支持顶级域名。当前(2017年12月27日)他家的 CAA 记录正在测试?我没有申请参加测试但是我新添加的域名里面已经可以添加 CAA 记录了,但是 CAA 添加的界面这几天经常变化;而且,他家的 CAA 记录,会额外添加几个 CA,比如你只授权了:

issue: letsencrypt.org flags:0

那么额外的几个将是:

1
2
3
4
5
6
issue: comodoca.com flags:0
issue: digicert.com flags:0
issue: globalsign.com flags:0
issuewild: comodoca.com flags:0
issuewild: digicert.com flags:0
issuewild: globalsign.com flags:0

方案比较:https://www.cloudflare.com/plans/#compare-features

网络节点地图https://www.cloudflare.com/network/

提示:免费版只支持顶级域添加;

DigitalOcean DNS

方案:免费

这个网站中国大陆网民特别熟悉了,他家的“Networking”里面又个“Domains”的子功能就是 DNS 了。DigitalOcean DNS 是免费服务,无论你是否使用了他家的 VPS 都可以免费使用,有三组免费的解析服务器。

特点:提供 A,AAAA,CNAME,MX,TXT,NS,SRV 和 CAA 记录解析而且界面美观生效速度快?

This provider uses CloudFlare Virtual DNS to proxy-cache DNS request through CloudFlare

可见,基本可以理解为 DO 的 DNS 是 Cloudflare 的一个代理或者是一个前端。暂时没有发现有什么官方说明的限制。

官网指导:https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars

DigitalOcean DNS 算不上专业的 DNS,官网的介绍页面也很少,但是可以 DO 的定位是 Developer VPS,所以参考这一条可以理解一下他的 DNS 满足 Developers 应该是没有什么问题的。大的亮点没有,大的问题也貌似没有。

NSone

方案:入门版(STARTER),基础版(BASIC),高级版(ADVANCED)

世界级 DNS 服务商,后起之秀,专门做 DNS,CDN 的厂商,从解析速度,专业程度,知名客户程度判断的话可以列入 DNS 服务商第一梯队,也支持很多高级的特性,也有很多大厂知名客户。
有免费套餐,注册必须使用信用卡而且我注册的时候被要求发了真实信用卡的照片到邮箱通过了人工审核。

各种方案:https://ns1.com/pricing#managed

特性:支持流量控制,有专门针对中国大陆的 Managed DNS for China 服务,支持 Anycasted 任播,高频监控,支持 GEO 路由,支持 Linked Zones,支持导入,支持部分修改 SOA 记录,支持超全记录类型包括 AFSDB,CAA,CERT,DS,HINFO,NAPTR,PTR,RP这些,根据我前段时间(2017年12月)的邮件咨询,DNSSEC 支持将在 2018年第一季度上线,同时支持当作 Secondary Zone/从属 DNS/slave dns 使用,同时支持 DNS 记录在线迁移 zone transfers 功能(AXFR),可以把 DNS 同步到另一个 DNS 那里比如 he.net 使它作为从 DNS 使用。当然 也支持 API 编程。而且可以统计 24 小时内某条记录的被查询数,几乎实时统计。

免费限制:每月 50 万次查询,这个规模不适合大规模应用,小站长博主,小型企业没有任何问题;虽然 DNS 记录数没有限制,但是所有的域名加起来只支持 50 条 DNS 记录,包含一个监控器。

Linode DNS

方案:有条件免费

如同 DigitalOcean 一样,
_This provider uses CloudFlare Virtual DNS to proxy-cache DNS request through CloudFlare_。但是不同的在于 Linode DNS 只有你在使用它家的 VPS 的时候(至少有一台 VPS 在计费)才可以使用,否则不能使用,如果你没有开通 VPS,则会被告知:

Your zones will not be served by Linode’s nameservers unless you have at least one active Linode on your account.

特点:五组服务器,支持常规记录以外还支持 CAA 记录,也支持当作 Slave DNS /从属 DNS 使用。

官方介绍:https://linode.com/docs/networking/dns/dns-manager-overview/

对 DNS 有高要求的个人和企业不建议使用,作为普通解析用用小流量还是可以的,也是一款 Developers DNS。支持 DNS 记录导入。

Dyn

方案:付费 / 开发者版,商业版,企业版

世界级 DNS 服务商,DNS 服务领域全球老大哥,扛着着半个互联网,后来被 Oracle 甲骨文收购了。以前有免费服务,现在没有免费服务了,最低是 $7/月 的 developer plan。

价格详细:https://dyn.com/dns/pricing/

特性:毋庸置疑能想到的都支持,比如支持全球范围 Anycast 技术,支持日志,支持 API,DDOS 保护,GEO 路由,Failover,DNSSEC(貌似只支持有限的域名后缀种类),同时有 Secondary DNS 服务,也有 动态 DNS/Dynamic DNS 服务。是不差钱的土豪企业和个人的最佳选择。看个新闻就懂了这家老大哥在互联网领域的地位 《DNS服务遭攻击 欧美大半个互联网沦陷了

提示:

  1. 官方时不时在一个专门的页面有优惠券送;
  2. 如果你的账号一段时间内没有激活的服务则账号会被关闭;
  3. (第三方搜到的优惠券可能比官方的优惠力度大);

Constellix

方案:付费 / 开发者版,企业版

计费模式很复杂,具体请看 https://constellix.com/pricing/dns/ ,当然官方也提供了一个计算器 https://constellix.com/pricing/pricing-calculator/ 帮你搞定费用问题。

DNS 领域的全球老大哥 DNS Made Easy 团队设计开发的 DNS 产品,没有查到历史有多久远,但是域名 https://www.whois.com/whois/constellix.com 是 2009年11月23日 注册的。由于 DNS Made Easy 良好的口碑和业界的认可程度,应该不会有很大问题。

支持特性:企业级 100% SLA 支持,GEO 路由支持,对于企业级支持 Secondary DNS,对于开发者 支持 CND,支持 API,支持流量优化/控制,流量分析,支持 CAA,支持 DNSSEC,支持 Vanity DNS,支持日志。

Zilore

方案:付费 / 个人版,专业版,商业版

专业 DNS 服务商,个人版差不多在 $5/月左右徘徊,没有免费服务。个人版支持 5 个域名,但是记录数无限制,查询数也没有限制,每多一个域名 $0.5 。年付的价格是 $50/年,但是如果年付的话每多一个域名则价格为 $5/月/个

特性:支持 GEO 路由,支持 Failover,支持 Failover Website(包括 SSl),支持 Anycast DNS(任播技术),DDOS 保护,IPv4/IPv6支持,支持 ALIAS 记录,支持新域名后缀,个人版最低 TTL 300秒,专业版最低 TTL 60秒,企业版最低 TTL 30秒。支持域名快照,支持预设,支持解析记录模板,支持统计,支持邮件转发,最少 99.90% SLA 保证。支持 Aname记录。

DNSimple

方案:付费 / 开发者版,专业版,企业版

新兴 DNS 服务商,知道它是从 Github Education Student Developer Pack 里面送过大额的代金券,貌似是 $100(现在已经没有了),从整个网站来看 DNSimple 是一家很热爱 DNS 的公司(废话),而且他们的 logo 比较萌。

价格方面:开发者服务 $5/月 or $50/年;专业版 $25/月 or $250/年,企业版 $250/月 or $2500/年,价格还是相当可以的。各个版本的差异可以到 https://dnsimple.com/pricing 查看包括价格在内。

特性:相当的都支持,包括个人乞丐版支持 Anycast 技术,API 支持,Secondary DNS,DNSSEC 也支持,解析速度也比较快。

特色中的特色:可能整个公司的员工是文艺青年的缘故,他们会根据你的 DNS records 来给你作曲一个,最下面有一个播放按钮。这个叫做 DNSound,Hear your domains 是他们的介绍和整个功能的界面预览。

提示:

This provider uses CloudFlare Virtual DNS to proxy-cache DNS request through CloudFlare*

DNS Made Easy

方案:付费 / Small Business,Business,Corporate / No Obligation Free Trial

世界级 DNS 服务商,DNS 服务领域全球老大哥,DNS 行业领域的零大哥级别。都是年付,没有月付价格,没有试用。

不同的特性支持依赖于不同的付费方案,具体可以参看 https://dnsmadeeasy.com/pricing/ ,支持的域名和查询次数也是有限的。值得一提的是在 DNS 解析整个领域,DNSMadeEasy 是有话语权和一席之地的鼻祖级企业。

还值得一提的是,国外的企业,有一部分会在自己的网站上列举一些竞争对手和自己的产品的特性或者价格比较等等,这点 DNSMadeEasy 也不例外,在这里 https://dnsmadeeasy.com/pricing/pricecomparison/ 。这个行为貌似通常在国内的行业内不会?还有比如 Namecheap 啊 Namesile 啊 GoDaddy 啊等等都有过这种做法,把自己和别的竞争对手比较,还有一些主机商,域名注册商也都是如此。

特性:100% SLA,Failover,API,实时统计,支持 ANAME 记录,支持 GEO 路由,支持 Vanity DNS,支持 Record Templates。

UltraDNS

方案:付费

据称是企业 Managed DNS 领域具有一定历史和地位的服务N多高端客户的 DNS 专业服务商,据说 Amazon 就试用他家的服务,价格奇贵,而且是根据查询数来购买的,对于低级的套餐支持的特性比较少,高级的则比较良好,属于贵族 DNS,个人基本没有办法使用。

具体请看 https://www.security.neustar/dns-services/managed-dns-packages请用 Google Chrome 打开,否则可能不能正常显示!

ClouDNS

方案:免费 专业版 创业版 商业版

专业 DNS 服务商,他们包含有只支持 3个 域名而且有限特性的免费版功能。收费方案包括三个大类,第一类 Premium DNS hosting 有 free,Personal $2.00/month ,StartUP $5.00/month 和 Business $15.00/month 。然后还有 DDOS Protected DNS 和 GEODNS 两大类方案。整体而言,虽然价格很灵活,但是价格是比较合理的,而且官网常年有活动,价格非常低廉。要说唯一的缺点,就是网站不够酷炫不够现代(可能是另一种我欣赏不了的美吧!)

如果不区分付费方案的话,支持的特性包括几乎听过的全部特性,包括:DNSSEC,甚至包括 DNSSEC for Secondary DNS(这是非常少见的),Zone transfers(AXFR),动态 DNS,反向 DNS,SOA 可编辑,还可以针对每个记录设置 TTL,100% SLA,支持 NAPTR,支持 GEO 路由,当然也支持 DDOS 保护。支持 Anycast 技术。

GoDaddy Premium DNS

方案:付费 / starting at $2.39/月

由于 GoDaddy 业内域名数量第一的缘故,所以 GoDaddy 的 DNS 市场占有率超高,无法知道到底是 免费+收费 市场占有率高,还是免费市场占有率高,还是收费市场占有率高。只说收费 DNS 的问题吧,价格不贵,而且 GoDaddy 常年海量的优惠券和满额优惠的活动,价格确实不贵,但是国内使用的话就要考虑连通率的问题了(这不是 GoDaddy 的错)。

支持特性:最多支持 5个 域名启用 DNSSEC,支持 Secondary DNS,支持 5个9 的 99.999% SLA,支持 records Templates,内置错误检查。支持无限多个域名,支持无限多个记录,支持 Anycast 任播技术。

由于 GoDaddy 比较适合大宗购买域名,所以他们的 DNS 适合大量囤积域名的时候使用而不启用 DNSSEC,对于主要使用的非停靠域名,还是使用 DNSSEC 比较好。

RcodeZero

方案:付费 €19/月起步

价格详细:https://www.rcodezero.at/en/home/#pricing

欧洲一家专业的 DNS 服务商,价格比较贵,该支持的都支持,但是价格低廉的套餐就不一定支持。

不考虑套餐的情况下支持的特性:统计,DDOS保护,DNSSEC支持,AXRF支持并且支持TSIG(这个很少见),API,无限制查询数,当然也支持 IPv6。每个域名支持 100条 记录。

EasyDNS

方案:付费 $35/年起步

专业 DNS 服务商,有三类三产品:

DNS Standard:$35/年

特性:API,3 Anycast,3 easyMail Mailboxes(难道是送3个邮箱?)

DNS Pro:$55/年

特性:100% SLA,API,Failover,修改 SOA记录,动态DNS,每条记录分别设置 TTL值,500万查询数每月,4 Anycast,10 easyMail Mailboxes。

Enterprise DNS:$153/年

特性:相比 DNS Pro 多了客服支持,100% SLA,电话支持等等。

HE.net DNS

方案:免费

免费,稳定,强大,古老的 HE DNS 几乎无人不知。

最近的添加是支持了 CAA记录,优点就不说了,总之都是优点,只说缺点吧。HE DNS 是很多人想起“免费DNS”的第一反应,支持五组 DNS 服务器,同时,支持 AXFR 域名迁移(但是不支持 TSIG),还支持查看当前 Zone 文件;

缺点:别人支持的强大的功能它不支持的都是缺点,生效速度比较慢,不能修改 SOA,不支持 API,现在支持 50个 域名(包括从DNS(slave dns)和反向DNS(reverse dns))。

提示:

  1. 因为生效速度慢的问题,所以先把你要解析的域名的 ns 修改成 he 的(ns1.he.net ns2.he.ent ns3.he.net ns4.he.net ns5.he.net),然后再去添加域名;如果你的 NS 只能添加四条的话,随便选择四条即可,建议写除了 ns1 以外的四条;
  2. 官方提示建议把资料改成你真实的,以便在需要的时候证明你的身份和你的拥有关系;
  3. 修改个人资料的地方是 页面左侧“Quick Links”中的“Certification”页面,登陆以后点击左上角的“Update Info”即可修改个人资料;
  4. 由于 HE.net 账号是可删除的,而且支持二次验证登陆,所以当你有重要的域名在上面的时候建议启用二次验证。

CloudfloorDNS

方案:付费 / 企业版 $50/月起,Secondary DNS $40/月起

专业 DNS 服务商,只有企业版和 Secondary DNS 两种方案。

特性支持:无限个域名,无限查询数,免费负载均衡,DDOS保护,DNSSEC,可选的 GEO 支持(Starting at $100/month)100%SLA,可选的 Failover支持(Starting at $85/month)。

Vultr DNS

方案:免费

如同 DigitalOcean 和 Linode 一样,Vultr 也有自己的 DNS 服务,首先看官方介绍 https://www.vultr.com/docs/introduction-to-vultr-dns 。同时,Vultr 是无条件免费使用的,限制暂时没有发现,官方介绍也很少(和其他两个 VPS 服务商一样)。

特性:支持CAA记录,最近支持了 DNSSEC,SOA部分可编辑比如电子邮件地址,支持SSHFP记录。关于特性的官方介绍 https://www.vultr.com/news/Get-More-With-Vultr-DNS/ 。如果你想很方便地使用以下 DNSSEC 的话,大部分都可以从这里开始因为很简单。

DNSPark

更新:2019年1月31日

DNSPark 已经在2018年8月1日永久关停了

外部链接一:
DNS Park Permanent Shutdown August 1, 2018

外部链接二:
Are you shutting down your business?

方案:免费版,基础版,标准版

专业 DNS 服务商,免费版几乎什么特性都不支持而且只支持 10条 记录。

不考虑收费方案的情况下,特性支持包括:Anycast支持,动态DNS,API,Secondary DNS,AXRF 支持,支持 TSIG,支持 DNSSEC(support DNSSEC via our secondary DNS service)。

EntryDNS

方案:有条件免费版,专业版

先说说收费的事儿,收费很有意思。不论你选择那种服务方案,你注册账户都必须付费注册费 $10,然后你使用免费版的话就可以随便用了,如果使用收费版的话 $10/年。

免费版特性:最多支持 25个 域名,支持 25个 子域名,API,记录类型免费版收费版没有区别,TTL 设置免费版收费版美区别。

收费版特性:域名和子域名数量无限制,DNSSEC 支持,IPv6 支持动态 DNS,Vanity DNS。

Verisign Managed DNS

方案:付费

Verisign 有一些人可能不太了解,一句话介绍就知道它在互联网上的地位了:它运营着 .com .net .gov .name .edu .tv 等一大堆。还有你听过的传输中的 13组(注意是13组,不是13太,关于为什么是13组,请参考知乎 https://www.zhihu.com/question/22587247) 顶级 DNS 服务器中的 2组 。Verisign 称得上是真正的“互联网基础运营商”。那么问题来了,他家的 DNS解析服务,如果说不上数一数二,那肯定也不差。

特性:监控,Failover,GEO,Weighted Load Balancing 加权负载均衡,动态流量控制,DDOS 保护,支持主从DNS,DNSSEC 支持,API。

购买:当前 Verisign 只能通过代理商购买,当前官网给出要给供应商叫做 analyze 页面:https://vsr-reseller.analyzecorp.com/vsr/quote.html

Namecheap DNS

方案:免费的 BasicDNS 和 付费的 PremiumDNS

Namecheap 作为 eNom 的代理商,是价格合理,活动多,服务比较不错的,尤其是随时在线的 Live Chat 客服更是基本是行业里最好的了,有什么不清楚,只要有登陆账号不管是不是他们的产品付费用户都可以问,态度也都很不错。 Namecheap 提供有域名自带的免费的 BasicDNS 和 付费的 PremiumDNS 两种服务。这里重点说下付费的 PremiumDNS 服务,该服务由前面提到的 Verisign Managed DNS 提供,可靠性自然不用说。

特点:100% SLA,DDOS 保护,DNSSEC 支持,Anycast 技术,月查询限制200万次。价格是 $4.88/年/域名

几条友好提示:

  1. 付费 PremiumDNS 可以给任何注册商的任意域名使用,不管域名是不是注册在 Namecheap;
  2. 一个付费 PremiumDNS 只能使用一个域名,以后不能切换到其他域名;
  3. 如果你要使用 DNSSEC 功能的话,则域名必须注册在 Namecheap;
  4. 当前只支持14中后缀的域名使用 DNSSEC,具体参看 https://www.namecheap.com/support/knowledgebase/article.aspx/9718/2232/nameservers-and-tlds-supportedunsupported-by-dnssec

特别注意:.org 不支持 DNSSEC

Google Cloud DNS

方案:付费 / 按量付费

看到名字就知道个大概了,没错,它是 Google 出品,是 Google Cloud Platform 中网络相关产品中的一个。Google Cloud DNS 是 Google 推出的一款可靠的,弹性的高可用低延迟价格低廉的权威域名解析服务。由于 Google 的作风重视开发者,重视底层服务,我们肯定猜得到必然是可编程的 DNS 服务,而且一定是提供了比较先进的特别遵循 RFC 标准的解析服务。

价格方面:按量付费,此服务不包含在 Google Cloud Platform 的免费套餐 https://cloud.google.com/free/ 里,也不包含在永久免费套餐 https://cloud.google.com/free/docs/always-free-usage-limits里。价格由两部分组成,一个是托管的域名数量,一个是域名被查询的数量,二者结合实行阶梯计价的,对于第一阶梯来说,对于 0-25 个域名内,$0.20/月/个 域名,对于 0-1百万查询内,$0.40/月/域名。比如你有5个域名,一共加起来月查询数是1000万次,那么价格是 域名 0.2_5=1 ,查询 10_0.4=4,则一共是 1+4=5美元/月。而所有域名在功能方面都是一样的,都可以使用全部的功能和享受全部的特性。

特性支持:毋庸置疑首先支持的必然是 Anycast 任播技术,高可用 100% SLA,API,最低 1秒 TTL,超全记录类型支持比如 CAA DNSKEY DS NS IPSECKEY NAPTR SSHFP TLSA,当然支持 IPv6,SOA可编辑,以前不支持 DNSSEC 最近刚刚支持 DNSSEC 了(2017年12月)而且是所有后缀类型域名都支持,除了支持 API 是可编程的 DNS 以外还提供命令行工具来控制,命令行提供了 Zone 文件的导入功能可导出功能(导入导出在 WEB 界面是不提供的)。

友好提示:根据网友 提示1 提示2 Google Cloud DNS 中国大陆使用可能会有连通率问题。

Amazon Route53

方案:付费 / 按量付费

当然,是 Amazon AWS 众多服务中的一个,高可用,可扩展,可编程强大 DNS 中的一个, Route53 在众多知名网站中使用率很高,这和亚马逊云计算强大稳定是分不开的。

Route 53 支持两种服务,一种是公网解析,就是我们平常所说的域名解析;还有一种是私网解析,如果你有多台亚马逊的云主机,可以组合一个私网,用 Route53 来解析他们。

除此之外, Route53 还支持很多高级的特性。当然,可编程是一定的。除此之外,Route53 是 DNS 解析服务中少见的支持查询日志记录的服务商,不但记录日志,而且日志可以导出到 Amazon S3,还可以和其他亚马逊的服务集成,对日志做深度分析。查询日志是按照一定的规则组织的,当然基本上包括了日志需要记录的常规数据。

费用方面:费用由这么几个方面组成:

  1. 托管的域名数量
  2. Traffic Flow 记录数
  3. 标准查询数
  4. 基于延迟的路由查询数
  5. Geo DNS 和临近地理位置查询
  6. 运行状况检查

如果不是大流量的企业客户,只需要关注托管的域名数量和标准查询的数量即可,基本上标准查询大多数普通用户也都再第一阶梯内,值得注意的是,Route53 设置域名以后不会立马收费,如果你在12小时内删除(比如仅体验或者做测试)则是不收费的,如果是超过12小时,则按照完整一个月的费用收取。于定价的详细信息 https://aws.amazon.com/cn/route53/pricing/

特性支持:除了和已有地 AWS 深度集成这个特有功能比如 Amazon VPN 和 私有 DNS,支持 CloudFront 和 S3 的裸域,同时和 ELB 深度集成,还支持流量控制,基于延迟的路由,Geo DNS,故障转储,运行状态检查,支持加权轮循(WRR),Failover 当然也是支持的,Anycast 当然也不例外也支持。

目前唯一的缺点:不支持 DNSSEC 。

Zoneedit

方案:免费 付费增值服务

互联网上非常老牌的免费 DNS 服务商,和 EasyDNS 是同一家;如果他自称爸爸就没有敢自称爷爷的了。几年前改版了一次,貌似发生了一次并购,以前的账户几乎不能用了,反正我试了官方提供的各种方法都没有找回自己的老账号,然后就迫不得已重新注册了一个。

限制:免费账户最多3个域名;非商业使用;25万查询/月;没有 SLA;只支持顶级域添加;

费用:默认的免费账户只有2个域名可以添加,如果你注册了账户收到一个问卷调查的话会多增加一个域名使用资格,一共就可以添加3个域名。

他们家的收费和别人不太一样,别人直接收货币而且一般都是美元,他家是按照点数计算的,一个点购买价格是 $1.4 ,如果购买 5点 的话是 $5,购买多则优惠多。Managed DNS 增值服务需要1个点数服务包包括 4组 NS 服务器,免费的只有两组;Dynamic DNS 动态DNS,WebForward 和 MailForward。Tertiary DNS 需要1个点数;Failover 需要1个点数;Backup MX需要1个点数;费用的具体可以参考 https://www.zoneedit.com/pricing/

特点:老牌大致的意思就是稳定,SOA 只支持修改时间相关;动态DNS;支持隐式转发(stealth forwarding);支持CAA;支持一个查询数量的统计,不是实时的,只是一个数字,每天有多少多少;支持图形化导出和导入,支持查看当前 Zone 文件;和其他不太一样的是它提供一个查看当前添加的域名过期信息的小功能,虽然用处不是特别大但是感觉也算贴心吧;同时支持 DNS 记录在线迁移 zone transfers 功能(AXFR),这个可以配合把比如 HE.NET 或者 NS1 这种当作一个 slave DNS 使用,但是这个传输目前没有发现支持加密 TSIG

1984hosting

方案:免费

自我介绍里面说是冰岛一家2006起步的公司,主要是卖主机的但是也提供免费的 DNS ,他们说自己已经成为了冰岛最大的主机商,作为小厂(对于其他竞争对手来说)本来是不会单独提出来的,主要是,他家的免费 DNS 在 2017年末这个大部分商家都不提供 DNSSEC 的情况下它提供针对全部域名支持的 DNSSEC 服务。

免费DNS提供主要DNS(Master DNS),从DNS(Slave DNS)和动态DNS(Dynamic DNS)。根据查询 NS 服务器得知他家的 DNS 架构在 Vultr 的机器上。

特点:最大的亮点支持 DNSSEC,支持 AXFR zone transfers 功能,支持记录模板可以快速添加常见的服务的解析比如 Office 365 需要的记录,支持 CAA,支持 SSHFP 记录,最小 TTl 900秒,支持二级域使用 DNS 服务,有个”Zone History”功能。

微林vxDNS

方案:免费

微林一般人知道都是从网络加速,服务中转知道的。他家也提供DNS解析服务,并且免费。官方页面一贯地简洁,介绍不多,已知的限制是只能添加顶级域。

特点:内置支持主要国家的地理信息解析,高度可配置的地理信息,比如你设置可以直接给北京联通的一个网段配置一个解析;支持24小时内的查询数以图标方式展示统计;自带 A记录宕机切换 功能,默认关闭的,打开就可以了。有三组服务器。支持 API 可编程 DNS。支持裸域设置 CNAME 记录。最大最大的特点是高度可配置的区域信息,如果你需要高粒度的GEO解析,请用微林vxDNS。

这篇文章翻译自 FastMail 官方博客
原文:https://blog.fastmail.com/2016/07/22/how-totp-authenticator-apps-work/

这是 mini-series 关于安全的第五篇文章,为了标记一下我们的登陆和认证系统即将到来的安全更新(upcoming security upgrade)。所有新的改进将在 2016年7月25日 发布。


下周我们将推出一项更新以便使用二次验证来更容易地确保你的账户安全。

如果你打开了二次认证,那么每次你在一个新的计算机上登陆的时候你将在你的普通的密码之外额外多一次验证的步骤。

通过完成这个额外的步骤它证明你有难以被攻击者获取的东西:一个特定的安全设备,或者你的手机上安装的某个软件产生的一串安全密码。

注意:当你登陆系统的时候,你可以选择信任这台计算机,这样的话就不用每次进行二次验证了。

你可以添加任意多不同的安全设备到你的 FastMail 账户;然后可以使用任何一个去验证你的账户。我们将提供三种的不同类型:

⦁ TOTP(Time-Based One-Time Password / 基于时间的一次性密码)
⦁ FIDO U2F (Universal 2nd Factor from the Fast IDentity Online alliance); and
⦁ Yubico OTP (a proprietary one-time password scheme from Yubico / 来自 Yubico 公司的一个专有的一次性密码方案).

一旦你设置了他们中的一个,你也可以通过你的任意密码保护手机短信得到一个一次性验证码来完成二次认证。

在这篇文章中,我们试图以一种容易理解的方式解释 TOTP 底层的工作方式,附带简略介绍它的优缺点。敬请期待后续关于 U2F 和 Yubico OTP 的更多文章!

How TOTP (authenticator apps) work

TOTP 代表 基于时间的一次性密码(Time-Based One-Time Password)。它是一个已经被标准化了的基于共享密钥(意思是,被我们的服务器和你的手机共享,不是指其他人!)产生一个定期改变的代码的方法。由于它是一个标准,所以你可以在手机上使用许多不同的支持它的(大多数是免费的)认证软件。一些最流行的有 Google Authenticator, Authy, Duo1Password

当你配置 TOTP 的时候,我们的服务器产生一个安全密钥 — 一串随机数字和字母。然后你保存这个 key 到你的手机,通常是用手机上的认证软件扫描二维码(2D bar code)(如果你的手机没有摄像头的话你可以手动输入)。

现在你的手机和我们的服务器都有一份这个安全密钥了。当你想登陆服务的时候,你需要证明你有安全密钥。怎么证明呢,你的认证软件结合当前时间(to the nearest 30 seconds)产生一个访问码。它没有使用类似“secure hash function”(对于加密头它使用的是 HMACE-SHA-1,如你所知).通俗地说,它把时间和你地密钥混合起来产生了一个唯一的输出(如果时间或者密钥有一点细微的不同则输出完全不同),但是不可逆的(输出的随机码对猜测密钥没有帮助)。为了简化输出,访问码被缩短成了六位数字。

当提示你输入的时候则把访问码输入文本框:

服务器重复验证直到你输入的访问码和服务器产生的访问码匹配,则你登陆成功!

Strengths and weaknesses

使用免费的 iPhone, Android, Blackberry 甚至 Windows Phone 应用程序,TOTP 是一种快捷廉价和容易启用的二次认证方式。它也是被支持最广泛的方法 — 你可以用同样的程序来给你的 FastMail, Google, Dropbox, GitHub 和其他的网站/服务。

它的工作原理很简单(在加密方面)而且安全。甚至攻击者看到了这个一次性密码,他们也完全不能猜测下一次产生的是什么。唯一的可行(猜测下一次产生的是什么)的方法是使用密钥,当然它被安全地保存在你地手机和我们地服务器里。

由于一次性密码是根据当前时间产生的,所以你的手机和服务器必须大致在相同的时间去计算。这很少会出问题,因为所有的手机都使用网络来同步时间(别担心,时区问题是被忽略的!)。一次性密码大概有 60秒 的有效期(to allow for clock skew),所以理论上如果某人拦截了一次性密码和你的密码的话他们有一小段窗口期来使用它们(a replay attack)。

没有保护措施来抵御攻击者诱骗你在一个不是 FastMail 的网站(a phishing attack)来输入这个一次性密码。记住在你输入安全凭证之前查看你是否在真实的 FastMail 网站(check you’re on the real FastMail website)的办法很简单。

由于安全密钥在你的手机里而不是一个专门的安全设备,如果你的手机遭受恶意软件的话安全密钥可能被窃取。对攻击者来说,这是更难的事情,相比没有启用二次认证而言。


敬请期待明天关于 U2F 安全令牌如何工作的文章。

有关于安全方面的问题或建议?使用推特话题 #securitymatters @FastMail

这篇文章翻译自 FastMail 官方博客
原文:https://blog.fastmail.com/2016/12/23/pgp-tools-with-fastmail/

这是 2016 FastMail Advent Calendar 系列的第 23 篇也是倒数第二篇文章。敬请期待明天的最后一篇更新。


我们之前的 advent 系列文章里,介绍过 为什么 FastMail 不支持 PGP( why FastMail doesn’t have PGP support),并且我们提到过最佳的使用 PGP 的方式是通过命令行工具或 IMAP 客户端软件。

正如我们之前承诺的,一个适用于 FastMail 的关于(部分)开源的 PGP 客户端说明现在可以参阅了!我们强烈推荐使用开源加密软件,最好 reproducible builds .

不清楚类似 PGP 的加密如何工作的?这里是一个引导你进入使用 PGP 加密你的邮件(PGP to encrypt email)的基础的加密概述(overview of encryption)。如果你打算认真对待你的隐私问题,我们推荐进一步阅读以理解加密软件的风险,它带来的好处以及它们的可用性。

虽然我们在这方面已经做了一些基础的研究工作,但我们不能承诺这一定就适用于你的特定情况。

Browser plugins

Mailvelope

WebPG

Native clients

MacOS

GPGTools

  • 支持平台:macOS
  • 可以用于系统自带邮件客户端,但是当前不兼容 macOS Sierra(10.12版本),临时方案(workaround).
  • 使用说明

iOS(iPhone/iPad)

当前没有可用的开源 iOS 软件,但是这些软件可以使用(基于 Open PGP 实现)如果你正在寻找替代方案的话。

iPGMail

PGPEverywhere

Windows/Linux

安装一个带有插件功能的客户端以便启用 PGP 功能

  • 雷鸟(多平台支持)
  • Postbox(Windows,非开源软件)

Plugins:

Android

openKeychain

Command Line

我们推荐以命令行方式使用 GNU Privacy Guard.支持很多平台,开源代码和可执行文件

Chris 是我们的一名测试人员,他在他的工作笔记本上配置了 gpg 用它来安全传输数据到家里的电脑而不用带着私钥去工作。下面是他给出的一系列包括 aliases 在内的配置步骤:

生成密钥:gpg --gen-key(会问一些问题)
导出密钥:gpg --armor --output ~/example.fm.key --export chris@example.fm
这个步骤大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQENBFhbajUBCADO7Rp0dVuVb2JWv86zvnqUC32NuarYXIeCpesvqIxU8wqr7hh5
R4IwZyVEcBYTyVaMWVhjGmxGCBhvauKb8ZivRwuUw0bHwVKCfjI+uWjB27lVwRLE
9zxNa2NA8svzY8EgImo48KO2/YA4Rw9ozMLxM/KkmRnmnoo5oDk1jXe7I0ILOPb1
6pQVDT/PJRrb+QXc7AMCD/Jj61PgFnPBGqLvICTTKwoeIE8dfFu7l0hwOTSloDv7
KiiM4+Xwz2Lptt7eJAlpKImCzeH96/yPK4IfkAId2IJCC5GfChG2aovNFBrhPsMv
9jWVNDvFvoLTyYqM5V2slaa/U6qTkWiyV3tpABEBAAG0NUNocmlzIEV4YW1wbGUg
KFRoaXMgaXMgYSBkZW1vIGtleSkgPGNocmlzQGV4YW1wbGUuZm0+iQE4BBMBAgAi
BQJYW2o1AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAZ87lBaIIEbq/d
B/0Z2K9gF+e65B9da2Gim0bpEH8MNmHJlkcHgIxheMyQ7s8ClrqRRnGZRFEBw55F
x7VGphBjav8H2czp3LKE5OrAyoT1z+kCmXZff7iHII2YIK0zzU3DsyUTpM2AOZKL
fQ5d9nZMJY7Jg7BbDM+N1SJsw6+nRuyG0FnZfF57Qk+h1p2rZn/jadno/XeargeZ
I2TI7GhkBg4ujB0k6Cpvr8gq394TohDcCPEYUBDI5m/5FkyHkUFO8SUGQu0fJ9/t
xX1J91z9EW0xbcjIsmg7TtIpbM3UocoSz++svSjYz2mU546gz/76688nSrYKJ+Os
IZ+wmJdOBc3Du28QbffXGRahuQENBFhbajUBCAC+rldeh9LKxoRblhUfaCxttOQ8
PeqSlNC5IvPikTnjWtkThbVCsM3OYITh18Q66WSSK+2AkWlHdSH6HdaA6zNP7wqZ
iAWf7LP1maLg/a/e8zbC3rTL5LXrtkln0IIje6aXtyq4bLGDuLQEJBo7eBqetr27
Cb5pCatDBkOmxpQxzFQmnYfCMyC8Dm6Z2GIrLj6u5Zb0GIrNoBqhPFxD1MRsromU
ERwWYNQjKodEllv/DMt3yAn2CQRlABxPFem16cDqFEGD/UhcJQrvpVrMbHpANWqh
nLgcBPLhXcmJ5Zd0JhtkwapZ/mLqZkTWWmGGQRdE9RlbKoYsT1yNVeX0RntRABEB
AAGJAR8EGAECAAkFAlhbajUCGwwACgkQGfO5QWiCBG5MYwf/ff7WBragmfCXOaTz
LjERK1nScXzlTZ5ZeEUQTcoujbQvSuFBTw0XtiKWNN3imGhmhorjmQyMFjCmIys2
YCur+c3Jmh6BO8q0xRJwS0jxtNjkObSx2+ICBi6gTTkrBb3ya6Uy2k4BhVfQArlv
5UZeMcxZB8Gh8S0pC4S9s4dTBn1+i4aKSJSGITleDtSj4ZfrZ2JI/mMaJSpk1BKg
JtTb9s+AcWpurV5HW5HCb8PKQsLndPJH5cH0xqIjW8Ha6dbsXmlCfpTNaAoOkQDC
rqWyA3a+f4o/kgq/0cOlJHponcxWmbvTXIBwMtR0O91E5pqp4/no9SmSWefLd0yM
zbOJdA==
=K7Ec
-----END PGP PUBLIC KEY BLOCK-----

在另一台机器上,比如你的工作机(其他任何你想发送消息/文件的地方),导入密钥:gpg --import-key ~/example.fm.key 然后添加下面的内容到你 ~/.bashrc 文件:

1
2
alias ToChris='gpg --encrypt --recipient="chris@example.fm" --armour'
alias scramble="gpg --output encrypted.gpg --encrypt --recipient chris@example.fm "

由于工作机没有你的密码或私钥,你可以使用如下命令行来创建加密的消息/文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo "This is a private message. Remember to feed Ninja"  ToChris
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

hQEMA9bIhjnGSgZUAQf+N6nr/t0uGi8HRYAhaxNteWgWR0uwkDPvec6tjHj0gk50
wtBGm1agVAIRWBg5e6w2wkfk2RqQ+ecqPCV4SpgBxdFkcEhsbYOSd81hS2jtQZtH
EUjHK/s0ANqeN8L5a9j6NynwRYjrnFpGWKsSA+Ubd4xUb2vIktXi+BnwNsXdfRw9
A27LZch69w2pr4zHjAyZO/PIq/SEuQ8Xu/+xhR+bq7gHBGOo9sokOle7yTDXnNdR
VsTJaFev4K3didFsNPQWENC6dQ3gHds8qMYGMR4Nt5hIfIfrulyQItjYi/z5LGBq
i6f7y2jSB27wUaGr4EY6vZMyjHpoIlSK0eq4h9bvRNJrAQhcLoEzDxD83oECGXTD
8KIEc78TYlIPgPyGZ3O7GanBxg9tX0UWnjZ8ohk+QStgDiZdivkGOUL1UfByQE7B
qwvgjYrTzu9JJll9LUDjTR0ow4OLaJdIIdPq7uRoBEyhX23mfZIFAruoc3w=
=mjJW
-----END PGP MESSAGE-----

然后你可以发送 GPG 消息其他人便不能阅读了(比如,复制粘贴到 FastMail 网页客户端并且作为邮件正文)

如下命令创建可以作为邮件附件的 encrypted.gpg 文件:scramble <filename>

Key parties

有许多关于 准备签名密钥(prepare for a key signing party) 的网络资料。部分是有关于学术会议的,你可以和其他人在你的领域建立一个可信的 web .需要注意的是要知道正在操作什么类型(which kind of key party)的密钥。

Example GPG bootstrapping

下面是 Bron 演示的创建密钥完整密钥并且替换过期密钥以及用它来签名文档的完整过程:

1
2
3
4
brong@wot:~$ gpg --list-keys brong@fastmail.fm
pub rsa2048 2015-09-20 [SC] [expired: 2016-09-19]
0FBAC288980E770A5A789BA1410D67927CA469F8
uid [ expired] Bron Gondwana <brong@fastmail.fm>

看看自从我上次签名东西已经过了多久了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
brong@wot:~$ gpg --gen-key
gpg (GnuPG) 2.1.15; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/home/brong/.gnupg/secring.gpg' to gpg-agent
gpg: key 410D67927CA469F8: secret key imported
gpg: migration succeeded
Note: Use "gpg --full-gen-key" for a full featured key generation dialog.

GnuPG needs to construct a user ID to identify your key.

Real name: Bron Gondwana
Email address: brong@fastmail.fm
You selected this USER-ID:
"Bron Gondwana <brong@fastmail.fm>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

这个时候弹出了一个对话框让我选择一个密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key D92B20BCF922A993 marked as ultimately trusted
gpg: directory '/home/brong/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/brong/.gnupg/openpgp-revocs.d/8D8DEE2A5F30EF2E617BB2BBD92B20BCF922A993.rev'
public and secret key created and signed.

pub rsa2048 2016-12-22 [SC]
8D8DEE2A5F30EF2E617BB2BBD92B20BCF922A993
uid Bron Gondwana <brong@fastmail.fm>
sub rsa2048 2016-12-22 [E]

brong@wot:~$

现在我有了一个新密钥。让我们来上传到公钥服务器(keyservers)吧:

1
2
3
brong@wot:~$ gpg --send-keys 8D8DEE2A5F30EF2E617BB2BBD92B20BCF922A993
gpg: sending key D92B20BCF922A993 to hkp://keys.gnupg.net
brong@wot:~$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
brong@wot:~$ echo "So you can all encrypt things to me now, and verify my signature (assuming you trust a fingerprint from a blog)"  gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

So you can all encrypt things to me now, and verify my signature (assuming you trust a fingerprint from a blog)
-----BEGIN PGP SIGNATURE-----

iQEcBAEBCAAGBQJYW7nPAAoJENkrILz5IqmT554IAL6cg6+ILkrKeLQlzDtA7pZ9
IluYJCt+HpvGw4wXnOmxLyWa/PkWvHUwAAQ9GpgZq7ZB8Sv4HPkm4sRz3zRvcsfR
gpfp5YmYk/i8Oj482jYp1lsngTCEeHkLNWrvXZyoiVUzWbfhYOzrkIDRwgNUCXuF
i/pgYT4K36d6OdfKbI4jsC62sJT20H8qjO9/I5o0gcmb+axv/kSuO87jvGySMXT5
EAYtogDd+jCL1FB0iyu01oUUoTRqgayMUWChJeofVZ9sehqyhXNoYNp4+/+jusmG
nblWeEYZ2S9d5jBNcHgd5cWQDwlBCJKnx1O8Qj9VO+hkBJBB7wHMAIyei8VsIbM=
=QT0N
-----END PGP SIGNATURE-----

现在你可以说我些的这个没有任何一个我的同事可以编辑而且是绝对私密的了(And you can tell that I wrote this and none of my colleagues can edit that text and put words in my mouth)(除非他们用我的电子邮件创建了不同的密钥伪造了这篇文章中关于创建密钥的部分!!!)

命令行方式是最安全的使用 PGP 的方法,这种方式下你的电子邮件客户端和加密软件是完全分开独立运行的,只有密文或签名后的密文被传输到了你要从你的安全计算机外发的邮件中。


这篇文章翻译自 FastMail 官方博客
原文:https://blog.fastmail.com/2016/12/21/what-we-talk-about-when-we-talk-about-push/
这是 2016 FastMail Advent Calendar 系列的第 21 篇文章。敬请期待明天的更新。


当一些人考虑注册成为我们的用户时经常会问我们:“你们的产品支持推送吗?”。简单地回答是“支持”,但令人疑惑的当他们问这个问题的时候他们到底是什么意思?这点让这个问题变得有点复杂了。
当说起电子邮件的时候,大多数人通常理解的“推送”是新的邮件到达一台移动设备的时候他们获得几乎实时( near-realtime )的通知。这看起来是一个相当简单的概念,但实现起来却需要电子邮件服务器(比如 FastMail )和客户端/软件( iOS 邮件客户端,FastMail 移动客户端或者是 Thunderbird(雷鸟)之类的桌面客户端)之间的精心协作,而且依赖于所使用的机制,设备所使用的操作系统(比如 iOS 或 安卓)和操作系统的供应商(苹果,谷歌)。没有这些环节的配合,实时通知是不能实现的。
所有的这些意思是说没有一个简单的回答“你们支持推送吗?”囊括的这些所有情况。我们通常说“支持”是因为对我们的大多数客户来说这就是他们想要的答案。
邮件客户端可以使用各种机制来通知用户新邮件来了,每种都有各自的优缺点。

IMAP

单纯的传统意义上的 IMAP 客户端(桌面客户端和移动客户端)有较少的几个消息通知机制。

Polling

迄今为止对客户端来说最简单的查看是否有新邮件的方式是不断地去查询服务器。如果客户端每分钟都查询一次服务器的话则看起来和实时消息通知差不多。
这种方法最大的缺点就是网络负载和(除过像台式机这种总是插着电源的设备)电池寿命。
如果查询服务器过程很复杂的话网络负载就是一个大问题。最差的情况下,你必须查询服务器上整个信箱的状态并且和设备上保存的上次查询得到的记录做对比。较新的 IMAP 有一些机制(比如 CONDSTORE and QRESYNC )可以让客户端获得当前服务器上的收件箱编码后的令牌(token)。下一次当客户端查询服务器的时候,客户端可以对令牌说“把从我上次离开后的变更”。如果客户端和服务器都支持这个特性的话,通常情况下没有什么改变的话网络负载不会有压力。
电池寿命是个大问题由于系统要定期唤醒并且使用网络去向服务器查询变化情况。这其实是一种对电能的浪费因为大多数情况下你都不会有新邮件,然后设备又转而休眠了,这其实没有多大实际的意义。

IDLE

为了避免上面说所的这种不必要的轮询(定时多次向服务器查询状态),IMAP 有一种叫做 IDLE 的机制。客户端可以在服务上打开一个文件夹并在其中“idle”。这样可以保持和服务器的连接而且可以让客户端进入休眠状态。当服务器上有了需要变化需要通知的话,服务器通过这个连接给客户端发送一条消息,这将从休眠状态激活设备以便客户端查询服务器上的变更。
通常会出现的情况是对一些没有指定推送渠道或是推送机制的设备来说, IDLE 是可用的但仍存在一些问题使得它的效果不是那么理想。
主要的是 IDLE 只允许客户端请求对单个文件夹的变动。如果客户端需要通知多个文件夹的变动那么则必须有多个 IMAP 连接,每个文件夹分别一个。如果有些服务器同时限制单个用户的连接数的话对导致许多问题而且会使客户端变得复杂起来。
还有个问题,特别是移动设备来说, IDLE 是工作在 TCP 协议栈之上的。当设备网络情况发生改变的时候(这可能包括在移动基站之间的切换)会导致问题出现,可能会破坏连接。由于 TCP 协议栈的工作机制,不可能总能让一个设备判断连接是否还在继续,客户端依靠定期去“ping”(通常需要定期唤醒)或当网络发生变化的时候指望设备通知已经不那么可靠了。
很多情况下 IDLE 是靠谱的而且兼容大多数的 IMAP 客户端,但这是最基本的推送通知的做法。

NOTIFY

为了解决上述的一个文件夹对应一个连接的问题(one-folder-per-connection problem),IMAP 引进了另一种叫做 NOTIFY 的机制。它允许客户端请求它感兴趣的一组复杂的内容(包括文件夹列表和变更类型列表,比如“新邮件”或者是“已删除的邮件”)然后一次性通知这些内容。
这是推送机制发展的正确一步,但是还是存在使用 TCP 协议栈会遇到的那个问题。它是一个相当复杂的协议而且难于和当前的需求兼容,这就是我期望没有客户端或服务器支持它的原因。Cyrus(FastMail 使用的邮件服务器软件)不兼容它而且可能一直不会兼容。

Device push services

大多数(也许是全部)移动设备和移动设备系统供应商都会在他们的系统中提供一个推送服务。这一点不仅局限于 iOS安卓 Windows Blackberry 甚至 Ubuntu 和现在已经停止维护的 Firefox OS 都有推送服务。
理论上来说这些服务原理都是一样的,应用软件到操作系统那里请求一些包括设备和应用软件的标识符(a combination device & app identifier)的推送令牌。软件发送令牌请求到它们想推送服务的网路服务。当服务有内容要推送的时候,服务会发送一条携带令牌的消息。推送服务把消息保存在一个队列中,直到设备来请求这些消息的时候才传递这些消息。系统使用令牌中的软件标识符唤醒相对应的软件然后传递消息给它。然后软件继续相应的后续操作。
实际上,系统通常通过一条新消息来实现这点。通常会涉及到几组轮询但是网络层的信号也可以触发这些轮询,比如网络波动变更。这在本质上和软件去轮询没有什么区别,但是操作系统可以更有效率因为系统有软件运行和软件的网络需求的所有的上下文环境而且(由于操作系统管控硬件的原因)其他的硬件也可能对这项任务会有帮助。

FastMail’s Android app

我们的安卓应用程序沿着工作主线已经能很好地工作了。软件启动的时候,软件到 FastMail 那里注册推送令牌。当用户的信箱发生了改变的时候,我们发送消息给谷歌云消息推送服务(Google’s Cloud Messaging push service)(或者如果是非谷歌设备的话,推送到亚马逊设备消息服务(Amazon’s Device Messaging services))。这最终导致设备被系统唤醒,然后请求服务器获取最新的消息然后显示通知。
这种机制的一个缺点是可能导致从推送服务来的消息造成丢失。谷歌的推送服务被明确设计为不保证交付,而且会及时(通常几分钟内)删除无非送达设备的消息。这发生在设备离线或者关机的状态下。基于这个原因,我们的应用也让系统在网络波动和电源事件发生的时候唤醒,这也导致它可以请求服务器上的变更。这样的话,貌似不会有消息丢失发生。

FastMail’s iOS app

我们的 iOS 应用工作方式略有不同。一个有意思的的特性是 iOS 的推送系统可以一次推送包含消息,图标,声音,角标(“badge”(应用图标上的未读统计数字))和行为,然后操作系统将显示在通知栏中。这种方式下应用程序将根本不会被唤醒。当通知到达的时候 iOS 系统自己显示通知和做相应的相应。对于我们的程序来说,行为就是完全打开程序并打开新邮件(我们给我们发送的消息编了一个消息编号)。
这样有点不灵活,因为我们只能以苹果定义的推送格式来发送数据,而且可能会有隐私问题,因为我们通过第三方服务(如果你使用了苹果的硬件的话虽然你已经信任了苹果所以这似乎也没有什么)发送了邮件的部分内容。这样最大的好处是你不会增加电量消耗因为软件就从来没有被唤醒而且也没有使用网络请求变更。这样什么都不做就是最大的高效了!!!
自从 iOS 8 以后一个推送的消息唤醒一个应用程序变得可能,就像安卓和其他平台一样。我们的 iOS 应用以后的更新已经引入了这个新特性。

iOS Mail

iOS 系统自带的邮件客户端可能是个更好的 IMAP 客户端了。然而苹果选择不兼容 IDLE 模式,可能是由于电池续航问题。相反的,苹果会轮询,但最小间隔是15分钟。这种方式不错,而且让电池的负载是可控的,但是实时性不够高,大多数情况下是在人为(选择去查看)之后。当和 iCloud 服务结合使用的话,iOS Mail 可以又实时地通知,就是大多数人理解地实时推送了。
它的工作原理和 FastMail 的安卓客户端非常相似。当发现 IMAP 服务器提供对苹果的推送机制的支持的时候,应用程序向服务器发送它感兴趣的文件夹列表和推送令牌。就像之前说的,当又内容变更时 IMAP 服务器通过苹果的推送服务发送消息,这将会唤醒邮件客户端然后使得 IMAP 请求变更。
IMAP 客户端的一个有点是它不用保持 TCP 连接的打开状态。甚至它终止(Even if it drops)也可能是因为这几个小时没有新邮件,仅仅需要重新连接然后请求变更即可。
当然了,iOS 邮件客户端的这种机制被支持这种扩展的服务器限制了。去年 苹果特别友善地给了我们实现这种机制需要地一切( Apple were kind enough to give us everything we need to implement this feature for FastMail),并且它迅速成了我们最受欢迎的特性之一。

Exchange ActiveSync

最早支持“邮件推送”的普遍人为是微软的 Exchange ActiveSync,所以它需要提一下。最早在 2004 年它就被用在 Windows Mobile 上用来和 Exchange 服务器同步,现在任能经常见到,特别是在安卓设备上(which support it out-of-the-box)。关于 ActiveSync 有许多可说的地方,但是作为一项推送技术而言它没有什么特别的。
它和其他的推送主要的不同是它没有一个“vendor-provided”推送服务。从根本上来说, ActiveSync “服务”在设备上没有定期地轮询任何配置过的 Exchange 服务器去查询新邮件和给任何它感兴趣的应用程序发信号。虽然没有像操作系统直接处理那样高效,但是在安卓和 Windows 上也非常接近了,它允许长期驻留后台。

Calendars and contacts

十月(2016年10月)我们也同样加入了对 iOS 和 macOS 上联系人和日历的推送(push for calendars and contacts on iOS and macOS)的支持。在推送方面,它们工作的和 IMAP 一样好 — 应用程序请求日历和通讯录同通知的请求并产生一个令牌。服务器使用这个令牌通知传递消息的推送服务。操作系统唤醒应用程序然后它返回到服务器去请求更新的内容。对比 CalDAV/CardDAV 和 IMAP,它们有一些结构方面的差异,但是大多数情况下它使用和其他相同的代码和数据模型。

The future

悲哀的是,邮件“推送”的现状非常乱。什么都可以实现 IMAP IDLE 并且得到一些近似推送的东西,但是要获得很好的体验是很困难的(但不是不可能)。真正地做好(and battery-friendly)推送地方式,是你要很依赖于特定的推动方式。
我们当前正在尝试一些可能会也可能不会改变这种现状的事情:

  • JMAP 定义了一个推送协议,使用 Server-Sent Events 或者和移动运营商差不多的推送。JMAP 推送的工作方式是在登陆的时候,客户端给服务端发送一个推送的 URL,而不像其他那种特定的推送令牌(”push token”.)。当服务器上有改变的时候服务器只是简单地发送“服务器有改动”这样地消息(符合 JMAP 的数据格式)给那个URL。消息从推送服务到客户端的细节不在JMAP的范围之内,但在理论上它意味着用户可以选择使用推送服务(可能甚至是自己的)。
  • 我们曾经考虑过(但是目前没有实施的计划)一个可以做同样的事情的 IMAP 扩展 –允许客户端发送一个 URL 来发送变更。
  • 我们目前正努力额外的通知筛选机制,可以发送新的邮件通知给各种服务,包括 pushover.net slack.com 和 ifttt.com 。和应用程序推送不同的是,它们是基于过滤器的,但是它们是另一种了解您在使用邮件应用程序之外的接受信息的一种尝试。

时间将会说明这些尝试何去何从。这些是需要不同的客户端和服务端参与以便观察效果的事儿。这不是我们独立可以完成的事,但如果你是邮件客户端作者而且你想获得比 IMAP IDLE 更好的推送效果的话,可以和我们聊聊。