dns over https 简单测试(docker 运行)
dns over https 已经成为了标准了,给予我们的dns 解析添加了安全的支持
测试项目使用docker && docker-compose 运行
一张参考图

环境准备
- dnscrypt-proxy (dns 代理的)
 
直接下载了linux 版本,并安装依赖
https://github.com/jedisct1/dnscrypt-proxy/releases
- doh server
 
使用源码编译安装,使用docker 的multi stage 构建
- nginx
 
使用openresty
docker-compose
- 文件
 
version: "3"
services:
  nginx:
    image: openresty/openresty:alpine
    ports:
    - "443:443"
    - "8080:80"
    volumes:
    - "./nginx/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf"
    - "./nginx/cert/apicaddy.com/cert1.pem:/usr/local/openresty/nginx/conf/cert1.pem"
    - "./nginx/cert/apicaddy.com/privkey1.pem:/usr/local/openresty/nginx/conf/privkey1.pem"
  dns-server:
    image: dalongrong/doh-server
    volumes:
    - "./dns-server/doh-server.conf:/app/doh-server.conf"
    build:
      context: ./dns-server
      dockerfile: Dockerfile
  dns-proxy:
    image: dalongrong/dnscrypt-proxy
    build:
      context: ./dns-proxy
      dockerfile: Dockerfile
- nginx 配置
 
worker_processes auto;
events {
    worker_connections 65535;
}
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    server {
        listen 80;
        server_name localhost;
        charset utf-8;
        location / {
           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           client_body_buffer_size 10M;
           client_max_body_size 10G;
           proxy_buffers 1024 4k;
           proxy_pass http://dns-server:8053;
           real_ip_header X-Forwarded-For;
           real_ip_recursive on;
        }
        location /dns-query {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_redirect off;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_read_timeout 86400;
                proxy_pass http://dns-server:8053/dns-query ;
        }
    }
    server {
        listen 443 ssl http2;
        server_name app.apicaddy.com;
        ssl_certificate cert1.pem;
        ssl_certificate_key privkey1.pem;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers on;
        location / {
           proxy_set_header Host $http_host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           client_body_buffer_size 10M;
           client_max_body_size 10G;
           proxy_buffers 1024 4k;
           proxy_pass http://dns-server:8053;
           real_ip_header X-Forwarded-For;
           real_ip_recursive on;
        }
        location /dns-query {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_redirect off;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_read_timeout 86400;
                proxy_pass http://dns-server:8053/dns-query ;
        }
    }
}
- 修改配置文件
 
因为运行的时候没有启动ipv6 ,同时默认大部分软件绑定的端口是127.0.0.1
doh-server 配置修改
listen = [
    "0.0.0.0:8053",
]
。。。。
upstream = [
    # "1.1.1.1:53",
    # "1.0.0.1:53",
    # "8.8.8.8:53",
    # "8.8.4.4:53",
    "dns-proxy:53"
]
dnscrypt-proxy 配置:
listen_addresses = ['0.0.0.0:53']

构建&测试
- 构建
 
docker-compose up -d
- 测试 
查询参数的意思参考 https://developers.google.com/speed/public-dns/docs/dns-over-https
 
http 实际上也是可以访问的,只是及时必须使用https
 
请求log

 
说明
dns over https 是很不错的东西,从安全以及灵活性,都是比较方便的,更多的使用还有待仔细研究
参考资料
https://github.com/jedisct1/dnscrypt-proxy/releases 
https://www.aaflalo.me/2018/10/tutorial-setup-dns-over-https-server/ 
https://github.com/rongfengliang/dns-proxy-demo 
https://github.com/m13253/dns-over-https 
https://developers.google.com/speed/public-dns/docs/dns-over-https
dns over https 简单测试(docker 运行)的更多相关文章
- apache airflow docker 运行简单试用
		
airflow 是一个编排.调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化. airflow 将workflow编排为tasks ...
 - springboot+nginx+https+linux实现负载均衡加域名访问简单测试
		
把springboot项目打包成三个jar包,并指定端口为 14341,14342,14343 下载腾讯云免费ssl证书,解压后会出现如下图文件夹 把nginx文件夹下的 .crt 和 .key文件复 ...
 - Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
		
一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...
 - 在 Azure 上使用 Docker运行 Mono
		
Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个火热的技术,并且提供简单的方 ...
 - Docker学习笔记之搭建Docker运行环境
		
0x00 概述 既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习.得益于与商业性的 ...
 - 使用Docker运行Java Web应用
		
前言 Tomcat是目前比较流行的Web应用服务器,深受Java爱好者的喜爱.通常J2EE应用的产出物是一个war包,这篇文章将为你介绍如何使用Docker运行Tomcat+war包的Java Web ...
 - Docker运行GUI软件的方法
		
转自 https://www.csdn.net/article/2015-07-30/2825340 简介: Docker通过namespace将容器与主机上的网络和运行环境进行了隔离,默认情况下,在 ...
 - Docker运行MongoDB及Redis及ssh端口映射远程连接
		
Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...
 - Docker运行 Mono
		
Docker运行 Mono Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个 ...
 
随机推荐
- 5-11敏捷开发rails的章节: Rspec(使用方法) ,Slim(使用操作简介)
			
Rspec: test Slim :可以取代ERB的模版语言.(简单了解了以下,方便写代码,但我觉得不方便读.还是用原生的html) Webpack管理css: 不再使用app/assets/styl ...
 - spoj Prime Generator
			
题意:判断ll-rr范围内的质数. 一个个用miller-rabin算法判断 //#pragma comment(linker,"/STACK:1024000000,1024000000&q ...
 - HDU 4764 Stone (巴什博弈)
			
题意 Tang和Jiang玩石子游戏,给定n个石子,每次取[1,k]个石子,最先取完的人失败,Tang先取,问谁是赢家. 思路 比赛的时候想了不久,还WA了一次= =--后来看题解才发现是经典的巴什博 ...
 - OC MRC之 @property参数(代码分析)
			
第一部分 // // main.m // 04-@property参数 // // Created by apple on 13-8-9. // Copyright (c) 2013年 itcast. ...
 - js中JSON.stringify用于自定义的类
			
参考:http://stackoverflow.com/questions/7356694/how-to-json-stringify-a-user-defined-class-in-javascri ...
 - 标准库头文件 (CA2T)
			
标准库中,CA2T,CA2W的头文件是: #include <atlstr.h>
 - CAS-认证流程
			
从结构上看cas包括两个部分,CAS server 和CAS client 需要独立部署,主要负责用户的认证工作,CAS负责处理对客户端受保护资源的访问请求,需要登录时,重新定向到CAS Server ...
 - DBGRID 拖动滚动条 和 鼠标滚轮的问题
			
滚动条拖动问题 默认是,拖动时,网格内数据不变,等放开鼠标后才会变. 方法 拖动时同时变,当前记录也变,不用新控件 http://wenwen.sogou.com/z/q185291591.htm 鼠 ...
 - 【笔记】《深入浅出MFC》第5章 总观Application Framework
			
凝聚性强.组织化强的类库就是Application Framework.一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是Application Framework ...
 - linux下挂盘
			
1.首先,查看磁盘,fdisk -l Disk /dev/xvdf: bytes, sectors Units = sectors of * = bytes Sector size (logical/ ...