0%

DNS over HTTPS用于解决DNS解析的隐私问题

Debian
可以使用dnscrypt-proxy

MacOSX
建议使用dnscrypt-proxy

安装cloudflared

1
2
3
$ brew install cloudflare/cloudflare/cloudflared
$ cloudflared --version
cloudflared version 2019.7.0 (built 2019-07-11-1655 UTC)

添加配置文件config.yaml

1
2
3
4
5
6
7
$ mkdir -p /usr/local/etc/cloudflared
$ cat << EOF > /usr/local/etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
EOF

安装服务

1
2
3
$ sudo cloudflared service install
INFO\[0000\] Installing Argo Tunnel client as a system launch daemon. Argo Tunnel client will run at boot
INFO\[0000\] Outputs are logged to /Library/Logs/com.cloudflare.cloudflared.err.log and /Library/Logs/com.cloudflare.cloudflared.out.log

卸载cloudflare

1
2
$ sudo cloudflared service uninstall
$ brew uninstall cloudflare/cloudflare/cloudflared

校验

1
2
3
4
5
6
$ dig +short @127.0.0.1 cloudflare.com A
198.41.214.162
198.41.215.162
$ dig +short @127.0.0.1 cloudflare.com AAAA
2606:4700::c629:d7a2
2606:4700::c629:d6a2

设置系统dns

将系统DNS设置为127.0.0.1

Firefox浏览器

DOH设置

地址栏输入about:config进入配置界面,修改以下参数配置DOH:

network.trr.mode = 3
#3为只使用DOH,1为关闭DOH特性,2为优先使用DOH,还可以fallback到传统dns

network.trr.uri = https://1.1.1.1/dns-query
#cloudflare提供的DOH公共服务器

ESNI设置

同一个IP地址可以托管很多的站点,在建立TLS链接时SNI域名会明文发送,Encrypted SNI就是为了解决这个问题,防止第三方窃取隐私。

network.security.esni.enabled设置为true打开Encrypted SNI浏览器支持

服务器端

OpenSSL尚未支持ESNI,因此下游的nginx当前亦不支持,相信很快就会支持。
DEfO是一个为OpenSSL添加ENSI支持的项目github地址

chrome浏览器

