2020年12月20日星期日

使用certbot实现cloudflare的DNS方式申请证书

 众所周知,在天朝家宽是封了80和443端口的。如果想申请到letsencrypt,通过普通方式是不可能的。还好letsencrypt可以支持DNS的方式申请到证书。下面就介绍如何通过cloudflare的DNS申请证书。这里以ubuntu为例子。

1.安装certbot

sudo apt update
sudo apt install certbot

2. 安装cloudflare的插件

sudo apt install python3-pip
sudo pip3 install certbot-dns-cloudflare

确认certbot-dns-cloudflare是否已经装上了,如果没有需要找到原因并装上(比如说acme版本低,可以通过python3 -m pip install --upgrade pip 升级pip,然后 pip install --upgrade acme, 再 pip install --upgrade certbot-dns-cloudflare)。确认的方法是,输入命令 sudo certbot plugins,会输出下面的结果

* dns-cloudflare Description: Obtain certificates using a DNS TXT record (if you are using Cloudflare for DNS). Interfaces: IAuthenticator, IPlugin Entry point: dns-cloudflare = certbot_dns_cloudflare.dns_cloudflare:Authenticator

3. 制作cloudflare的链接密匙

mkdir -p ~/.secrets/certbot
chmod 0700 ~/.secrets
cat > ~/.secrets/certbot/cloudflare.ini <<END
dns_cloudflare_email = admin@example.com
dns_cloudflare_api_key = 1c6287abdc254293f3b4837ad871937ajfb81
END
chmod 0400 ~/.secrets/certbot/cloudflare.ini

dns_cloudflare_email是你登录cloudflare的邮箱

dns_cloudflare_api_key是cloudflare的API密码。获取地址:https://dash.cloudflare.com/profile ,点击Global API Key的查看获取。

4. 获取证书

sudo certbot certonly -d '*.example.com' \
--agree-tos \
--email admin@example.com \
--server https://acme-v02.api.letsencrypt.org/directory \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
--dns-cloudflare-propagation-seconds 30

5. 如何更新证书

sudo certbot renew

或者强制更新

sudo certbot renew --force-renewal

证书有效期3个月,如何通过计划任务自动更新,这里不详细介绍。

注意泛域名证书*.abc.com, 不能用于域名abc.com的证书,如果需要合并,需要下面的命令:

sudo certbot certonly \
  -d '*.abc.com' \
  -d 'abc.com' \
  --agree-tos \
  --email tianlichunhong@gmail.com \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 30

2020年12月10日星期四

在openwrt中使用luci-app-https-dns-proxy,并设置代理

 大家知道在国内dns是被干扰的。而且在DNS干扰方面是越来越严重。这十多年干扰的方式过程是这样的:

1. 十年前干扰DNS,就是国内的DNS服务器将一些海外网站的IP换成一个不可到达的假IP。这时候,可以通过host,或者更换成国外的DNS服务器就可以避免干扰;

2. 后来除了DNS继续干扰,同时将一些网站IP直接丢包。如谷歌IP,即使你获得真的IP也无法连上;

3. 接着将国外多数DNS服务器IP直接丢包,这样即使你更换成国外的DNS服务器,发现已经连不上DNS服务器,所以也就查询不到海外网站的IP。

4. 再后来,国内建立个假的国外DNS服务器,如8.8.8.8 和1.1.1.1, 你发现ping是正常的。即使你将你的DNS服务器设置为上面这些DNS服务器,发现返回来的还是干扰的IP地址。因为你连上的就是一个假的“国外”DNS服务器。


针对上面的问题,一个解决方案是使用DNS Over HTTPS Proxy (DoH)+privoxy。 下面介绍如何在openwrt上使用DoH

1. 在Openwrt上输入命令:

opkg update
opkg install luci-app-https-dns-proxy
opkg install privoxy

2. 设置privoxy

   修改/etc/config/privoxy 文件,提换为如下内容:

config	privoxy	'privoxy'
	option	confdir		'/etc/privoxy'
	option	logdir		'/var/log'
	option	logfile		'privoxy.log'
	list listen_address	'0.0.0.0:8118'
	option  forward_socks5   '/ 0.0.0.0:1080  .'

这里假定你已经安装了sock5的代理,而且端口是1080。 安装privoxy的 原因是将socks5代理转成http的代理。我发现luci-app-https-dns-proxy不支持socks5,只支持http,虽然一些文档中说是支持socks5的。你们也可以尝试你们的是否可以支持socks5.

3. 设置luci-app-https-dns-proxy


如果你试试socks5, 可以将代理这里改成 socks5://127.0.0.1:1080 (但是我的不成功)。如果不设置代理,在个别区域DoH是没法使用的,因为如上面第4点原因,DoH是依靠bootstrap_dns (1.1.1.1), 这个IP地址本身就是假的。所以https的证书验证就没有通过,所以查询不到IP。只有通过国外代理的方式才能找到真正的IP。

4. 设置dnsmasq

    编辑文件/etc/dnsmasq.conf, 在文件后面加上一行  server=127.0.0.1#5054

至于设置中需要用到的socks5代理,shadowsocks、vmess、vless、trojan、xray等等这些工具都能提供。这里不详细介绍。

安装 PaddleOCR的方法

  安装飞桨版本:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/windows-pip.html 命令:  python -m pip...