شما هنوز به سیستم وارد نشده اید.
سلام. اگر خاطر دوستان باشه، من قبلا در تاپیک جلوگیری از DNS Spoofing با استفاده از DNSCrypt در مورد DNSCrypt و مزایای استفاده از اون صحبت کرده بودم. توسعه دهنده قبلی DNSCrypt توسعه این سیستم رو متوقف کرد و ادامه نداد. ولی توسعه نسخه ۲ این پروژه توسط توسعه دهنده دیگری ادامه پیدا کرد و در حال حاضر به صورت فعالی ادامه دارد. در نسخه ۲ بسیاری از اشکالت برنامه و پروتکل مورد استفاده آن رفع شد و برنامه dnscrypt-proxy با استفاده از زبان Go نوشته شد، که این کار مزایای بسیاری را به همراه داشت. در این تاپیک شیوه استفاده و راه اندازی نسخه ۲ DNSCrypt را با استفاده از بسته dnscrypt-proxy را توضیح می دهم. برنامه دیگری که در این تاپیک از آن استفاده میکنیم Pi-Hole میباشد. این برنامه یک سرویس AD-BLOCKING را برای کل سیستم شما فراهم می کند. به طوریکه درخواستهای اتصال به سرورهای تبلیغات را به کلی قطع می کند که اینکار سبب بهبود کیفیت شبکه و امنیت سیستم شما میشود. این برنامه از سرور dnsmasq به عنوان سرور لوکال DNS استفاده میکند که نقش DNS Caching را ایفا میکند و این خود سبب بهبود سرعت پاسخگویی به درخواستهای DNS به صورت چشمگیری میشود.
مراحل کار به ترتیب زیر میباشد:
۱- نصب بسته های dnscrypt-proxy و pi-hole-server از طریق AUR.
بسته dnsmasq به عنوان پیش نیاز pi-hole به صورت اتوماتیک نصب میشود.
۲- تنظیم dnsmasq برای استفاده از فایل تنظیمات دلخواه در دایرکتوری etc/dnsmasq.d/:
ابتدا دستور زیر را برای باز کردن فایل تنظیمات dnsmasq اجرا کنید:
$ sudo nano /etc/dnsmasq.conf
سپس به انتهای فایل رفته و خط زیر را با برداشتن علامت # از ابتدای خط از حالت کامنت خارج کنید:
conf-dir=/etc/dnsmasq.d/,*.conf
سپس فایل را ذخیره کرده و خارج شوید.
۳- انجام تنظیمات مربوط به dnscrypt
ابتدا دستور زیر را برای ساخت فایل تنظیمات dnscrypt در دایرکتوری etc/dnsmasq.d/ اجرا کنید:
$ sudo nano /etc/dnsmasq.d/02.dnscrypt.conf
سپس محتویات زیر را در این فایل قرار داده و فایل را ذخیره کنید:
listen-address=127.0.0.1
server=127.0.0.1#5354
سپس فایل تنظیمات dnscrypt را با استفاده از دستور زیر باز کنید:
$ sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
در این فایل مقدار پارامتر require_dnssec را برابر با true قرار دهید تا فقط از سرورهای دارای قابلیت dnssec استفاده شود:
# Server must support DNS security extensions (DNSSEC)
require_dnssec = true
سپس فایل را ذخیره کرده و دستور زیر را اجرا کنید:
$ sudo systemctl edit dnscrypt-proxy.socket
و محتویات زیر را در فایل باز شده قرار داده و ذخیره کرده و خارج شوید:
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5354
ListenDatagram=127.0.0.1:5354
اینکار سبب میشود که dnscrypt به جای پورت پیش فرض 53 از پورت 5354 استفاده نماید و پورت 53 برای استفاده dnsmasq آزاد باشد و dnsmasq به عنوان سرور dns پیش فرض سیستم عمل کند.
۴- انجام تنظیمات مربوط به pi-hole
ابتدا دستور زیر را اجرا کنید:
$ sudo nano /etc/pihole/setupVars.conf
سپس در فایل باز شده تمامی خطوطی که با PIHOLE_DNS شروع میشوند را با قرار دادن کاراکتر # در ابتدای خط به حالت کامنت در بیاورید:
#PIHOLE_DNS_1=8.8.8.8
#PIHOLE_DNS_2=8.8.4.4
بعد از ذخیره کردن فایل دستور زیر را اجرا کنید:
$ sudo nano /etc/dnsmasq.d/01-pihole.conf
در فایل باز شده تمامی خطوطی که با server یا با interface شروع میشوند را با قرار دادن کاراکتر # در ابتدای خط به حالت کامنت در بیاورید:
addn-hosts=/etc/pihole/gravity.list
addn-hosts=/etc/pihole/local.list
addn-hosts=/etc/pihole/black.list
localise-queries
no-resolv
cache-size=10000
log-queries=extra
log-facility=/run/log/pihole/pihole.log
local-ttl=300
log-async
#server=8.8.8.8
#server=8.8.4.4
#interface=enp4s0f2
فایل را ذخیره کرده و خارج شوید.
با اینکار pi-hole از سرور های dns پیش فرض خود استفاده نمی کند.
۵- تنظیم سیستم برای استفاده از سرور DNS لوکال
فایل etc/resolvconf.conf/ را با دستور زیر باز کنید:
$ sudo nano /etc/resolvconf.conf
در فایل باز شده خط name_servers را از حالت کامنت خارج کنید که به صورت زیر شود:
# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details
resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=127.0.0.1
فایل را ذخیره کرده و خارج شوید.
اگر از برنامه networkmanager برای مدیریت شبکه استفاده میکنید دستور زیر را برای باز کردن فایل تنظیمات networkmanager اجرا کنید:
$ sudo nano /etc/NetworkManager/NetworkManager.conf
سپس در فایل باز شده زیر قسمت [main] مقدار پارامتر dns را به صورت زیر قرار دهید:
[main]
dns=none
ذخیره کرده و خارج شوید.
۶- فعال کردن سرویسهای مربوط و راه اندازی سیستم
با دستور زیر سرویس های مورد نیاز را فعال کنید:
$ sudo systemctl enable dnsmasq.service dnscrypt-proxy.socket
سپس سیستم خود را ریستارت کنید تا سرویسهای شما فعال و اجرا شود.
۷- تست سیستم
ابتدا تست کنید که سرویسهای شما بدون مشکل اجرا شده باشند:
$ sudo systemctl status dnsmasq.service dnscrypt-proxy.socket
سپس تست کنید که محتویات فایل etc/resolv.conf/ به صورت زیر باشد:
# Generated by resolvconf
nameserver 127.0.0.1
در غیر اینصورت مقدار nameserver را مطابق بالا تنظیم کنید.
تست dnscrypt:
$ dnscrypt-proxy -resolve ddg.gg
خروجی باید چیزی شبیه به این باشد:
[email protected] ~ % dnscrypt-proxy -resolve ddg.gg
Resolving [ddg.gg]
Domain exists: yes, 6 name servers found
Canonical name: ddg.gg.
IP addresses: 184.72.106.52
TXT records: -
Resolver IP: 128.52.130.209 (onic.csail.mit.edu.)
تست dnsmasq
$ dig ddg.gg
خروجی چیزی شبیه به این باید باشد:
[email protected] ~ % dig ddg.gg
; <<>> DiG 9.12.0 <<>> ddg.gg
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56707
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ddg.gg. IN A
;; ANSWER SECTION:
ddg.gg. 396 IN A 184.72.106.52
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Mar 03 10:59:32 +0330 2018
;; MSG SIZE rcvd: 51
چک کنید که در خروجی زمان درخواست و سرور مورد استفاده به صورت زیر باشد
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
تست pi-hole
صفحه PAGES TO TEST AD-BLOCKING PERFORMANCE را در مرورگر خود باز کنید. در این صفحه تعدادی لینک به صفحاتی که محتوی تبلیغات هستند قرار دارد که میتوانید از آنها برای تست استفاده کنید. خود صفحه نیز دارای یک سری تبلیغات از گوگل و آمازون می باشد که در صورتیکه همه چیز به خوبی انجام شده باشد این تبلیغات نمایش داده نمی شود. با دستور pihole نیز می توانید کارکرد Pi-Hole را کنترل و مانیتور کنید.
به عنوان نمونه با فلگ status وضعیت pihole را چک میکنید:
[email protected] ~ % pihole status
[sudo] password for morealaz:
[✓] DNS service is running
[✓] Pi-hole blocking is Enabled
با فلگ t- لاگ pihole را به صورت live مشاهده می کنید:
[email protected] ~ % pihole -t
[i] Press Ctrl-C to exit
Mar 3 11:08:54 dnsmasq[2667]: 808 127.0.0.1/53042 query[A] clients4.google.com from 127.0.0.1
Mar 3 11:08:54 dnsmasq[2667]: 808 127.0.0.1/53042 cached clients4.google.com is <CNAME>
Mar 3 11:08:54 dnsmasq[2667]: 808 127.0.0.1/53042 cached clients.l.google.com is 172.217.22.174
Mar 3 11:09:02 dnsmasq[2667]: 809 127.0.0.1/53315 query[A] api.openweathermap.org from 127.0.0.1
Mar 3 11:09:02 dnsmasq[2667]: 809 127.0.0.1/53315 cached api.openweathermap.org is 146.185.181.89
Mar 3 11:09:02 dnsmasq[2667]: 809 127.0.0.1/53315 cached api.openweathermap.org is 95.85.63.65
Mar 3 11:09:02 dnsmasq[2667]: 809 127.0.0.1/53315 cached api.openweathermap.org is 178.62.207.82
Mar 3 11:09:02 dnsmasq[2667]: 810 127.0.0.1/53315 query[AAAA] api.openweathermap.org from 127.0.0.1
Mar 3 11:09:02 dnsmasq[2667]: 810 127.0.0.1/53315 forwarded api.openweathermap.org to 127.0.0.1
Mar 3 11:09:03 dnsmasq[2667]: 810 127.0.0.1/53315 reply api.openweathermap.org is NODATA-IPv6
برای دیدن راهنمای دستور از فلگ h- استفاده کنید:
[email protected] ~ % pihole -h
Usage: pihole [options]
Example: 'pihole -w -h'
Add '-h' after specific commands for more information on usage
Whitelist/Blacklist Options:
-w, whitelist Whitelist domain(s)
-b, blacklist Blacklist domain(s)
-wild, wildcard Blacklist domain(s), and all its subdomains
Add '-h' for more info on whitelist/blacklist usage
Debugging Options:
-d, debug Start a debugging session
Add '-a' to enable automated debugging
-f, flush Flush the Pi-hole log
-t, tail View the live output of the Pi-hole log
Options:
-a, admin Admin Console options
Add '-h' for more info on admin console usage
-c, chronometer Calculates stats and displays to an LCD
Add '-h' for more info on chronometer usage
-g, updateGravity Update the list of ad-serving domains
-h, --help, help Show this help dialog
-l, logging Specify whether the Pi-hole log should be used
Add '-h' for more info on logging usage
-q, query Query the adlists for a specified domain
Add '-h' for more info on query usage
-v, version Show installed versions of Pi-hole, Admin Console & FTL
Add '-h' for more info on version usage
status Display the running status of Pi-hole subsystems
enable Enable Pi-hole subsystems
disable Disable Pi-hole subsystems
Add '-h' for more info on disable usage
restartdns Restart Pi-hole subsystems
برای دیدن اطلاعات بیشتر به صفحات زیر مراجعه کنید
https://wiki.archlinux.org/index.php/DNSCrypt
https://wiki.archlinux.org/index.php/Pi-hole
https://wiki.archlinux.org/index.php/Dnsmasq
https://github.com/pi-hole/pi-hole/wiki/DNSCrypt-2.0
امیدوارم مفید بوده باشد
آخرین ویرایش توسط morealaz (2018-04-09 11:05:38)
آفلاین
علاوه بر بحث امنیت، برای من تاثیر چشمگیری در سرعت باز شدن سایتها داشت! ممنونم
آفلاین
بسته dnscrypt-proxy موجود در مخزن community آرچ نیز به روز رسانی شد و نسخه 2 dnscrypt رو که با go نوشته شده نصب میکند. بسته موجود در aur که قبلا با نام dnscrypt-proxy-go بود نیز حذف شده و در حال حاضر تنها یک بسته با نام dnscrypt-proxy-git در aur وجود دارد که برای نصب آخرین نسخه مربوط به dnscrypt 2 از طریق گیتهاب میتونید از اون استفاده کنید. اگر قبلا بسته dnscrypt-proxy-go رو از طریق aur نصب کردید حتما بسته dnscrypt-proxy موجود در مخازت رسمی رو جایگزین اون کنید تا جدیدترین نسخه برنامه برای شما نصب بشه. من لینک بسته رو در پست اول خودم تصحیح کردم.
آفلاین
درود بر محمدرضای دانا . ممنون بابت این آموزش فوق العاده مفید . اما من یک مشکل دارم :
اگر از برنامه networkmanager برای مدیریت شبکه استفاده میکنید دستور زیر را برای باز کردن فایل تنظیمات networkmanager اجرا کنید:
$ sudo nano /etc/NetworkManager/NetworkManager.conf
سپس در فایل باز شده زیر قسمت [main] مقدار پارامتر dns را به صورت زیر قرار دهید:
[main] dns=none
ذخیره کرده و خارج شوید.
بعد از اجرای این قسمت دیگه نمیتونم از openvpn استفاده کنم!
خب خیلی چیزا تو زندگی آدما گذرا هستن؛ خصوصا علاقیات! بعضی آدما هم متفاوتن و به علاقه هاشون به هر قیمتی میچسبن. گنو/لینوکس چیزی بود که در من ریشه پیدا کرد.
صفحه گیت هاب من.
ايميل من
آفلاین
درود بر محمدرضای دانا . ممنون بابت این آموزش فوق العاده مفید . اما من یک مشکل دارم :
اگر از برنامه networkmanager برای مدیریت شبکه استفاده میکنید دستور زیر را برای باز کردن فایل تنظیمات networkmanager اجرا کنید:
$ sudo nano /etc/NetworkManager/NetworkManager.conf
سپس در فایل باز شده زیر قسمت [main] مقدار پارامتر dns را به صورت زیر قرار دهید:
[main] dns=none
ذخیره کرده و خارج شوید.
بعد از اجرای این قسمت دیگه نمیتونم از openvpn استفاده کنم!
سلام. این قسمت رو برای این انجام میدیدم که برنامه networkmanager به هنگام اتصال به یک شبکه تنظیمات dns رو بازنویسی نکند. چون که ما نیاز داریم که در فایل resolv.conf آدرس 127.0.0.1 به عنوان سرور dns پیش فرض قرار گرفته باشد که تمامی درخواستهای dns سیستم از طریق برنامه dnsmasq که به عنوان سرور لوکال ما در حال اجرا هست انجام شود. در مورد openvpn لینک زیر احتمالا بتونه کمکت بکنه:
https://github.com/pi-hole/pi-hole/wiki … VPN-server
آفلاین
سلام من از مانجارو استفاده می کنم و این مشکل رو دارم.
بعد وارد کردن دستور برای فعال سازی سرویس ها به من این اخطار رو میده
Failed to enable unit: Unit file dnsmasq.service does not exis
وقتی سعیی می کنم dnsmasq رو نصب کنم ازم درخواست می کنه که pi-hole-flt رو پاک کنم دلیل این ها چیه؟
راهنمایی کنید ممنون میشم.
20 =! 20
با هم بیاموزیم به هم نیاموزیم.
پاک روح.(آپاراک).
آفلاین
ظاهرا در نسخه جدید از pi-hole-ftl برای dns استفاده میشه که یک فورک از dnsmasq هست و اجازه استفاده از dnsmasq رو نمیده ونیازی به dnsmasq نیست. برای توضیحات بیشتر به صفحه زیر مراجعه کنید:
https://wiki.archlinux.org/index.php/Pi-hole#FTL
آفلاین
دیشب که pihole رو روی آرچ کانفیگ کردم به مشکلی خوردم. مشکل ازینجا بود که pihole-ftl رو پورت ۵۳ بود و dnscrypt-proxy همش fail میشد و میگفت پورت 53 در حال استفاده ست و نمیتونه کار کنه. اونچه که در ویکی آرچ و انجمن توسط محمدرضا گفته شده کاملا درسته. فقط این رو باید درست کنید تا اون مشکل حل بشه.
در فایل:
/etc/dnscrypt-proxy/dnscrypt-proxy.toml
در خط:
listen_addresses = ['127.0.0.1:53', '[::1]:53']
درون اون کروشه رو خالی کنید. به این صورت:
listen_address = [ ]
الان مشکل dnscrypt-proxy.service حل میشه. مشکل بعدی dnscrypt-proxy.socket است و ابا افرودن ۲ خط به فرمایشان محمدرضا درست میشه اونم. به این صورت:
sudo systemctl edit dnscrypt-proxy.socket
و به این صورت دربیاورید:
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5354
ListenStream=[::1]:5354
ListenDatagram=127.0.0.1:5354
ListenDatagram=[::1]:5354
این سوکت و سرویس قبلی رو ریستارت کنید. سیستمتونم ریستارت کنید. دیگه خطایی وجود نخواهد داشت
https://wiki.archlinux.org/index.php/Dnscrypt-proxy
آخرین ویرایش توسط Ritchie (2018-12-20 07:58:39)
آفلاین
اگر هم در یه تاپیکی یا یه مخزن github بتونیم لیستی ایجاد کنیم برای معرفی کردن دامنه های تبلیغاتی ایرانی خیلی خوب میشه. چون در اون لیستهایی که من اضافه کردم دامنه های تبلیغلتی ایران نبود و خودم چندتایی رو دستی با wildcard اضافه کردم.
آفلاین
به نظرم این بسته pi-hole-server بیشتر برای یه سرور که نقش dns رو بازی می کنه خوبه! چرا؟ چون که کانفیگ گسترده تری داره و بسته pi-hole ftl رو هم نصب می کنه و دیگه نمی زاره از dnsmasq استفاده کنی.
اما بسته pi-hole-standalone بیشتر برای سیستم های خانگی خوبه.
آخرین ویرایش توسط AntiSec (2019-02-02 22:13:01)
Have a binary lifestyle
آفلاین
سلام سعیدجان
من قبلا هم گفتم که DNSCrypt جای فیلترشکن رو نمیگیره و اصلا فیلترشکن نیست. تنها کاری که میکنه اینه که شما میتونید بوسیله اون با اطمینان و بدون فیلترشدن از یک سیستم DNS امن استفاده کنید و مطمئن باشید که درخواستهای DNS شما فیلتر نمیشه. اگر وب سایت شما فقط از طریق فیلترکردن درخواست های DNS فیلتر شده باشه شما با استفاده از DNSCrypt میتونید از فیلترینگ عبور کنید ولی اگر از روشهای دیگه ای مثل فیلترکردن IP فیلترینگ انجام شده باشه DNSCrypt کاری برای شما نمیکنه و شما نیاز دارید از روشهای دیگه ای مثل Tor یا VPN استفاده کنید. احتمالا برای همین هست که شما نمیتونید IP های تلگرام رو پینگ کنید.
آفلاین