基於nginx proxy dns server


原理實際行就是stream模式,因為nginx 支持基於stream 模式的lb同時支持(tcp.udp)以下是一個簡單的配置

環境准備

  • docker-compose 文件
version: "3"
services: 
  lb: 
    image: openresty/openresty:alpine
    volumes:
    - "./nginx-lb.conf:/usr/local/openresty/nginx/conf/nginx.conf"
    - "./dns.log:/var/log/nginx/dns.log"
    ports:
    - "53:53/udp"
    - "53:53/tcp"
  • nginx 配置
worker_processes  1;
user root;  
events {
    worker_connections  1024;
}
stream {
     upstream dns_servers {
        server 114.114.114.114:53;
        server 8.8.8.8:53;
        server 8.8.8.4:53;
    }
    server {
        listen 53  udp;
        listen 53; #tcp
        proxy_pass dns_servers;
        error_log  /var/log/nginx/dns.log info;
    }
}
  • 啟動
docker-compose up -d

測試

  • dig 測試
dig @127.0.0.1 baidu.com

效果

 

 

說明

有點不太好的,默認的不支持health check,當然我們可以基於openresty 的stream 模塊進行擴展,這樣就可以更好的利用dns 做一些比較
強大的功能(比如coredns,consul)

參考資料

https://www.nginx.com/blog/load-balancing-dns-traffic-nginx-plus/
https://github.com/StalkR/dns-reverse-proxy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM