卡诺基2060Super开箱测试体验

前言

最近把家里面的各种旧设备卖了一大批,什么采集卡、路由器还有游戏主机等等。结果就想着要不给显卡也卖了好了,换个性能好一点的矿卡。现在1650s拿来跑一些大点的游戏确实不太行了,后面如果要是换4k屏就更吃力了。去网上找了一圈,发现有一个叫卡诺基的牌子专门做矿卡翻新,还带2年保修,虽然比直接买矿卡要贵点但是感觉比较容易安全下车,于是就决定去搞了一块。

产品选择

我这次选择的是2060 Super,卡诺基官方价格999块钱,用了点优惠差不多980块钱。我选的是涡轮扇版本,虽然2060s并没有涡轮扇公版,不过我个人就本来就喜欢一些非主流的产品,而且涡轮扇版本真的很好看。

收货开箱

拆掉快递拿到盒子,首先想吐槽的就是这盒子都没用胶带封住,直接就可以打开的。其次就是这盒子上同时印了英伟达和AMD的标,显卡用这样的盒子真的太草了。

打开盒子,里面很简单,就一张说明书,一个保护海绵,一个静电袋,里面是显卡本体。说好的AN合体驱动盘呢?

显卡拿出来,正面是整流罩和涡流扇,背面没有保护板,可以看到板子洗的很干净,看起来还可以。

接口的话,三个DP一个HDMI。

上机之后可以看到侧面的字符,虽然塑料看起来有点廉价,但是整体比较板正,还算可以吧。

上机测试

在GPU-Z和NVIDIA Inspector里都能看到,TU106的核心,8G的显存,确实是正经2060s而不是什么妖魔鬼怪。时钟频率在1470,据说卡诺基的bios都是这个数,估计是为了稳定性调的,虽然低了一点,但是也够用。

象征性的甜甜圈烤了一会鸡,15分钟,温度保持在76度,帧数240+,没啥问题。

娱乐大师跑一下分,结果是271011,在2060s的跑分里算比较低的,估计和bios限制频率有关。

TimeSpy跑一下分,结果8201,和鲁大师一样,在2060s里算比较低。

最后用TimeSpy跑一下稳定性测试,结果98%,可以通过测试没啥问题。

游戏测试

最近完全没玩游戏!有空再说吧!

总结

还算能买,看起来没啥问题,不过还是不推荐需求比较高的或者能力有限的人来买。

给鸡蛋再找个篮子——使用Gitea搭建轻量级Git服务器

前言

由于我之前提到过,想要用树莓派自己搭建一个Git的服务,于是我就去找了一下各种Git的服务端,最后就发现了这个使用go开发的Git服务端——Gitea。

Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用Go作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了x86,amd64,还包括 ARM 和 PowerPC。

因为是用Go开发,Gitea的主要程序就是一个原生的二进制可执行文件,而且Gitea可以使用SQLite当做数据库,这样它的资源占用比Gitlab这种Java开发需要虚拟机的要少的多,甚至他在官网上就写着用树莓派就能运行,这不是巧了吗。

  • 最低的系统硬件要求为一个廉价的树莓派
  • 如果用于团队项目,建议使用 2 核 CPU 及 1GB 内存

而且由于是Go开发,所以环境搭建就容易的很多了。

搭建过程

首先先去官网下载平台对应的二进制文件。

https://dl.gitea.io/gitea

直到这篇文章撰写时,最新的版本为1.16.8,而我是准备运行在树莓派上的,他的cpu架构是arm6,所以最后我下载的文件为gitea-1.16.8-linux-arm-6,下载后更名为gitea,然后传入服务器中。

将二进制文件移动到/usr/local/bin/gitea,并使用chmod +x添加运行权限。

这个操作也可以在服务器环境通过下面的命令执行,记得换成你对应平台的文件的地址。

wget -O gitea https://dl.gitea.io/gitea/1.16.8/gitea-1.16.8-linux-arm-6
chmod +x gitea
sudo mv gitea /usr/local/bin/gitea

由于我们搭建的是Git服务器,所以需要提前安装好git,并且git版本要大于20,这里不同的系统可以用不同的包管理器来安装,这里贴出官方给出的不同系统下的安装方式。

Debian/Ubuntu

For the latest stable version for your release of Debian/Ubuntu

# apt-get install git For Ubuntu, this PPA provides the latest stable upstream Git version

# add-apt-repository ppa:git-core/ppa # apt update; apt install git

