nginx与coredns加dnscrypt-proxy实现自建DOH及China分流

如果只要实现DOH那很简单,CoreDNS本身就可以整一个出来。但是关键是如何避免被扫描到而被滥用、避免被扫描到然后被枪毙。之前看到过一个reddit老哥分享的方法,就是用很长的字符串替换标准DOH的/dns-queryuri来充当password,实现避免除了自己人都无法访问这个DOH服务器的效果。

假设要用sF5FWjUk来作为URI,那么nginx中需要配置一个Location块:

1
2
3
4
5
6
7
8
9
location /sF5FWjUk {
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
# show real IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8443/dns-query;
}

就是说匹配/sF5FWjUk的访问,都转发(proxy_pass)到监听在127.0.0.1的8443端口的CoreDNS所提供的DOH服务上。而CoreDNS的文档里有说明,CoreDNS提供一种特殊的DOH模式:CoreDNS自己不作为TLS终点,也就是CoreDNS虽然提供DOH服务但是不对请求进行HTTPS加解密,而是让另一个软件(比如nginx)负责这个工作。因此CoreDNS的配置文件只需要这样写:

1
2
3
4
https://.:8443 {
bind 127.0.0.1
forward . 127.0.0.1:8053
}

简简单单,功能类似于:把接收到的DoH请求转换成普通DNS请求,转发给监听在8053端口的dnscrypt-proxy。

所以整个流程下来就实现了:

  1. 非公开DoH,防止被探测和滥用
  2. DoH服务
  3. dnscrypt-proxy所提供的ECS、加密DNS请求、中国域名分流请求

等功能。其实dnscrypt-proxy那一部份不是必要的,如果不需要edns-client-subnet之类的功能,对于log也不是特别在意的话,把CoreDNS的forward写成比如forward . 8.8.8.8:53就完事了。

Read More

caddy与nginx简单对比

最近几天折腾了一下caddy和nginx,犹豫了很久,还是切换回nginx了。下面简单说说为什么。

Caddy的优点是它最大的卖点,就是自动ssl。只需要在配置文件里增加一个domain,就可以自动开启ssl加密;而在nginx这边,实现同样的效果需要先certbot certonly --nginx -d xxx.domain.com获得证书之后才行。对于快速部署新网站,关注内容而不用浪费心机去操心这些geek的东西的人来说确实很方便。

除了自动ssl,还有简化的reverse_proxy、一个file_server就搞定静态内容呈现、php-fastcgi一键pass到php-fpm等等,在编程语言那边叫做语法糖的东西,使得caddy在大多数情况下都是新人站长的好选择。

接下来就要说差劲的部份了。首先是caddy比较新,遇到想要实现的效果自己又不会的情况,google一下很难得到解决方案。这就导致了需要花费很多时间去试错,读完文档、看完其他人的Q&A之后基本上还得摸索一通才能解决。而nginx就不一样了,用户众多,你遇到的都有人遇到过,直接C+V就可以解决了。至今我都没搞明白的一个问题就是,如何在caddy中国呢reverse_proxy附加上客户端ip等等信息,让nextcloud不显示反向代理头部错误的警告。其次,nginx已经成熟的stream在caddy还是没有官方实现的一个功能,这个能够干什么当然是“懂的都懂”,这也是我放弃caddy的一个重要原因。第三是对于小鸡来说,caddy动不动40多50m的内存占用比起nginx的20m左右,实在是太多了。扩展一点来说,caddy虽然声称自己可以zero downtime,但是每次reload都是打断连接的;而nginx的reload是真·不断的——这一点可以从走proxy的ssh上确认。

所以最终我还是回到了nginx的怀抱。浪费了比较多的时间,就当是增加了经验吧。

Read More

日记

今天工作上没有什么特别的,主要是下午给一个单位进行了开户。晚上回家又是从平洲回家,今晚的菜是咖喱薯仔鸡杂,蒸水蛋和辣白菜鱿鱼。但是爸爸忙于工作,直到我回家之前都没有出来吃饭。今晚的停车依然是在篮球场旁边的车位,那台奔驰已经停那很久了,每天都不动的。虽然提前出发回家了,但是洗衣机洗衣服还是洗到了10点。干衣机干一下又要11点了,感觉很逊。

Read More

nextcloud部署于docker

nextcloud可以用sqlite就完成部署,但是安装界面就提示了除非是实验用途,否则生产环境(特别是使用同步客户端的情况)就必须使用数据库后端,所以还需要部署一个mysql。

nextcloud的docker页面:https://hub.docker.com/_/nextcloud;mysql的docker页面:https://hub.docker.com/_/mysql

由于需要互相通信,所以需要新建一个网络给它们。

1
docker network create -d bridge example_net_name

由于需要访问数据库,所以启动容器的时候都用name来命名。为了方便看文件,把nextcloud的储存路径挂载到文件系统的指定路径上。因为用的apache版本的nextcloud,所以把内部80端口map到主机的8080端口,方便主机上的apache反代。其实mysql的3306不一定需要map到主机上,不过无所谓。--transaction_isolation=READ-COMMITTED --binlog_format=ROW是根据nextcloud文档传递给mysqld的命令行参数,这种传递方式是符合mysql官方指引的。

1
2
docker run -d --name cloud -v 数据储存路径:/var/www/html -p 8080:80 --restart always --network example_net_name nextcloud 
docker run --name db -v 数据库储存路径:/var/lib/mysql -p 23306:3306 --restart always -e MYSQL_ROOT_PASSWORD=数据库root密码 -d --network example_net_name mysql:8 --transaction_isolation=READ-COMMITTED --binlog_format=ROW

修改apache的配置文件,这一段最好放在所有其他的配置之后,放在</VirtualHost>的上一行。也要注意ProxyPass /为什么放在最后一行,因为放在前面会把其他的都给shadow掉(这也是为什么推荐所有这些配置都放在最后)。

1
2
3
4
5
6
7
8
9
10
ProxyRequests Off
ProxyAddHeaders Off
ProxyPreserveHost On
RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s
ProxyPass /.well-known/carddav http://127.0.0.1:8080/remote.php/dav
ProxyPassReverse /.well-known/carddav http://127.0.0.1:8080/remote.php/dav
ProxyPass /.well-known/caldav http://127.0.0.1:8080/remote.php/dav
ProxyPassReverse /.well-known/caldav http://127.0.0.1:8080/remote.php/dav
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

需要用docker exec -it db bash连接数据库的命令行,然后mysql -uroot -p登录数据库。创建nextcloud用户的时候注意@的地址,localhost可能会访问的时候被reject,猛士就%。

现在打开域名就可以开始安装了,数据库主机是db:3306。

Read More

无标题-2022-12-15-1536

今天听闻很多网点都有人中招了,其实心里是有点担心的,中招是迟早的事情。到了下午,连主管家里的亲戚都中招了,甚至是个孕妇,去了产检就中招了,这种左右为难的情况又怎么办。

微博上有一个很典中典的弱智考研人,看了它的微博乐得不行,算是为数不多的乐子了。

回家的路上顺便加了油,然后就不想煮饭了,所以叫了个外卖。其实也不是特意要去加,只是星期六晚上就直接出发了,没有时间加油了。

Read More

今日琐碎

今天上班上到下午,看见有人传江泽民去世了,本来以为假的,结果上微博一搜,真去世了。1926俱乐部今年解散了,突然觉得真的一个时代落幕了。

Read More

今日琐碎

今天坐在现金柜台里,除了存现金的客户之外,多数都是刁民。早上来了一对夫妻,应该是做法拍房生意的,一来就说开U盾,要开几百万额度的。按规定这是要提供材料证明转账额度的必要性的,但是这俩就一个劲说“你先给我开了,下午我再过来提供材料”,根本不听你的。没办法只能把主管叫来解释,一通说终于提供了房产证作为依据调额。下午又来了一个前几天来调过网银的,上次跟她说了好多次如果要大额转账不如开个U盾一步到位,好说歹说总以为在骗她开U盾,硬是只要短信转账;给她调到2万一天,结果今天就来说“我都来第三次了,上次又说好了好了结果一分钱都转不出”,结果一问,她以为网银转账额度是每张卡分开的……什么品种的人类会产生这种认识?态度屌差。和这个有得一拼的是一个取现的,没有预约只能拿5万,就问能不能把钱转到一起来的另一个人的卡上然后再拿5万……

晚上看知乎刷到一个桂圆的相关话题,只能感叹世界上奇葩太多了,吐槽都吐槽不过来。

Read More