startssl证书CA被吊销
近期证书到期,到startssl上续了一个证书,部署上死活不行。搜了一下才发现startssl的ca因为沃通倒签证书、私自颁发github证书,CA被Mazilla,Chrome都去除了。。腾讯云上申请了1个免费的ssl证书搞定。
近期证书到期,到startssl上续了一个证书,部署上死活不行。搜了一下才发现startssl的ca因为沃通倒签证书、私自颁发github证书,CA被Mazilla,Chrome都去除了。。腾讯云上申请了1个免费的ssl证书搞定。
公司先后采购过多种GPS授时服务器。之前一直不是太明白ntpd是如何使用外接的这些硬件。这两年树莓派比较流行,也有很大人利用外接的扩展件让树莓派成为一级时钟源。其中关键的ntp.conf配置如下 [一级时钟源](http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html)driftfile /var/lib/ntp/ntp.drift ```bash # coarse time ref-clock, not really needed here as we have LAN & WAN servers server 127.127.28.0 minpoll 4 maxpoll 4 fudge 127.127.28.0 time1 +0.350 refid GPS stratum 15 # Kernel-mode PPS ref-clock for the precise seconds server 127.127.22.0 minpoll 4 maxpoll 4 fudge 127.127.22.0 refid PPS # LAN servers ```bash server 192.168.0.3 minpoll 5 maxpoll 5 iburst prefer server 192.168.0.2 minpoll 5 maxpoll 5 iburst server 192.168.0.7 minpoll 5 maxpoll 5 iburst ...
1. tick 用户态下内核时钟计数间隔,默认都是100HZ。因此单个tick代表了10^4 us。 可以设置每个tick代表的时钟长度,因此把tick增加1(即增加为10001us)的影响是每天时间慢8.64s(24小时的tick被提前消耗完) 24*3600*100*10001/10^6-24*3600=8.64s。 2. ppm 百万分之一秒,1个PPM增加 24*360*(10^6+1)/10^6-24*3600=0.0864s。 PPM 增加500,每天的时间慢500*0.0864=43.2s 假设服务器现在标准的PPM为 A,为了让系统24小时快1s。则ppm的调整为A- 1*10^6/3600/24=A-11.574074。 处理闰秒如果想让时钟在一天内慢1s,则可以用ntptime -f把frequency改为服务器当前的值+11.574 ubuntu@ip-172-31-23-155:~/ntp-4.2.8p9$ ntptime ntp_gettime() returns code 0 (OK) time dc1e24a0.5e832b98 Mon, Jan 9 2017 15:02:56.369, (.369189989), maximum error 73959 us, estimated error 101 us, TAI offset 0 ntp_adjtime() returns code 0 (OK) modes 0x0 (), offset 75.601 us, frequency 18.063 ppm, interval 1 s, maximum error 73959 us, estimated error 101 us, status 0x2001 (PLL,NANO), time constant 5, precision 0.001 us, tolerance 500 ppm, ...
以一个阿里云VM上的输出为例 [root@CentOS ~]# ntpq -pn remote refid st t when poll reach delay off set jitter ============================================================================== 127.127.1.0 .LOCL. 10 l - 64 0 0.000 0.000 0.000 #2001:4860:4806: 71.79.79.71 2 u 1012 1024 357 280.158 -15.630 3.135 #2001:4860:4806: 71.79.79.71 2 u 816 1024 377 262.399 -24.971 2.702 #2001:4860:4806: 71.79.79.71 2 u 708 1024 377 364.687 -13.306 4.368 #2001:4860:4806: 71.79.79.71 2 u 606 1024 377 381.816 -28.115 3.897 *182.92.12.11 10.137.38.86 2 u 327 1024 377 0.245 0.810 0.792 ...
大家在维护DNS的时候会有一个烦恼,很难平衡几个点1. 域名的平均解析时间要很短– 因为网站访问的时候所有得请求都需要依赖DNS解析,如果网站的访问量小,用户每次请求时需要先等递归DNS递归,整体的时间会很长。2. 机房故障的时候切换要快– 有多IDC的人都会面临一个问题,单个IDC故障的时候希望能尽快通过DNS将流量切换到另外的一个IDC,这个时候需要TTL短。3. DNS的部署成本– 正常网站的dns其实都不大的,如果没有攻击,4个机器跑个bind也能支撑国内BAT的一起的DNS解析。– 如果我们希望DNS的解析效果好,就需要在部署位置、接入网络等各方面想办法优化,成本也是指数增加。 不同频率的DNS解析任务来统计DNS的解析时长,可以分析一下网站访问量,域名TTL和用户侧平均DNS解析耗时之间的一些关系。 上图是相同TTL的域名,在访问频率不同的场景下的对比,可以看出随着监控域名的解析频率从1分钟下降到5分钟一次后,DNS的解析时间从66ms增加到85ms。 再从相同监控频率,不同TTL的解析这个维度来看 随着TTL从60s提升到120s,DNS的平均解析时间从66ms下降到59ms。再看看当TTL提升到600s的时候,DNS的平均解析时间下降到 47ms左右。 基于以上场景对比,我们可以有结论:1. TTL适当增加,DNS的延迟可以大幅下降。2. 网站访问量的增加,DNS延迟也可以有大幅下降。 DNS在用户终端的平均解析时间其实很难对比,也不存在完美的最佳实践。对一般中小企业,建议:1. DNS的TTL 300-600S,如果访问量不是很大,不建议TTL下降到120以下。2. 机房切换的容忍时间5-10分钟。
最近改写一个dns-flood的程序为多线程模式,发现每个线程中生成的随机数字经常是一样 。 [dns-flood](https://github.com/nickwinn/dns-flood)void nameformat(char *name, char *QS) { char *bungle, *x; char elem[128]; *QS = 0; bungle = malloc(strlen(name) + 3); strcpy(bungle, name); x = strtok(bungle, "."); while (x != NULL) { if (snprintf(elem, 128, "%c%s", strlen(x), x) == 128) { puts("String overflow."); exit(1); } strcat(QS, elem); x = strtok(NULL, "."); } free(bungle); } 该函数是在构造DNS请求报文中被调用,通过传入指针name将字符串复制到QS指向的地址内。debug发现QS经常打印出来和name不一样,查了发现strtok不是线程安全的,改用strtok_r后终于OK了。 void nameformat_r(char *name, char *QS) { char *bungle, *x; char elem[128]; char *flag; *QS = 0; bungle = malloc(strlen(name) + 3); strcpy(bungle, name); x = strtok_r(bungle, ".", &flag); while (x != NULL) { if (snprintf(elem, 128, "%c%s", strlen(x), x) == 128) { puts("String overflow."); exit(1); } strcat(QS, elem); x = strtok_r(NULL, ".", &flag); } free(bungle); }
需求 有时需要从zone文件里解析DNS的数据,做一些分析。可以利用dnspython库做zone的解析处理。简单写一个如下 #!/usr/bin/env python import dns.zone import dns.ipv4 import os.path import sys import os import string import re zonefile=sys.argv[1] name=sys.argv[2] class LOAD_ZONES: def __init__(self,zonefile,name): self.types=("A","CNAME","TXT","SOA","MX","NS","PTR") self.record=dict() self.zonefile=zonefile self.name=name for type in self.types: self.record[type]=dict() try: zoneload= dns.zone.from_file(f=self.zonefile,origin=self.name,check_origin=False,relativize=False) for type in self.types: for (name, ttl, rdata) in zoneload.iterate_rdatas(type): dname=str(name) l = self.record[type].get(dname) if l is None: self.record[type][dname] = set() if type == “A”: self.record[type][dname].add( ("%s-%s") % (ttl,rdata.address ) ) else: self.record[type][dname].add( ("%s-%s") % (ttl,rdata.to_text().lower()) ) except dns.zone.NoSOA: print “%s no soa” % self.zonefile except dns.zone.NoNS: print “%s no ns” % self.zonefile def dump_record(self): for type in self.types: for k in self.record[type].keys(): print k,type,self.record[type][k] def del(self): pass ...
BBR介绍 BBR (Bottleneck Bandwidth and RTT)算法对弱网络下提升性能有一定帮助。虽然说在国内很多公司也都内部有类似的内核协议栈的改进,并且很多的效果都不比google差,但是这个好歹是进入了kernel 主干的,大家都可以自由使用。 centos7 编译升级 centos编译内核rpm yum -y install gcc ncurses ncurses-devel bc openssl–devel perl-devel make localmodconfig make menuconfig # 选中BBR grep -i bbr .config #确认是否选中 make rpm ### 修改引导项目 grub2-set-default 0 grub2-mkconfig -o /boot/grub2/grub.cfg 重启后查看 [root@CentOS ipv4]# uname -a Linux CentOS 4.9.0 #1 SMP Sat Dec 17 00:47:52 CST 2016 x86_64 x86_64 x86_64 GNU/Linux [root@CentOS ipv4]# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = bbr reno cubic ## ubuntu 16.04升级 因为我买AWS EC2的时候忘记选磁盘了,磁盘只有8G,造成本地编译内核的时候发现编译不了。就网上找了几个deb包直接安装上了。 ```bash wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb get http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb ...
http段增加配置 server { listen 80; server_name status.taobao.com; location = /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } }
1. 基本统计 - /var/www/blog/wp-content/themes/twentyten/header.php 的后添加 <script type="text/javascript"> var _speedMark = new Date(); </script> 2. 测速统计 - /var/www/blog/wp-content/themes/twentyten/footer.php