Fedora

# yum install git (up to Fedora 21)

# dnf install git (Fedora 22 and later)

Gentoo

# emerge --ask --verbose dev-vcs/git

Arch Linux

# pacman -S git

openSUSE

# zypper install git

Mageia

# urpmi git

Nix/NixOS

# nix-env -i git

FreeBSD

# pkg install git

Solaris 9/10/11 (OpenCSW)

# pkgutil -i git

Solaris 11 Express

# pkg install developer/versioning/git

OpenBSD

# pkg_add git

Alpine

$ apk add git

Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux, et al. RHEL and derivatives typically ship older versions of git. You can download a tarball and build from source, or use a 3rd-party repository such as the IUS Community Project to obtain a more recent version of git.

Slitaz

$ tazpkg get-install git

安装好git之后,可以使用git --version检查一下版本是否大于20。

接下来的操作,官方的中文文档里有缺失,我一开始也踩了坑,然后照着英文版的文档做才成功搭建。

首先创建一个用户Gitea运行的用户,Gitea是不允许使用root用户运行的。

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

然后创建需要使用的目录和文件。

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
touch /etc/gitea/app.ini
chown root:git /etc/gitea/app.ini
chmod 770 /etc/gitea/app.ini

接下来,将服务文件gitea.service复制到/etc/systemd/system/gitea.service,这里如果懒也可以直接复制我下面的精简版(如果需要使用第三方数据库,请自行查看配置文件,并取消对应数据库的注释)。

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target

[Service]

RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/

ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

接下来就是设置开机自启和启动服务了。

sudo systemctl enable gitea
sudo systemctl start gitea

然后服务应该就会在3000端口运行了(使用服务运行默认是在3000端口,如果需要修改端口,要在服务配置的命令中加上--install-port 端口号),从浏览器访问IP:3000来打开安装页面。

安装页面有中文,很简单,对着选就行了,我这里数据库选SQLite

在这里可以修改端口,等下安装好之后,重启就是新的端口了。如果SSH端口不填的话就是关闭SSH功能,我的机器因为准备做内网穿透,所以不准备用SSH了,我就关了。

个性化

我们的服务配置里面,把Gitee的资产文件都放在了/var/lib/gitea目录中,这个目录下面有三个子目录customdatalog,分别存放着自定义内容,数据,以及日志。而我们想要做个性化,就需要修改custom里面的文件。

关于custom目录,里面的public目录里的内容,会在服务启动后,被路由到网站的根目录下面。也就是说如果你有一些自定义的图片,样式,脚本什么的,都应该放在这里面。

安装好Gitee服务后,打开主页,我们看到的是默认的样式,虽然Gitee比较简洁,但是也是提供了一些类似主题修改的个性化功能的。

添加主题

首先先说主题的修改,Gitee的主题读取的策略是首先需要你在配置文件里面添加可选择的主题列表,之后再去custom/public/css目录中,读取theme-主题名.css的样式文件。所以如果你下载了新的主题或者自定义了一些CSS样式,那么你需要这样做。

我们假设主题的名字叫做test首先将你的CSS样式重命名为theme-test.css,然后将他放入custom/public/css目录中。

之后打开配置文件/etc/gitea/app.ini,在[ui]字段下面(如果没有请手动添加),修改THEMES字段,加入test主题,如下。

...
[ui]
# 这里gitea是默认主题,arc-green是默认暗黑主题
THEMES = gitea,arc-green,test 
...

保存重启服务之后,在用户登陆后的主题设置里面,就可以看到test的主题可供选择了。

修改默认主题

如果你想要用户在未登录,或者是新用户默认情况下就设置为某个主题,你需要这么做。

首先按照上文所说,将你的主题加入到可选择列表中,例如上文中的test主题。然后修改配置文件的[ui]字段,在下面加入DEFAULT_THEME,值等于你想选择的默认主题,如下。

...
[ui]
THEMES = gitea,arc-green,test
# 这里将默认主题设置为了test
DEFAULT_THEME = test 
...

保存重启服务之后,打开首页就可以看到在未登录的时候,主题设置成了test

修改页面样式

在默认的首页样式中,我们可以看到除了我们的网站名字以外,还有一些默认的文字和图案内容。比如一款极易搭建的自助 Git 服务易安装,跨平台,轻量级,开源化等等。想要修改这些内容,你需要这样做。

首先需要下载Gitea的源代码。

