DNS-over-QUIC إلى وكيل UDP وتنفيذ العميل.
2019—2023 © NS1
تم إصدار هذا الرمز بموجب ترخيص Apache 2.0. يمكنك العثور على الشروط والأحكام في ملف الترخيص.
يتبع التنفيذ RFC 9250: DNS عبر اتصالات QUIC المخصصة.
يعتمد توافق بروتوكول QUIC على مكتبة quic-go.
إنشاء وكيل DoQ وعميل الاختبار.
go build ./cmd/proxy
go build ./cmd/client
قم بإنشاء مفتاح اختبار وشهادة موقعة ذاتيًا للخادم الوكيل.
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -out server.key
openssl req -x509 -days 30 -subj "/CN=DNS-over-QUIC Test" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1,IP:::1" -key server.key -out server.crt
ابدأ الوكيل. افتراضيًا، يقوم الخادم بتحميل مفتاح TLS والشهادة من الملفات التي تم إنشاؤها أعلاه، وسيستخدم 8.8.4.4 (Google Public DNS) كخادم خلفي، وسيستمع على منفذ UDP 853 (منفذ تجريبي من المسودة). استخدم خيارات سطر الأوامر لتعديل السلوك الافتراضي. لاحظ أن استخدام المنفذ الافتراضي يتطلب بدء تشغيل الوكيل كمستخدم متميز.
sudo ./proxy
الاستعلام عن الوكيل باستخدام أداة الاختبار. ينشئ العميل جلسة QUIC إلى الخادم ويرسل كل استعلام عبر دفق مخصص. في المنبع، يتم إرسال طلبات XFR عبر TCP، ويتم إرسال جميع الطلبات الأخرى عبر UDP. تتم طباعة الردود حسب ترتيب الاكتمال:
./client ns1.com A ns1.com AAAA
;; opcode: QUERY, status: NOERROR, id: 25849
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;ns1.com. IN AAAA
;; ANSWER SECTION:
ns1.com. 195 IN AAAA 2606:4700:10::6814:31b6
ns1.com. 195 IN AAAA 2606:4700:10::6814:30b6
ns1.com. 195 IN RRSIG AAAA 13 2 200 20190325121641 20190323121641 44688 ns1.com. m17G7sGkXNhBiKINI2LuQLvUL0Qb+l6LMUmKSoVo2TP5sw3Yd27L44QOZhVU1GS//tD1e6YVOVsMrW3arlk/bQ==
;; ADDITIONAL SECTION:
;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: do; udp: 512
;; opcode: QUERY, status: NOERROR, id: 26044
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;ns1.com. IN A
;; ANSWER SECTION:
ns1.com. 25 IN A 104.20.49.182
ns1.com. 25 IN A 104.20.48.182
ns1.com. 25 IN RRSIG A 13 2 26 20190325121645 20190323121645 44688 ns1.com. xJK5DhMiFqxWx/gC7gHQXM8wkVFDyocIF3Zuehqa+S92zAq3yOtZMrqVRXxsKNw2lfCMQXLHr7hVUDm5H4B5eA==
;; ADDITIONAL SECTION:
;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: do; udp: 512
يدعم الخادم الوكيل مصادقة شهادة العميل. لتمكين الميزة، قم بتوفير حزمة شهادة CA بتنسيق PEM كمعلمة وكيل -mtls_ca_certs
.
إنشاء شهادة CA للاختبار:
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -out ca.key
openssl req -x509 -days 30 -subj "/CN=DNS-over-QUIC Test CA" -addext "basicConstraints=critical,CA:true,pathlen:0" -key ca.key -out ca.crt
أنشئ شهادات الخادم والعميل وقم بتوقيعها باستخدام شهادة CA:
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -out server.key
openssl req -x509 -CA ca.crt -CAkey ca.key -days 30 -subj "/CN=server" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1,IP:::1" -key server.key -out server.crt
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -out client.key
openssl req -x509 -CA ca.crt -CAkey ca.key -days 30 -subj "/CN=client" -key client.key -out client.crt
قم بتشغيل الوكيل وتمكين mTLS من خلال توفير شهادة CA كحزمة CA:
./proxy -mtls_ca_certs ca.crt
قم بتشغيل الاستعلام مع توفير شهادات العميل. تتيح حزمة CA التحقق من صحة شهادة الخادم:
./client -ca_certs ca.crt -cert client.crt -key client.key ns1.com. AAAA
لاحظ أن هذا كود تجريبي مبني على بروتوكول تجريبي.
يستخدم الخادم والعميل في هذا المستودع نفس مكتبة QUIC وبالتالي يجب أن يكونا متوافقين. ومع ذلك، إذا تم استخدام عميل آخر، فقد تفشل عملية المصافحة عند التفاوض على الإصدار. نقترح التحقق من التقاط الحزم أولاً عندما يتعذر على العميل الاتصال.
يقوم الوكيل أيضًا بتسجيل معلومات حول الاتصالات والتدفقات المقبولة والتي يمكن استخدامها لفحص تسلسل الأحداث:
$ sudo ./proxy -listen 127.0.0.1:853 -cert cert.pem -key key.pem -backend 8.8.4.4:53
ts=2019-03-24T10:31:32.408891Z msg="listening for clients" addr=127.0.0.1:853
ts=2019-03-24T12:16:45.048583Z client=127.0.0.1:52212 msg="session accepted"
ts=2019-03-24T12:16:45.050231Z client=127.0.0.1:52212 stream_id=0 msg="stream accepted"
ts=2019-03-24T12:16:45.050278Z client=127.0.0.1:52212 stream_id=4 msg="stream accepted"
ts=2019-03-24T12:16:45.091568Z client=127.0.0.1:52212 stream_id=4 msg="stream closed"
ts=2019-03-24T12:16:45.104623Z client=127.0.0.1:52212 stream_id=0 msg="stream closed"
ts=2019-03-24T12:16:45.110261Z client=127.0.0.1:52212 msg="session closed"
يتم الحفاظ على هذا المشروع.
نرحب بطلبات السحب والقضايا. راجع إرشادات مساهمة NS1 لمزيد من المعلومات.