ہم اپنے DNS-over-HTTPS سرور کو بڑھاتے ہیں۔

ڈی این ایس آپریشن کے مختلف پہلوؤں کو پہلے ہی متعدد میں مصنف نے بار بار چھوا ہے۔ مضامین بلاگ کے حصے کے طور پر شائع کیا گیا۔ ایک ہی وقت میں، بنیادی زور ہمیشہ اس اہم انٹرنیٹ سروس کی سیکورٹی کو بہتر بنانے پر دیا گیا ہے.

ہم اپنے DNS-over-HTTPS سرور کو بڑھاتے ہیں۔

کچھ عرصہ پہلے تک، DNS ٹریفک کی واضح کمزوری کے باوجود، جو کہ اب بھی، زیادہ تر حصے کے لیے، مواد، سرکاری سیکیورٹی ایجنسیوں اور سنسرشپ میں اشتہارات کو سرایت کر کے اپنی آمدنی میں اضافہ کرنے کی کوشش کرنے والے فراہم کنندگان کی جانب سے بدنیتی پر مبنی کارروائیوں میں منتقل ہوتا ہے، اس کے ساتھ ساتھ صرف مجرموں، عمل اس کے تحفظ کو مضبوط کرناDNSSEC/DANE، DNScrypt، DNS-over-TLS اور DNS-over-HTTPS جیسی مختلف ٹیکنالوجیز کی موجودگی کے باوجود، تعطل کا شکار ہے۔ اور اگر سرور کے حل، اور ان میں سے کچھ کافی عرصے سے موجود ہیں، وسیع پیمانے پر مشہور اور دستیاب ہیں، تو کلائنٹ سافٹ ویئر سے ان کی حمایت مطلوبہ حد تک رہ جاتی ہے۔

خوش قسمتی سے، صورتحال بدل رہی ہے۔ خاص طور پر، مقبول فائر فاکس براؤزر کے ڈویلپرز بیان کیا سپورٹ موڈ کو بطور ڈیفالٹ فعال کرنے کے منصوبوں کے بارے میں DNS سے زیادہ HTTPS۔ (DoH) جلد۔ اس سے WWW صارف کے DNS ٹریفک کو مندرجہ بالا خطرات سے بچانے میں مدد مل سکتی ہے، لیکن ممکنہ طور پر نئے متعارف کرائے جا سکتے ہیں۔

1. DNS-اوور-HTTPS مسائل

پہلی نظر میں، انٹرنیٹ سوفٹ ویئر میں DNS-over-HTTPS کا بڑے پیمانے پر تعارف صرف ایک مثبت ردعمل کا سبب بنتا ہے۔ تاہم، شیطان، جیسا کہ وہ کہتے ہیں، تفصیلات میں ہے.

پہلا مسئلہ جو DoH کے وسیع پیمانے پر استعمال کے دائرہ کار کو محدود کرتا ہے وہ ہے اس کی توجہ صرف ویب ٹریفک پر ہے۔ درحقیقت، HTTP پروٹوکول اور اس کا موجودہ ورژن HTTP/2، جس پر DoH قائم ہے، WWW کی بنیاد ہیں۔ لیکن انٹرنیٹ صرف ویب نہیں ہے۔ بہت ساری مقبول خدمات ہیں، جیسے ای میل، مختلف انسٹنٹ میسنجر، فائل ٹرانسفر سسٹم، ملٹی میڈیا اسٹریمنگ، وغیرہ، جو HTTP استعمال نہیں کرتی ہیں۔ اس طرح، بہت سے DoH کی جانب سے ایک علاج کے طور پر تصور کے باوجود، یہ براؤزر ٹیکنالوجیز کے علاوہ کسی بھی چیز کے لیے اضافی (اور غیر ضروری) کوششوں کے بغیر ناقابل عمل ثابت ہوتا ہے۔ ویسے، DNS-over-TLS اس کردار کے لیے بہت زیادہ قابل امیدوار کی طرح لگتا ہے، جو محفوظ معیاری TLS پروٹوکول میں معیاری DNS ٹریفک کی انکیپسولیشن کو لاگو کرتا ہے۔

دوسرا مسئلہ، جو ممکنہ طور پر پہلے کے مقابلے میں بہت زیادہ اہم ہے، براؤزر کی ترتیبات میں مخصوص ایک ہی DoH سرور کو استعمال کرنے کے حق میں ڈیزائن کے ذریعے DNS کی موروثی وکندریقرت کا اصل ترک کرنا ہے۔ خاص طور پر، Mozilla Cloudflare سے سروس استعمال کرنے کا مشورہ دیتا ہے۔ اسی طرح کی سروس دیگر ممتاز انٹرنیٹ شخصیات، خاص طور پر گوگل نے بھی شروع کی تھی۔ اس سے پتہ چلتا ہے کہ DNS-over-HTTPS کا اس شکل میں نفاذ جس میں اسے فی الحال تجویز کیا گیا ہے صرف سب سے بڑی خدمات پر آخری صارفین کا انحصار بڑھاتا ہے۔ یہ کوئی راز نہیں ہے کہ DNS سوالات کا تجزیہ جو معلومات فراہم کر سکتا ہے وہ اس کے بارے میں مزید ڈیٹا اکٹھا کرنے کے ساتھ ساتھ اس کی درستگی اور مطابقت کو بڑھا سکتا ہے۔

اس سلسلے میں، مصنف DNS-over-HTTPS کے نہیں، بلکہ DNS-over-TLS کے DNSSEC/DANE کے ساتھ مل کر ایک آفاقی، محفوظ اور انٹرنیٹ کی مزید مرکزیت کے لیے سازگار نہیں کے طور پر بڑے پیمانے پر نفاذ کا حامی تھا اور رہے گا۔ DNS ٹریفک کی حفاظت کو یقینی بنانے کے لیے۔ بدقسمتی سے، واضح وجوہات کی بناء پر، کوئی بھی کلائنٹ سافٹ ویئر میں DoH متبادلات کے لیے بڑے پیمانے پر تعاون کے تیزی سے تعارف کی توقع نہیں کر سکتا، اور یہ اب بھی سیکیورٹی ٹیکنالوجی کے شوقین افراد کا ڈومین ہے۔

لیکن چونکہ اب ہمارے پاس DoH ہے، کیوں نہ کارپوریشنوں کی ممکنہ نگرانی کو ان کے سرورز کے ذریعے ہمارے اپنے DNS-over-HTTPS سرور پر استعمال کرنے کے بعد استعمال کریں؟

2. DNS-over-HTTPS پروٹوکول

اگر آپ معیار کو دیکھیں آر ایف سی 8484 DNS-over-HTTPS پروٹوکول کی وضاحت کرتے ہوئے، آپ دیکھ سکتے ہیں کہ یہ، درحقیقت، ایک ویب API ہے جو آپ کو HTTP/2 پروٹوکول میں معیاری DNS پیکج کو سمیٹنے کی اجازت دیتا ہے۔ یہ خصوصی HTTP ہیڈرز کے ساتھ ساتھ منتقل شدہ DNS ڈیٹا کے بائنری فارمیٹ کی تبدیلی کے ذریعے لاگو کیا جاتا ہے (دیکھیں۔ آر ایف سی 1035 اور اس کے بعد کے دستاویزات) ایک فارم میں جو آپ کو انہیں منتقل کرنے اور وصول کرنے کے ساتھ ساتھ ضروری میٹا ڈیٹا کے ساتھ کام کرنے کی اجازت دیتا ہے۔

معیار کے مطابق، صرف HTTP/2 اور ایک محفوظ TLS کنکشن تعاون یافتہ ہیں۔

DNS کی درخواست بھیجنا معیاری GET اور POST طریقوں کا استعمال کرتے ہوئے کیا جا سکتا ہے۔ پہلی صورت میں، درخواست کو ایک base64URL-encoded سٹرنگ میں تبدیل کیا جاتا ہے، اور دوسری صورت میں، بائنری شکل میں POST درخواست کے باڈی کے ذریعے۔ اس صورت میں، DNS درخواست اور جواب کے دوران ایک خاص MIME ڈیٹا کی قسم استعمال کی جاتی ہے۔ ایپلیکیشن/ڈی این ایس-پیغام.