即将支持:-(,参考[5]
今年10月晚期发布的chrome 78会开始实验性的支持DOH,参见[9]
ESNI一样尚未支持

版本78以后,打开Secure DNS lookups
(chrome://flags/#dns-over-https)标志,并将系统dns设置为1.1.1.1和/或1.0.0.1

References:
[1]对比4种强化域名安全的协议——DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS
[2]Browsing Experience Security Check
[3]DNS over HTTPS
[4]Trusted Recursive Resolver
[5]Add DNS-over-HTTPS to chrome://flags
[6]Running a DNS over HTTPS Client
[7]dnscrypt-proxy
[8]MacOS 开启 DNS over HTTPS (DoH)
[9]Google to run DNS-over-HTTPS (DoH) experiment in Chrome
[10]Trusted Recursive Resolver

存储配置主机映射时,需要指定主机HBA(Host Bus Adapter)卡端口的WWN(World Wide Name)
因此需要从主机端查看这些WWN,Debian buster系统中这样查看

1
2
3
$ cat /sys/class/fc_host/host*/port_name
0x10000090fa181673
0x10000090fa181ad6

表明有两个HBA端口,其WWN分别为0x10000090fa181673和0x10000090fa181ad6
存储中配置完成后,分别是这个样的10:00:00:90:fa:18:16:73和10:00:00:90:fa:18:1a:d6

terminal下运行wine apps比较繁琐,可以在.bashrc中添加alias

1
alias ssmc="(cd $HOME/.wine/drive_c/Program\\ Files/StorageManager/client/ && WINEPREFIX=$HOME/.wine wine start SANtricity\\ Storage\\ Manager\\ Client.exe >/dev/null 2>&1)"

这样终端下只要执行ssmc就可以了,不会破坏当前的工作目录和stdout

由于磁盘阵列Unreadable Sectors错误,强制修复后导致cassandra的一个sstable损坏,cassandra启动时报错:

1
2
3
4
5
6
7
8
ERROR \[CompactionExecutor:2\] 2019-07-15 15:03:27,161 DefaultFSErrorHandler.java:92 - Exiting forcefully due to file system exception on startup, disk failure policy "stop"
org.apache.cassandra.io.FSReadError: org.apache.cassandra.io.sstable.CorruptSSTableException: Corrupted: /mnt/data/cassandra/reis/image-6a85c44086a711e5aef4b53617129a2a/lb-47344-big-Data.db
at org.apache.cassandra.io.util.RandomAccessReader.readBytes(RandomAccessReader.java:365) ~\[apache-cassandra-2.2.14.jar:2.2.14\]
at org.apache.cassandra.utils.ByteBufferUtil.read(ByteBufferUtil.java:361) ~\[apache-cassandra-2.2.14.jar:2.2.14\]
at org.apache.cassandra.utils.ByteBufferUtil.readWithLength(ByteBufferUtil.java:324) ~\[apache-cassandra-2.2.14.jar:2.2.14\]
at org.apache.cassandra.db.ColumnSerializer.deserializeColumnBody(ColumnSerializer.java:132) ~\[apache-cassandra-2.2.14.jar:2.2.14\]
at org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:92) ~\[apache-cassandra-2.2.14.jar:2.2.14\]
at org.apache.cassandra.db.AbstractCell$1.computeNext(AbstractCell.java:52) ~\[apache-cassandra-2.2.14.jar:2.2.14\]

lb-47344-big-Data.db这个sstable被破坏了。
因为节点已经无法启动了,所以下面的尝试无可避免的失败了

1
2
$ nodetool scrub
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.

尝试离线修复,如果数据量很大,记得开启screen会话

1
$ sudo -u cassandra sstablescrub reis image

注意cassandra数据目录的权限,这里使用cassandra用户来执行scrub
执行结束后,删除掉已经损坏的sstable,scrub时cassandra会将损坏的sstable保持原样

1
$ sudo mv lb-47344* backups/

启动cassandra

1
$ sudo systemctl start cassandra

确认系统运行正常

1
$ nodetool status 

之后可以删除sstablescrub自动创建的快照,释放掉已经无用的sstables

1
2
$ nodetool clearsnapshot
Requested clearing snapshot(s) for \[all keyspaces\]

最后需要repair本节点,修复节点数据

1
$ nodetool repair -local -- reis image

References:
[1]sstablescrub
[2]Dealing with a corrupt SSTable in Cassandra
[3]So You Have A Broken Cassandra SSTable File?

一台IBM DS5020(1814-20 FAStT) RAID5存储阵列,OS报错误:

1
2
3
4
5
6
\[ 274.331664\] sd 4:0:0:0: \[sdc\] tag#5206 Add. Sense: Unrecovered read error
\[ 274.331673\] print_req_error: critical medium error, dev sdc, sector 177668608
\[ 274.331752\] print_req_error: critical medium error, dev dm-0, sector 177668608
\[ 274.371749\] sd 4:0:0:0: \[sdc\] tag#5206 Add. Sense: Unrecovered read error
\[ 274.371757\] print_req_error: critical medium error, dev sdc, sector 177668632
\[ 274.371848\] print_req_error: critical medium error, dev dm-0, sector 177668632

连上存储,有报警信息:

1
2
3
Failure Entry 1: USM_UNREADABLE_SECTORS_EXIST-Recovery Failure Type Code: 75
Storage array: Unnamed
Unreadable sectors detected: 2

有两个不可读取的扇区,可以进一步看到这两个扇区位于哪个磁盘驱动器,这种故障一般就是硬盘不稳定了,该换就换吧。

存储管理EMW(Enterprise Manage Window)窗口找到存储阵列,右击弹出context菜单中选择“Exectute script…”

脚本窗口中执行:

1
show storageArray unreadableSectors;

结果窗口输出:

1
2
3
4
5
6
Executing script...
Volume LUN Accessible By Date/Time Volume LBA Drive Location Drive LBA Failure Type
1 0 Host Group ibm 7/11/19 3:07:58 AM 0xa97021e Tray 85, Slot 2 0x12d391e Logical
1 0 Host Group ibm 7/11/19 3:07:58 AM 0xa97061e Tray 85, Slot 6 0x12d391e Physical

Script execution complete.

可以看到这两个扇区的详细状况,然后继续执行命令清除这两个扇区

1
clear allVolumes unreadableSectors;

最后重新查看

1
2
3
4
show storageArray unreadableSectors;
Executing script...
There are currently no unreadable sectors on the storage array.
Script execution complete.

可以看到已经没有不可读取的扇区了,阵列的报警灯也恢复正常。
注意,那两个扇区的数据应该是丢失了,应用程序如果需要这些数据应该通过其他途径恢复数据。

wine是个伟大的工程。

wine有三个分支wine-stable,wine-devel和wine-staging,就好像debian的三个分支stable,testing和sid,devel分支其实很稳定的,也能支持更多的应用程序

但是debian buster上安装wine-devel出现依赖问题:

1
2
3
wine-devel : Depends: wine-devel-amd64 (= 4.12.1~buster) but it is not going to be installed
Depends: wine-devel-i386 (= 4.12.1~buster)
wine-devel-amd64 : Depends: libfaudio0 but it is not installable

从wine4.5开始,wine-devel依赖libfaudio0,但是debian官方源并没有提供这个包,因此可以从参考[2]给出的链接下载amd64和i386两个架构的安装包libfaudio0_19.07-0_buster_amd64.deb和libfaudio0_19.07-0_buster_i386.deb
并手工安装

1
2
$ sudo dpkg -i libfaudio0_19.07-0_buster_amd64.deb
$ sudo dpkg -i libfaudio0_19.07-0_buster_i386.deb

然后再安装wine-devel

1
$ sudo apt -y install wine-devel

注意wine-devel安装到/opt/wine-devel目录,因此要使用wine-devel需要在.bashrc中添加

1
export PATH=/opt/wine-devel/bin:$PATH

References:
[1]Installing WineHQ packages
[2]FAudio for Debian and Ubuntu

debian buster gnome桌面默认启用wayland,当前仍然可以切换回Xorg
wayland兼容性还是有一些小问题,wayland并不加载profile环境配置文件,
也不理会Xsession,导致.xinitrc,.Xresources等无法加载
系统及用户的Xresources是由/etc/X11/Xsession.d/30x11-common_xresources脚本加载的,在wayland面前失效了,直接后果就是每次重启机器xterm就会被打回原形,只能手工重新加载~/.Xresources
回到gnome on xorg则xterm恢复正常
发现一个跨平台GPU加速的terminale emulator alacritty看起来很不错,可以试用一番。

References:
[1]GNOME, Wayland, and environment variables

macosx上自带的很多命令行工具都是bsd版本的,包括sed

sed的参数-i与gnu版本稍有不同,其-i参数后面的备份文件扩展名不可省略,即使是空字符串,也就是不要备份,而gnu版本不要备份的话是可以忽略掉的。
bsd版本:

1
$ sed -i '' 's/123/456/' test

gnu版本:

1
$ sed -i 's/123/456/' test

如果/etc/mysql/my.cnf中打开了log-bin选项,即使没有做主从复制,数据目录下仍然会持续的生成大量的mysql-bin.0000*文件,这玩意儿就像归档日志吧。

如果你做了主从复制,下面就不要看了。
没做主从复制的话,可以先清除掉这些文件

1
mysql> reset master;

这样会删除掉所有的log-bin,重新生成一个mysql-bin.000001
然后修改/etc/mysql/my.cnf,注释掉下面的行

1
#log-bin=mysql-bin

重新启动mariadb服务,以后就不会再生成这些文件了。

scp是不支持断点续传的,传输大文件意外中断会很痛苦。
rsync支持断点续传,也支持使用ssh协议传输数据,所以可以这样

1
$ rsync -P --rsh=ssh nasmdoc.pdf linode:

这里linode是为一个ssh服务器配置的别名,而且支持tab补全,很好用。

可以在.bashrc中设置一个alias

1
alias scpr="rsync -P --rsh=ssh"

就可以这样用了

1
$ scpr nasmdoc.pdf linode:

注意,客户端和服务器都要安装rsync。