自建 DNS 服务器，可以规避运营商的 DNS 劫持，还可以一定程度上加速网络访问。除此之外，在自定一些配置之后，能实现广告拦截及其他的一些功能。在这里我们通过在树莓派使用 dnsmasq 搭建这样一个 DNS 服务器。安装 dnsmasqsudo apt-get install dnsmasq配置 dnsmasq首先备份一下原配置文件，命令行如下：sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak接着编辑配置文件，命令行如下：sudo vi /etc/dnsmasq.conf这里，我们首先按下 esc 进入命令模式，然后使用快捷键 yddG 清空文件，之后使用 i 进入插入模式，ctrl+v 粘贴如下配置内容，粘贴完成后按下 esc，最后使用 :wq 保存文件：resolv-file=/etc/my_dns.conf strict-order cache-size=10000 listen-address=127.0.0.1,192.168.0.100 #address可以多行，每行一条dns规则 address=/blog.mangolovecarrot.net/192.168.0.222 address=/mangopi.cn/192.168.0.222其余各项解释：resolve-file：定义 dnsmasq 的上游DNS服务器，默认是 /etc/resolv.conf。但是 resolv.conf 在每次树莓派重启后就会被系统重置，因此我们手动指定 resolve-file 文件（后面会编辑该文件）strict-order：表示严格按照 resolv-file 文件中的顺序从上到下进行DNS解析listen-address：定义 dnsmasq 监听的地址，默认是监控本机的所有网卡上。为使局域网其他设备得以使用需要加上树莓派的局域网 ipcache-size：缓存条数address：自定义域名解析的 ip 地址，以 pi.com 这个域名为例。也可以在其他文件中配置，配置文件放在 /etc/dnsmasq.d/ 中即可。例如可以在 /etc/dnsmasq.d/ 下新建文件test.conf，加入该规则，效果等同编辑 my_dns.conf，命令行如下：sudo nano /etc/my_dns.conf粘贴如下内容：nameserver 127.0.0.1 #以下两行设置自己路由器自动获取到当地的DNS nameserver 119.29.29.29 nameserver 182.254.116.116ctrl+o 保存，之后 回车 确认，然后 ctrl+x 退出。附注，各大 dns（推荐 DNSpod）： 114 dns： 114.114.114.114 114.114.115.115 阿里 dns： 223.5.5.5 223.6.6.6 DNSpod： 119.29.29.29 182.254.116.116 参考资料：https://www.v2ex.com/t/250719参考资料：https://www.v2ex.com/t/250719广告拦截（无需要的话可跳过）dnsmasq 会优先检测 hosts 文件，并通过其解析 ip，我们可以通过修改树莓派 hosts 文件实现拦截广告的需求和其他的一些需求。在用户目录(/home/pi)建立 hosts 文件夹，在文件夹内放置一个 hosts.sh 脚本，修改文件权限：cd ~ mkdir hosts cd hosts touch hosts.sh sudo chmod 777 hosts.sh之后编辑文件，命令行如下：nano hosts.sh粘贴如下内容：#!/bin/sh cd /home/pi/hosts/ echo "***下载 g hosts 文件***" wget --no-check-certificate https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O hosts_g.txt; echo "***下载 ad hosts 文件***" wget --no-check-certificate https://raw.githubusercontent.com/vokins/yhosts/master/hosts -O hosts_ad.txt; echo "***合并 hosts 文件***" cat hosts_g.txt hosts_ad.txt > hosts.txt echo "***复制 hosts 文件***" sudo cp hosts.txt /etc/hosts echo "***hosts 文件更新完成"ctrl+o 保存，之后 回车 确认，然后 ctrl+x 退出。编辑完成之后运行一下，命令行如下：sudo sh hosts.sh设置定时执行更新 hosts 脚本，命令行如下：sudo crontab -e添加如下内容至文件末行（每天三点半执行一次）：30 3 * * * sh /home/pi/hosts/hosts.sh设置完毕后重启服务，测试重启 dnsmasqsudo service dnsmasq restart查看 dnsmasq 状态sudo service dnsmasq status查看网络状态可以通过 dig 一下相关网址来测试 dns 是否生效。如果未安装 dnsutils，则通过如下命令安装：sudo apt-get install dnsutils之后可以通过如下命令行简单测试：dig mangopi.cn内网其他设备使用这台dns首先，如果条件允许可以直接在路由器配置，即配置路由器 LAN 口的 DNS 为树莓派 ip，这样便无需单独为设备配置。例如：华硕路由器（RT-AC68U），设置 内部网络-DHCP 服务器-DNS Server 1 为树莓派 ip，之后应用即可，其他设备大同小异。我的路由器的DNS是不可更改的，所以只好单独设置各设备的DNS。在设备上单独设置方法如下：手机wifi设置为静态，修改两个DNS服务器IP，主服务器填入树莓派IP，副服务器一般填写网关IP，也就是路由器IP。一般为192.168.0.1。注意顺序别反了，要优先使用树莓派的DNS服务。macOS：打开网络设置-高级-dns，配置为树莓派 ip 即可。Windows：控制面板-网络和Internet项-查看网络状态和任务-更改适配器设置-右键正在使用的本地连接-属性-双击Internet协议4（TCP/IPV4），将内容填写至相关部分即可。原文链接
白鹭引擎开发扫雷游戏 - 微信小游戏服务端（云开发）问题集
云函数云函数怎么添加，代码到底在哪写？？添加点开发者工具的云开发按钮打开云开发界面。再点云函数-新建云函数即可新建。除了名字其他默认即可。编写在开发者工具项目目录下，自己新建一个文件夹比如cloudfunction，然后在project.config.json中添加一条设置："cloudfunctionRoot": "cloudfunction",你会发现这个目录图标上添加了一个云符号，表示被识别为云函数目录了。此时目录还是空的，在目录上点右键-同步云函数列表，会将你刚才新建的云函数同步到这个文件夹下，每个函数一个目录。顺序反过来也可以，先创建云目录再新建云函数都可以。本地调试报错？提示没有wx-server-sdkwx-server-sdk模块是必须的。引用wx-server-sdk这个模块既然是用微信的服务器，那么肯定会用到这个模块来获取用户信息什么的。这个模块也好，第三方模块也好都是运行在Nodejs下的，所以你需要本地先安装一个Nodejs。然后命令行进入云函数目录cloudfunction/myFunc，然后执行这个命令:npm install --save wx-server-sdk@latest完成以后就可以进行本地调试了。编写好的云函数如何上传部署？在云函数目录上点右键，有两个上传选项。上传并部署：所有文件速度较慢。将你本地的云函数文件还有所有用到的nodejs模块文件全部一起打包上传。比较耗时。上传并部署：云端安装依赖速度很快。云函数目录下的node模块不会被上传。云端会根据云函数目录下的package.json文件的内容在云端进行安装相关依赖。所以使用这个选项的时候一定要保证云函数目录里有package.json文件（有时候只有lock.json是不行的，需要手动创建）。如果你没有用到第三方模块的话，这个文件写成这样就够了（"wx-server-sdk"模块是必须的）：{ "dependencies": { "wx-server-sdk": "latest" } }本地的Nodejs环境搞不定怎么办不需要本地调试的话，本地的Nodejs环境就不是必须的。如上一条所述，使用上传并部署：云端安装依赖即可。每次上传所有文件很慢，好烦参见前面说的上传并部署：云端安装依赖。为什么进行数据库操作后，success没有被回调？这里是个大坑。官方API文档说是支持的，其实，success fail complete 的回调只能在小游戏客户端使用，而云函数端只支持Promise方式回调。这里是官方的回复系列文章白鹭引擎开发扫雷游戏 - 避开微信胶囊菜单，在白鹭引擎中调用微信小游戏API白鹭引擎开发扫雷游戏 - 打包Apple iOS（AppleStore）原生问题集白鹭引擎开发扫雷游戏 - 打包安卓原生问题集白鹭引擎开发扫雷游戏 - 微信小游戏客户端问题集白鹭引擎开发扫雷游戏 - 微信小游戏服务端（云开发）问题集【当前文章】