root@eprove:~ # curl -H 'accept: application/dns-message' 'https://my.domaint/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE' -v
*   Trying 2001:100:200:300::400:443...
* TCP_NODELAY set
* Connected to eprove.net (2001:100:200:300::400) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /usr/local/share/certs/ca-root-nss.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=my.domain
*  start date: Jul 22 00:07:13 2019 GMT
*  expire date: Oct 20 00:07:13 2019 GMT
*  subjectAltName: host "my.domain" matched cert's "my.domain"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x801441000)
> GET /dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE HTTP/2
> Host: eprove.net
> User-Agent: curl/7.65.3
> accept: application/dns-message
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< server: h2o/2.3.0-beta2
< content-type: application/dns-message
< cache-control: max-age=86274
< date: Thu, 12 Sep 2019 13:07:25 GMT
< strict-transport-security: max-age=15768000; includeSubDomains; preload
< content-length: 45
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 45)
* stopped the pause stream!
* Connection #0 to host eprove.net left intact

عنوان پر بھی توجہ دیں۔ کیش کنٹرول: ویب سرور کے جواب میں۔ پیرامیٹر میں زیادہ سے زیادہ عمر واپس کیے جانے والے DNS ریکارڈ کے لیے TTL ویلیو پر مشتمل ہے (یا کم از کم قدر اگر ان کا ایک سیٹ واپس کیا جا رہا ہے)۔

اوپر کی بنیاد پر، ایک DoH سرور کا کام کئی مراحل پر مشتمل ہوتا ہے۔

  • HTTP درخواست وصول کریں۔ اگر یہ ایک GET ہے تو پیکٹ کو base64URL انکوڈنگ سے ڈی کوڈ کریں۔
  • اس پیکٹ کو DNS سرور پر بھیجیں۔
  • DNS سرور سے جواب حاصل کریں۔
  • موصولہ ریکارڈز میں کم از کم TTL قدر تلاش کریں۔
  • HTTP کے ذریعے کلائنٹ کو جواب واپس کریں۔

3. آپ کا اپنا DNS-over-HTTPS سرور

