日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ChinaDNS 结合DNSMasq防dns挟持

發布時間:2025/3/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ChinaDNS 结合DNSMasq防dns挟持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ChinaDNS 與 DNSMasq 結合起來用,使其更加穩定并且可以支持 TCP 查詢,防止dns污染和挾持,DNSMasq 作為主 DNS 服務端,將 ChinaDNS 作為 DNSMasq 的上游 DNS

ChinaDNS安裝配置

1. 下載并編譯

  • 如果你的系統中沒有make和gcc就需要先安裝
  • # Ubuntu / Debian apt-get install -y make gcc # CentOS yum install -y make gcc
  • 下載 ChinaDNS 源碼并解壓編譯
  • cd /root wget --no-check-certificate https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz tar -zxvf chinadns-1.3.2.tar.gz mv chinadns-1.3.2 chinadns cd chinadns ./configure && make
  • 更新 chnrouter
  • cd /root/chinadn curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt

    2. 配置 supervisor 守護進程

    防止 ChinaDNS 進程掛掉
    如果你的系統中已經有 supervisor,那么忽略安裝步驟,酌情參考除了安裝之外的配置步驟

  • 安裝
  • # python2 pip install supervisord # python3 pip install git+https://github.com/Supervisor/supervisor
  • 初始化并修改配置文件
    此處和原先不一樣的一點:讓 ChinaDNS 在5353端口(或者其他非53端口)監聽,因為我們要讓它做 DNSMasq 的上游 DNS
  • echo_supervisord_conf > /etc/supervisord.conf echo "[program:chinadns] command=/root/chinadns/src/chinadns -p 5353 -m -c /root/chinadns/chnroute.txt -s 114.114.114.114,208.67.222.222:443 user = root autostart = true autorestart = true" >> /etc/supervisord.conf
  • 添加 supervisor 開機自啟
  • echo "supervisord -c /etc/supervisord.conf" >> /etc/rc.local # 執行此命令以防系統沒有權限執行開機自啟腳本(by youngerzhong) chmod +x /etc/rc.local

    之后查看/etc/rc.local文件,如果有exit 0這行,就把它移動到文件的最后一行,即保證我們上面添加的這句在exit 0前面

  • 啟動 supervisor
  • supervisord -c /etc/supervisord.conf

    然后查看程序運行狀態

    supervisorctl status

    如果有輸出 chinadns 的運行狀態RUNNING就說明成功了

    此時可以用dig命令檢查一下看 ChinaDNS 是否有正常運作

    dig www.pixiv.net @127.0.0.1 -p 5353

    #!/bin/sh

    curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/chinadns/chinadns_chnroute.txt
    killall chinadns
    echo "Upgrade is complete!"

    DNSMasq安裝配置

    如果你已經有 DNSMasq,那么忽略安裝步驟,酌情參考除了安裝之外的配置步驟

    1. 安裝

    Ubuntu / Debian

    apt-get install dnsmasq

    CentOS

    CentOS yum安裝的 DNSmasq 版本可能比較舊可以先下載最新版編譯好,yum安裝完之后再替換掉bin文件。

    先從 http://www.thekelleys.org.uk/dnsmasq/ 找到你想要的 DNSmasq 版本的源碼壓縮包的下載地址,例如我選擇的是我寫這篇文章時的最新版dnsmasq-2.70.tar.gz。

    下載對應的源碼壓縮包并解壓

    cd /root wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.70.tar.gz tar xf dnsmasq-2.70.tar.gz

    編譯,源碼 make 不帶 etc 等

    cd dnsmasq-2.70 make V=s

    然后用 yum 安裝 DNSmasq

    yum install dnsmasq

    yum 安裝的是2.4.8版本,然后我們再用我們編譯好的最新版本替換

    yes | cp -f ./src/dnsmasq /usr/sbin/dnsmasq

    這時可以查看 DNSmasq 的版本檢驗一下

    dnsmasq -v

    看一下版本號,應該就是我們編譯好的版本了

    配置實例詳解

    編輯/etc/dnsmasq.conf文件,將下面提到的配置項解除注釋并進行更改

    DNSmasq 的配置文件位于/etc/dnsmasq.conf,下面是 DNSmasq 中和 DNS 相關的配置項的說明。

    此處的配置僅為說明,請勿照抄配置

    # 用指定的端口代替默認的DNS 53端口,如果設置為0,則完全禁止DNS功能,只使用dhcp服務 port=5353# 以下兩個參數告訴Dnsmasq過濾一些查詢:1.哪些公共DNS沒有回答 2.哪些root根域不可達。 # 從不轉發格式錯誤的域名 domain-needed # 從不轉發不在路由地址中的域名 bogus-priv# resolv-file配置Dnsmasq額外的向流的DNS服務器,通過下面的選項指定其他文件。 # 如果不開啟就使用linux主機默認的/etc/resolv.conf里的nameserver。 resolv-file=/etc/dnsmasq.d/upstream_dns.conf# 默認情況下Dnsmasq會發送查詢到它的任何上游DNS服務器上,如果取消注釋, # 則Dnsmasq則會嚴格按照/etc/resolv.conf中的DNS Server順序進行查詢。 strict-order# 以下兩個參數控制是否通過/etc/resolv.conf確定上游服務器,是否檢測/etc/resolv.conf的變化。 # 如果你不想Dnsmasq讀取/etc/resolv.conf文件或者其他文件,獲得它的servers,則取消注釋。 no-resolv # 如果你不允許Dnsmasq通過輪詢/etc/resolv.conf或者其他文件來獲取配置的改變,則取消注釋。 no-poll# 增加一個name server,一般用于內網域名 server=/localnet/192.168.0.1# 設置一個反向解析,所有192.168.3.0/24的地址都到10.1.2.3去解析 server=/3.168.192.in-addr.arpa/10.1.2.3# 增加一個本地域名,會在/etc/hosts中進行查詢 local=/localnet/# 增加一個域名,強制解析到你指定的地址上 address=/double-click.net/127.0.0.1# 同上,還支持ipv6 address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83# 增加查詢yahoo google和它們的子域名到***、search查找 ipset=/yahoo.com/google.com/***,search# 你還可以控制Dnsmasq和Server之間的查詢從哪個網卡出去 server=10.1.2.3@eth1# 指定源地址攜帶10.1.2.3地址和192.168.1.1的55端口進行通訊 server=10.1.2.3@192.168.1.1#55# 改變Dnsmasq默認的uid和gid user= group=# 如果你想Dnsmasq監聽某個端口為dhcp、dns提供服務 interface=# 你還可以指定哪個端口你不想監聽 except-interface=# 設置想監聽的地址,如果你本機要使用寫上127.0.0.1。 listen-address=# 如果你想在某個端口只提供dns服務,則可以進行配置禁止dhcp服務 no-dhcp-interface=# On systems which support it, dnsmasq binds the wildcard address, # even when it is listening on only some interfaces. It then discards # requests that it shouldn't reply to. This has the advantage of # working even when interfaces come and go and change address. If you # want dnsmasq to really bind only the interfaces it is listening on, # uncomment this option. About the only time you may need this is when # running another nameserver on the same machine. bind-interfaces# 如果你不想使用/etc/hosts,則取消下面的注釋 no-hosts# 如果你項讀取其他類似/etc/hosts文件,則進行配置 addn-hosts=/etc/banner_add_hosts# 自動的給hosts中的name增加一個域名 expand-hosts# 給dhcp服務賦予一個域名 domain=thekelleys.org.uk# 給dhcp的一個子域賦予一個不同的域名 domain=wireless.thekelleys.org.uk,192.168.2.0/24# 同上,不過子域是一個范圍 domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200# dhcp分發ip的范圍,以及每個ip的租約時間 dhcp-range=192.168.0.50,192.168.0.150,12h# 同上,不過給出了掩碼 dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h# 自動加載conf-dir目錄下的配置文件 conf-dir=/etc/dnsmasq.d# 設置dns緩存大小,默認為150條cache-size=150

    修改完配置之后需要重啟 DNSmasq 以使配置生效

    # 指定監聽 53 端口 port=53# 禁止 DNSMasq 使用 resolv.conf no-resolv no-poll# 指定監聽IP,將 x.x.x.x 換成你的 eth0 網卡IP(用 ifconfig 命令查看) listen-address=127.0.0.1,x.x.x.x# 指定額外配置文件夾 conf-dir=/etc/dnsmasq.d/`

    如果你比較懶不想找而且只需要用 DNSMasq 做到本文所述功能,也可以直接
    (注意替換x.x.x.x)

    echo "port=53 no-resolv no-poll listen-address=127.0.0.1,x.x.x.x conf-dir=/etc/dnsmasq.d/" > /etc/dnsmasq.conf

    然后運行以下命令寫入配置以將 ChinaDNS 作為上游 DNS

    echo "server=127.0.0.1#5353" > /etc/dnsmasq.d/chinadns.conf

    重啟 DNSMasq

    systemctl restart dnsmasq.service

    配置過程中需要注意的幾點

    把你的服務器作為一個 DNS 服務器

  • 配置中的listen-address必須為你服務器的公網 IP
  • listen-address=你的公網IP
  • 在防火墻中開放 53 端口
  • iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
  • 如果是 CentOS 的話需要保存并重啟防火墻使以上改動生效
  • service iptables save service iptables restart

    如果想強制重定向本地的 DNS 請求給 DNSmasq

    eth0為網卡名,請替換為你自己機器的網卡名

    iptables -t nat -A PREROUTING -i eth0 -p upd --dport 53 -j REDIRECT --to-port 53

    然后重啟防火墻(如果是 CentOS)

    如果想自定義上游 DNS

    no-resolv no-poll server=x.x.x.x#端口 //不寫`#端口`默認是`53

    使用上的一些建議

    如果需要自定義上游 DNS 服務器,以及設置特定域名的 Host 之類的,建議寫到一個單獨的.conf配置文件里,然后放到一個專門的文件夾,然后修改 DNSmasq 配置中的這條

    conf-dir=配置文件夾

    這樣的話以后修改配置就不需要頻繁修改主配置文件,而且也有利于配置的分塊

    dnsmasq-china-list

    dnsmasq-china-list項目維護了一張國內常用但是通過國外DNS會解析錯誤的網站域名的列表,保證List中的國內域名全部走國內DNS服務器解析。

    項目地址: https://github.com/felixonmars/dnsmasq-china-list

    使用

    取消配置文件中conf-dir=/etc/dnsmasq.d這一行的注釋

    如果此處你是用的是自己的配置文件夾,那么久在后續步驟中將配置文件放入你自己的配置文件夾即可

    隨便找一個地方將項目文件下載下來

    git clone https://github.com/felixonmars/dnsmasq-china-list.git

    然后將其中的accelerated-domains.china.conf, bogus-nxdomain.china.conf,google.china.conf(可選)放到/etc/dnsmasq.d/目錄中
    最后重啟 DNSmasq 即可

    轉載于:https://blog.51cto.com/m51cto/2358638

    總結

    以上是生活随笔為你收集整理的ChinaDNS 结合DNSMasq防dns挟持的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。