https://dl.gitea.io/gitea/1.16.8/gitea-src-1.16.8.tar.gz

下载完成解压之后,我们可以在里面找到templates,这里面放着的就是全部页面的默认模板。我们可以将这个目录复制到custom目录下,然后修改这里面的模板,这样在服务启动后,Gitea就会优先读取custom目录下我们修改过的模板。当然,实际上你只需要保留你修改过的模板文件在custom目录里就好。

我们这次是要修改首页的内容,我们打开custom/templates/home.tmpl,修改一下里面的内容。

{{template "base/head" .}}
<div class="page-content home">
	<div class="ui stackable middle very relaxed page grid">
		<div class="sixteen wide center aligned centered column">
			<div>
				<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.svg"/>
			</div>
			<div class="hero">
				<h1 class="ui icon header title">
					{{AppName}}
				</h1>
				<h2>这里就是页面的副标题</h2>
			</div>
		</div>
	</div>
	<!-- 注释掉不想要的内容
    <div class="ui stackable middle very relaxed page grid">
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-flame"}} {{.i18n.Tr "startpage.install"}}
			</h1>
			<p class="large">
				{{.i18n.Tr "startpage.install_desc" | Str2html}}
			</p>
		</div>
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-device-desktop"}} {{.i18n.Tr "startpage.platform"}}
			</h1>
			<p class="large">
				{{.i18n.Tr "startpage.platform_desc" | Str2html}}
			</p>
		</div>
	</div>
	<div class="ui stackable middle very relaxed page grid">
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-rocket"}} {{.i18n.Tr "startpage.lightweight"}}
			</h1>
			<p class="large">
				{{.i18n.Tr "startpage.lightweight_desc" | Str2html}}
			</p>
		</div>
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-code"}} {{.i18n.Tr "startpage.license"}}
			</h1>
			<p class="large">
				{{.i18n.Tr "startpage.license_desc" | Str2html}}
			</p>
		</div>
	</div>
  -->
</div>
{{template "base/footer" .}}

修改完成后,保存重启,就可以看到页面的样式已经改变啦。

结语

虽然Gitea很多配置还要修改文件+重启服务,可能没有那么方便,但是他较小的资源占用和性能需求,拿来当做个人使用的服务的话还是比较适合的。

前几天Gitee称因为需要审查,迫于无奈下架了大量的开原仓库的事件引发了轩然大波,作为一个普普通通的小开发者,我对这个事件也没有什么评价。我所能做的就是再多搭建一个平台,用来保存我那些“可能也没什么价值”的源码罢了。毕竟都说不要把鸡蛋装在一个篮子里,而现如今最大的篮子就是Github,但是谁又能保证这个篮子不会破呢?

搭建私人低功耗服务器——如何将树莓派的系统装进USB设备

前言

最近搞了几个比较大的项目,github的免费套餐有点吃不消,所以就一直想着弄个别的git服务器。但是由于最近我正在给服务做《断舍离》,所以现在我之前买的公网服务器都被我鲨了。这时候我就想到自己手里不是还有一个低功耗Linux设备——树莓派吗。于是我就想到用树莓派挂载一个USB的移动硬盘,来当做自己的私有服务器。

我的树莓派是初代树莓派B+款,2014年生产,距今已经8年了。当年这东西我花了300多块钱买的,因为当时一个体积这么小但是却可以运行完整的Linux系统的设备,也是非常的稀有。他的性能很差,cpu主频只有700mhz,但是功耗还是比较低的,用一个5v2a的电源就能轻松带起。

之所以要把西开通塞进USB设备,是因为正常树莓派的系统是装到TF卡里的,但是TF卡的读写又慢,而且长期的读写很容易导致内存卡损坏。所以我就想着用USB挂一个移动硬盘来当做系统盘,虽然USB2.0的读写不高,但是至少可以防止存储挂掉。同时早期的树莓派并不直接带有USB引导功能,所以我在搭建的过程中也踩了不少坑。

前期准备

本文内容仅在树莓派1B+版本进行测试使用,其他平台请自行测试

  • 一张容量>2G的TF卡(因为系统容量是1.9G,容量不足烧录不进去)
  • 一个USB存储设备(推荐用USB的固态硬盘,相对来说更稳定一点)
  • 一台电脑

操作过程

首先在官网下载安装官方的系统烧录工具。

https://www.raspberrypi.com/software/

然后插上你准备好的TF卡,打开烧录工具,先选择擦除烧录一次,之后再选择Raspberry Pi OS (Legacy)(注意Debian版本Debian version: 10 (buster))进行烧录。

经测试Debian version: 11 (bullseye)的版本无法正常引导,不清楚是我这里设备的问题还是操作错误,总之我只确定buster是可用的

由于TF卡只有2G所以我选择了Lite版,也就是没有桌面环境的最小化系统。TF卡容量大的可以自行选择

烧录好之后,因为烧录工具会自动卸载设备,所以需要将TF卡从电脑拔出,然后再插入。这时可以看到有一个名叫boot的256m大的分区。在分区内创建文件命名为SSH,然后将TF卡从电脑中卸载,插入树莓派,启动开机。这里创建文件是为了默认启动SSH服务,使你可以在开机后通过SSH远程控制计算机。

当树莓派启动后,并切可以通过SSH连入系统后,使用sudo shutdown -h now将树莓派关机,然后拔出TF卡。将TF卡连接到电脑上,然后将USB存储设备也连接到电脑上。

使用磁盘管理工具对磁盘进行克隆,我这里使用的是傲梅分区助手,如果你有其他的类似软件也可以。将TF卡的磁盘直接克隆到USB存储设备上,这时可以看到TF卡和USB存储设备会各有一个256m大小的名字为boot的分区,以及一个大小为2G的分区(USB存储设备应该会有未使用空间)。

将两个设备都从电脑中卸载,然后TF卡和USB存储设备都插入树莓派,启动开机。开机后使用SSH连接到树莓派。

执行如下命令

sudo blkid

这时终端中应该输出了类似如下的内容

/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="8551-82D5" TYPE="vfat" PARTUUID="f7403228-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="aea57068-3f8a-462e-842c-b210b2d9c7ea" TYPE="ext4" PARTUUID="f7403228-02"
/dev/sda1: LABEL_FATBOOT="boot" LABEL="boot" UUID="8551-82D5" TYPE="vfat" PARTUUID="087a1744-01"
/dev/sda2: LABEL="rootfs" UUID="aea57068-3f8a-462e-842c-b210b2d9c7ea" TYPE="ext4" PARTUUID="087a1744-02"
/dev/mmcblk0: PTUUID="f7403228" PTTYPE="dos"

这里显示的是你的磁盘设备的UUID,/dev/mmcblk0p1/dev/mmcblk0p2就是你TF卡的两个分区,而/dev/sda1/dev/sda2就是你的USB存储设备的两个分区。我们要记录一下/dev/sda2分区后面显示的PARTUUID,这里我的UUID是087a1744-02

然后使用nano打开/boot/cmdline.txt文件

sudo nano /boot/cmdline.txt

这里编辑的是引导命令,内容应该类似下面

console=serial0,115200 console=tty1 root=PARTUUID=f7403228-02 rootfstype=ext4 fsck.repair=yes rootwait

可以看到这里有一个root=PARTUUID=f7403228-02,根据上面的输出我们知道这个PARTUUID是指向了TF卡的第二个分区,我们修改这个值,将f7403228-02修改为USB存储设备对应的UUID,这里我需要修改为087a1744-02,修改结果如下。

console=serial0,115200 console=tty1 root=PARTUUID=087a1744-02 rootfstype=ext4 fsck.repair=yes rootwait

然后ctrl + x保存文件。

之后使用nano打开/etc/fstab文件

sudo nano /etc/fstab

这里编辑的是磁盘挂载文件,内容应该类似下面

proc                    /proc           proc    defaults          0       0
PARTUUID=f7403228-01    /boot           vfat    defaults          0       2
PARTUUID=f7403228-02    /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

也将其中的f7403228-02替换成对应的UUID,这里我替换成087a1744-02,修改结果如下。

proc                    /proc           proc    defaults          0       0
PARTUUID=f7403228-01    /boot           vfat    defaults          0       2
PARTUUID=087a1744-02    /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

然后ctrl + x保存文件。

然后sudo reboot重启,就完成了从USB存储设备启动的设置了。

但是这是USB存储设备只使用了2G的空间,这肯定是不够用的。所以我们需要扩展一下存储空间。

进入raspi-config

sudo raspi-config

选择Advanced Options然后回车,选择第一项Expand Filesystems Ensures that all of the SD card storage is available,回车确认,回车重启系统。

系统重启后磁盘的容量就是正常的容量了,可以运行df -h检查,输出内容如下。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       221G  1.5G  210G   1% /
devtmpfs        183M     0  183M   0% /dev
tmpfs           216M     0  216M   0% /dev/shm
tmpfs           216M   14M  202M   7% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           216M     0  216M   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   49M  204M  20% /boot
tmpfs            43M     0   43M   0% /run/user/1000

可以看到我的/dev/root的容量已经是221G了。

之后可以再把TF卡的第二分区和USB存储设备的第一分区删除掉,不过因为我比较懒而且怕出问题,所以就还是放着没有管。

画外音

最开始我想的是使用机械硬盘启动,结果折腾来折腾去,突然这块机械硬盘就决定原地去世,于是我只能掏出来之前的一块拆机固态换到了硬盘盒里面,但是固态确实要比机械盘稳定。机械盘有可能会因为供电问题启动不起来,但是用固态就一帆风顺了。心疼逝去的硬盘

用DS4当全平台手柄——八位堂手柄转换器体验

Cover: しずりんかわいい - 四葉はる@Pixiv

前言

最近一直在沉迷动森,因为我的NS是朋友送的,比较旧了,所以现在摇杆也是非常的漂,钓鱼钓着钓着人就自己往旁边跑,于是我就动了买一个手柄的心思。

于是就去看看有什么可以选择的吧,基本上也就是官方Pro手柄,第三方无线手柄,高仿Pro手柄里面挑了。结果看来看去总会觉得有各种的理由让我下不去手买,比如Pro手柄虽然大家都说不错,但是一个是500多的价格还是蛮贵的,再一个任天堂的做工着实让我不敢恭维,总感觉就我的手劲玩下去可能半年手柄就要报废。再看看第三方手柄,什么良值,八位堂,总觉得手柄多多少少会有点问题,比如不能唤醒啊,或者看网上有人说很容易坏,震动差等等。至于所谓的高仿Pro手柄,什么1比1手柄,我愣是没找到买的渠道。

结果正在一筹莫展的时候,在八位堂的店里看到了一个「无线手柄转换器」,因为以前听说过类似的东西,就点进去看了看。这一看,好家伙,这东西居然可以把一个平台的手柄直接转换成另一个平台的,具体看了看,DS4手柄转接到NS上,除了不能唤醒以外,其他的据说和无线JoyCon一样,于是我看着桌子上PS4旁边的两把DS4手柄露出了邪恶的笑容……

不过也不能说买就买,首先我还是去网上看了看评价,结果看网上有人说延迟很高,没办法愉快玩耍,也有说震动太厉害,鲈鱼震成皇带鱼的,不过也有人说体验非常的完美,所以最后我思来想去还是准备先买个试试看。

开箱

明明买的时候找了一家发货地是北京的店,就想可以早点收到,结果不知道快递经历了什么,三天才到我的手上……于是赶紧迫不及待的打开了这个小盒子。

明明八位堂是个中国公司,不过这个小盒子上倒是一个中国字都没有,颇有一副山寨货的气质。

打开盒子,可以看到我们的转换器本体,一个马里奥里砖块风格的,看起来像是一个U盘的小玩意。

这个东西大小和U盘也是非常的接近,拿在手里面还是很小的,上面这个盖子取下来之后并没有收纳的方式,所以估计这个盖子哪天应该也会和很多U盘盖子一样神秘失踪……

我就知道你们肯定想要壁纸的原图 https://yande.re/post/show/605035

使用体验

NS体验

都说会有严重的延迟,我赶紧按照教程接上了NS,打开了《太鼓达人》。

随便选了首歌,良!可!Miss!Miss!Miss!可!Miss!Miss!……

我丢这个延迟根本没办法玩啊!

然后我寻思对比一下原装JoyCon的体验吧,接上JoyCon,随便选首歌。

良!可!Miss!Miss!Miss!可!Miss!Miss!……

emmmm行吧,老任的锅,无线打太鼓达人看来就是不太行。

那我打开「动森」试试看吧,结果转换器在动森里发挥稳定,终于不用忍受漂移的摇杆了。

PC体验

既然这样那我再试试接PC好了,虽然DS4手柄也可以通过驱动转换模拟成Xbox手柄来玩PC游戏,但是总有驱动不好用的时候,而转接器接上去之后直接就是识原生别成了Xbox手柄了,各种莫名奇妙的兼容问题应该都不会遇到了。

试了试前几天XGP里下载的《如龙0》吧,结果体验良好,并没有什么延迟或者操作不跟手的体验。

然后我突然想到,Steam里还躺着一个《DJMAX RESPECT V》呢,赶紧打开试试。

结果体验还是惊到我了,几乎和我在PS4平台玩的体验一模一样,轻松打出100%判定,打了几首歌也基本就是自己的正常水准。(所以侧面证明延迟高就是任天堂的锅)

总结

总的来说我的初始目的可以实现,而且还给我带来了一定的惊喜,如果你手里有DS4手柄,或者和我一样索尼系玩得多,更习惯于DS4的按键习惯,想用DS4手柄接其他主机的,那我还是比较推荐购买的,而且99元的价格也比较亲民,至少比再买一款同级别的手柄便宜得多了。

不过还是有几个问题在这里写一下,防止大家踩坑。

  • 一个转换器只能连接一个手柄
  • 转换器每次断电后都需要重新配对
  • NS平台转换器无法唤醒主机
为macOS打造一个防污染的本地DNS

Cover: 華如桃李 - 豆の素@Pixiv

前言

家里这边DNS劫持是在是有点严重,非常影响开发速度,所以我就使用dnsmasqdnscrypt-proxy搭建了一个防污染防劫持的本地DNS。

效果演示

搭建过程

如果网络有问题,建议先执行以下指令追加hosts

sudo sh -c 'sync && echo "199.232.4.133 raw.githubusercontent.com">>/etc/hosts'
sudo sh -c 'sync && echo "199.232.4.133 raw.github.com">>/etc/hosts'

首先要安装Homebrew,这个绝大多数用macOS的人应该都安装了吧,官网https://brew.sh/,安装指令如下。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后就是安装dnsmasqdnscrypt-proxy两大组件了。

brew install dnsmasq
brew install dnscrypt-proxy

装好之后,编辑配置文件,首先是dnsmasq的配置,文件路径/usr/local/etc/dnsmasq.conf

#忽略本机DNS解析结果
no-resolv
#增加配置文件夹
conf-dir=/usr/local/etc/dnsmasq.d
#设置上游服务器为dnscrypt-proxy
server=127.0.0.1#5300

然后是dnscrypt-proxy的配置,文件路径/usr/local/etc/dnscrypt-proxy.toml

#本地监听5300端口
listen_addresses = ['127.0.0.1:5300']
#防劫持DNS使用NestDNS
server_names = ['nextdns']
#设置容错DNS为114DNS
fallback_resolvers = ['114.114.114.114:53']

配置好了之后,重启两个组件的服务。

sudo brew services restart dnsmasq
sudo brew services restart dnscrypt-proxy

之后再把网络设置里的DNS地址修改为127.0.0.1,应用之后就可以享受无污染的DNS了。

执行过上面修改hosts的指令的话建议执行这个清除hosts

sudo sed -i "" "s/199.232.4.133 raw.githubusercontent.com//g" /etc/hosts
sudo sed -i "" "s/199.232.4.133 raw.github.com//g" /etc/hosts

国内白名单

虽然DNS没有了污染,但是国内网站DNS全都变慢了,这个肯定不能接受,所以我们接入dnsmasq-china-list项目,来优化本地的DNS。

mkdir /usr/local/etc/dnsmasq.d
WORKDIR="$(mktemp -d)"
curl https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "$WORKDIR/accelerated-domains.china.conf"
curl https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/bogus-nxdomain.china.conf -o "$WORKDIR/bogus-nxdomain.china.conf"
curl https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/google.china.conf -o "$WORKDIR/google.china.conf"
curl https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf -o "$WORKDIR/apple.china.conf"
sudo cp -f "$WORKDIR/accelerated-domains.china.conf" /usr/local/etc/dnsmasq.d/accelerated-domains.china.conf
sudo cp -f "$WORKDIR/bogus-nxdomain.china.conf" /usr/local/etc/dnsmasq.d/bogus-nxdomain.china.conf
sudo cp -f "$WORKDIR/google.china.conf" /usr/local/etc/dnsmasq.d/google.china.conf
sudo cp -f "$WORKDIR/apple.china.conf" /usr/local/etc/dnsmasq.d/apple.china.conf
rm -rf "$WORKDIR"

OK大功告成。

一键安装脚本

项目地址:https://github.com/mouyase/mac_dnscrypt_installer

脚本使用:

git clone https://github.com/mouyase/mac_dnscrypt_installer
cd mac_dnscrypt_installer
./install.sh