اپنا DNS-over-HTTPS سرور چلانے کا سب سے آسان، تیز ترین اور مؤثر طریقہ HTTP/2 ویب سرور استعمال کرنا ہے۔ H2O، جس کے بارے میں مصنف نے پہلے ہی مختصر لکھا ہے (دیکھیں "ہائی پرفارمنس H2O ویب سرور«)۔

اس انتخاب کی تائید اس حقیقت سے ہوتی ہے کہ آپ کے اپنے DoH سرور کے تمام کوڈ کو H2O میں مربوط مترجم کا استعمال کرتے ہوئے مکمل طور پر لاگو کیا جا سکتا ہے۔ مربی. معیاری لائبریریوں کے علاوہ، DNS سرور کے ساتھ ڈیٹا کا تبادلہ کرنے کے لیے، آپ کو (mrbgem) ساکٹ لائبریری کی ضرورت ہے، جو خوش قسمتی سے H2O 2.3.0-beta2 کے موجودہ ترقیاتی ورژن میں پہلے سے ہی شامل ہے۔ موجودہ FreeBSD بندرگاہوں میں۔ تاہم، مخزن کی کلوننگ کرکے اسے کسی بھی سابقہ ​​ورژن میں شامل کرنا مشکل نہیں ہے۔ ساکٹ لائبریریاں کیٹلاگ تک /deps تالیف سے پہلے.

root@beta:~ # uname -v
FreeBSD 12.0-RELEASE-p10 GENERIC
root@beta:~ # cd /usr/ports/www/h2o
root@beta:/usr/ports/www/h2o # make extract
===>  License MIT BSD2CLAUSE accepted by the user
===>   h2o-2.2.6 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by h2o-2.2.6 for building
===>  Extracting for h2o-2.2.6.
=> SHA256 Checksum OK for h2o-h2o-v2.2.6_GH0.tar.gz.
===>   h2o-2.2.6 depends on file: /usr/local/bin/ruby26 - found
root@beta:/usr/ports/www/h2o # cd work/h2o-2.2.6/deps/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # git clone https://github.com/iij/mruby-socket.git
Клонирование в «mruby-socket»…
remote: Enumerating objects: 385, done.
remote: Total 385 (delta 0), reused 0 (delta 0), pack-reused 385
Получение объектов: 100% (385/385), 98.02 KiB | 647.00 KiB/s, готово.
Определение изменений: 100% (208/208), готово.
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # ll
total 181
drwxr-xr-x   9 root  wheel  18 12 авг.  16:09 brotli/
drwxr-xr-x   2 root  wheel   4 12 авг.  16:09 cloexec/
drwxr-xr-x   2 root  wheel   5 12 авг.  16:09 golombset/
drwxr-xr-x   4 root  wheel  35 12 авг.  16:09 klib/
drwxr-xr-x   2 root  wheel   5 12 авг.  16:09 libgkc/
drwxr-xr-x   4 root  wheel  26 12 авг.  16:09 libyrmcds/
drwxr-xr-x  13 root  wheel  32 12 авг.  16:09 mruby/
drwxr-xr-x   5 root  wheel  11 12 авг.  16:09 mruby-digest/
drwxr-xr-x   5 root  wheel  10 12 авг.  16:09 mruby-dir/
drwxr-xr-x   5 root  wheel  10 12 авг.  16:09 mruby-env/
drwxr-xr-x   4 root  wheel   9 12 авг.  16:09 mruby-errno/
drwxr-xr-x   5 root  wheel  14 12 авг.  16:09 mruby-file-stat/
drwxr-xr-x   5 root  wheel  10 12 авг.  16:09 mruby-iijson/
drwxr-xr-x   5 root  wheel  11 12 авг.  16:09 mruby-input-stream/
drwxr-xr-x   6 root  wheel  11 12 авг.  16:09 mruby-io/
drwxr-xr-x   5 root  wheel  10 12 авг.  16:09 mruby-onig-regexp/
drwxr-xr-x   4 root  wheel  10 12 авг.  16:09 mruby-pack/
drwxr-xr-x   5 root  wheel  10 12 авг.  16:09 mruby-require/
drwxr-xr-x   6 root  wheel  10 12 сент. 16:10 mruby-socket/
drwxr-xr-x   2 root  wheel   9 12 авг.  16:09 neverbleed/
drwxr-xr-x   2 root  wheel  13 12 авг.  16:09 picohttpparser/
drwxr-xr-x   2 root  wheel   4 12 авг.  16:09 picotest/
drwxr-xr-x   9 root  wheel  16 12 авг.  16:09 picotls/
drwxr-xr-x   4 root  wheel   8 12 авг.  16:09 ssl-conservatory/
drwxr-xr-x   8 root  wheel  18 12 авг.  16:09 yaml/
drwxr-xr-x   2 root  wheel   8 12 авг.  16:09 yoml/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # cd ../../..
root@beta:/usr/ports/www/h2o # make install clean
...

ویب سرور کی ترتیب عام طور پر معیاری ہوتی ہے۔

root@beta:/usr/ports/www/h2o #  cd /usr/local/etc/h2o/
root@beta:/usr/local/etc/h2o # cat h2o.conf
# this sample config gives you a feel for how h2o can be used
# and a high-security configuration for TLS and HTTP headers
# see https://h2o.examp1e.net/ for detailed documentation
# and h2o --help for command-line options and settings

# v.20180207 (c)2018 by Max Kostikov http://kostikov.co e-mail: [email protected]

user: www
pid-file: /var/run/h2o.pid
access-log:
    path: /var/log/h2o/h2o-access.log
    format: "%h %v %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i""
error-log: /var/log/h2o/h2o-error.log

expires: off
compress: on
file.dirlisting: off
file.send-compressed: on

file.index: [ 'index.html', 'index.php' ]

listen:
    port: 80
listen:
    port: 443
    ssl:
        cipher-suite: ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
        cipher-preference: server
        dh-file: /etc/ssl/dhparams.pem
        certificate-file: /usr/local/etc/letsencrypt/live/eprove.net/fullchain.pem
        key-file: /usr/local/etc/letsencrypt/live/my.domain/privkey.pem

hosts:
    "*.my.domain":
        paths: &go_tls
            "/":
                redirect:
                    status: 301
                    url: https://my.domain/
    "my.domain:80":
        paths: *go_tls
    "my.domain:443":
        header.add: "Strict-Transport-Security: max-age=15768000; includeSubDomains; preload"
        paths:
            "/dns-query":
               mruby.handler-file: /usr/local/etc/h2o/h2odoh.rb

صرف استثنا یو آر ایل ہینڈلر ہے۔ /dns-استفسار جس کے لیے ہمارا DNS-over-HTTPS سرور، جو mruby میں لکھا جاتا ہے اور ہینڈلر آپشن کے ذریعے بلایا جاتا ہے، دراصل ذمہ دار ہے۔ mruby.handler-file.

root@beta:/usr/local/etc/h2o # cat h2odoh.rb
# H2O HTTP/2 web server as DNS-over-HTTP service
# v.20190908 (c)2018-2019 Max Kostikov https://kostikov.co e-mail: [email protected]

proc {|env|
    if env['HTTP_ACCEPT'] == "application/dns-message"
        case env['REQUEST_METHOD']
            when "GET"
                req = env['QUERY_STRING'].gsub(/^dns=/,'')
                # base64URL decode
                req = req.tr("-_", "+/")
                if !req.end_with?("=") && req.length % 4 != 0
                    req = req.ljust((req.length + 3) & ~3, "=")
                end
                req = req.unpack1("m")
            when "POST"
                req = env['rack.input'].read
            else
                req = ""
        end
        if req.empty?
            [400, { 'content-type' => 'text/plain' }, [ "Bad Request" ]]
        else
            # --- ask DNS server
            sock = UDPSocket.new
            sock.connect("localhost", 53)
            sock.send(req, 0)
            str = sock.recv(4096)
            sock.close
            # --- find lowest TTL in response
            nans = str[6, 2].unpack1('n') # number of answers
            if nans > 0 # no DNS failure
                shift = 12
                ttl = 0
                while nans > 0
                    # process domain name compression
                    if str[shift].unpack1("C") < 192
                        shift = str.index("x00", shift) + 5
                        if ttl == 0 # skip question section
                            next
                        end
                    end
                    shift += 6
                    curttl = str[shift, 4].unpack1('N')
                    shift += str[shift + 4, 2].unpack1('n') + 6 # responce data size
                    if ttl == 0 or ttl > curttl
                        ttl = curttl
                    end
                    nans -= 1
                 end
                 cc = 'max-age=' + ttl.to_s
            else
                 cc = 'no-cache'
            end
            [200, { 'content-type' => 'application/dns-message', 'content-length' => str.size, 'cache-control' => cc }, [ str ] ]
        end
    else
        [415, { 'content-type' => 'text/plain' }, [ "Unsupported Media Type" ]]
    end
}

براہ کرم نوٹ کریں کہ مقامی کیشنگ سرور اس معاملے میں DNS پیکٹوں پر کارروائی کرنے کا ذمہ دار ہے۔ اباد معیاری فری بی ایس ڈی تقسیم سے۔ سیکورٹی کے نقطہ نظر سے، یہ بہترین حل ہے. تاہم، کوئی بھی چیز آپ کو تبدیل کرنے سے نہیں روکتی ہے۔ localhost ایک مختلف DNS ایڈریس پر جسے آپ استعمال کرنا چاہتے ہیں۔

root@beta:/usr/local/etc/h2o # local-unbound verison
usage:  local-unbound [options]
        start unbound daemon DNS resolver.
-h      this help
-c file config file to read instead of /var/unbound/unbound.conf
        file format is described in unbound.conf(5).
-d      do not fork into the background.
-p      do not create a pidfile.
-v      verbose (more times to increase verbosity)
Version 1.8.1
linked libs: mini-event internal (it uses select), OpenSSL 1.1.1a-freebsd  20 Nov 2018
linked modules: dns64 respip validator iterator
BSD licensed, see LICENSE in source package for details.
Report bugs to [email protected]
root@eprove:/usr/local/etc/h2o # sockstat -46 | grep unbound
unbound  local-unbo 69749 3  udp6   ::1:53                *:*
unbound  local-unbo 69749 4  tcp6   ::1:53                *:*
unbound  local-unbo 69749 5  udp4   127.0.0.1:53          *:*
unbound  local-unbo 69749 6  tcp4   127.0.0.1:53          *:*

صرف H2O کو دوبارہ شروع کرنا اور دیکھنا ہے کہ اس سے کیا نکلتا ہے۔

root@beta:/usr/local/etc/h2o # service h2o restart
Stopping h2o.
Waiting for PIDS: 69871.
Starting h2o.
start_server (pid:70532) starting now...

4. جانچ

لہذا، آئیے دوبارہ ٹیسٹ کی درخواست بھیج کر اور یوٹیلیٹی کا استعمال کرتے ہوئے نیٹ ورک ٹریفک کو دیکھ کر نتائج کو چیک کریں۔ tcpdomp.

root@beta/usr/local/etc/h2o # curl -H 'accept: application/dns-message' 'https://my.domain/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE'
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
...
root@beta:~ # tcpdump -n -i lo0 udp port 53 -xx -XX -vv
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
16:32:40.420831 IP (tos 0x0, ttl 64, id 37575, offset 0, flags [none], proto UDP (17), length 57, bad cksum 0 (->e9ea)!)
    127.0.0.1.21070 > 127.0.0.1.53: [bad udp cksum 0xfe38 -> 0x33e3!] 43981+ A? example.com. (29)
        0x0000:  0200 0000 4500 0039 92c7 0000 4011 0000  ....E..9....@...
        0x0010:  7f00 0001 7f00 0001 524e 0035 0025 fe38  ........RN.5.%.8
        0x0020:  abcd 0100 0001 0000 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01         mple.com.....
16:32:40.796507 IP (tos 0x0, ttl 64, id 37590, offset 0, flags [none], proto UDP (17), length 73, bad cksum 0 (->e9cb)!)
    127.0.0.1.53 > 127.0.0.1.21070: [bad udp cksum 0xfe48 -> 0x43fa!] 43981 q: A? example.com. 1/0/0 example.com. A 93.184.216.34 (45)
        0x0000:  0200 0000 4500 0049 92d6 0000 4011 0000  ....E..I....@...
        0x0010:  7f00 0001 7f00 0001 0035 524e 0035 fe48  .........5RN.5.H
        0x0020:  abcd 8180 0001 0001 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01c0 0c00  mple.com........
        0x0040:  0100 0100 0151 8000 045d b8d8 22         .....Q...].."
^C
2 packets captured
23 packets received by filter
0 packets dropped by kernel

آؤٹ پٹ سے پتہ چلتا ہے کہ ایڈریس کو حل کرنے کی درخواست کیسے example.com DNS سرور کے ذریعہ موصول ہوا اور کامیابی کے ساتھ اس پر کارروائی کی گئی۔

اب جو کچھ باقی ہے وہ فائر فاکس براؤزر میں اپنے سرور کو چالو کرنا ہے۔ ایسا کرنے کے لیے، آپ کو کنفیگریشن پیجز پر کئی سیٹنگز کو تبدیل کرنے کی ضرورت ہے۔ کے بارے میں: config.

ہم اپنے DNS-over-HTTPS سرور کو بڑھاتے ہیں۔

سب سے پہلے، یہ ہمارے API کا پتہ ہے جس پر براؤزر DNS معلومات کی درخواست کرے گا۔ network.trr.uri. یہ بھی تجویز کیا جاتا ہے کہ اس یو آر ایل سے ڈومین آئی پی کو محفوظ IP ریزولوشن کے لیے براؤزر کا استعمال کرتے ہوئے خود DNS تک رسائی حاصل کیے بغیر network.trr.bootstrapAddress. اور آخر میں، پیرامیٹر خود network.trr.mode بشمول DoH کا استعمال۔ قدر کو "3" پر سیٹ کرنا براؤزر کو نام کے حل کے لیے خصوصی طور پر DNS-over-HTTPS استعمال کرنے پر مجبور کرے گا، جبکہ زیادہ قابل اعتماد اور محفوظ "2" DoH کو ترجیح دے گا، معیاری DNS تلاش کو فال بیک آپشن کے طور پر چھوڑ کر۔

5. منافع!

کیا مضمون مددگار تھا؟ پھر براہ کرم شرمندہ نہ ہوں اور عطیہ فارم (نیچے) کے ذریعے رقم کی مدد کریں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں