דילוג לתוכן הראשי

מודולים מקוריים למפתחים

אין צורך במודולים לשימוש רגיל. המדריך מיועד למפתחים ולמנהלים שרוצים להרחיב את שירות Windows או Linux באמצעות ספריות מקוריות. המודולים רצים בתוך השירות ובהרשאותיו. התקינו רק קוד מהימן והקפידו שקובצי המודולים, התלויות וההגדרות יהיו בבעלות מנהל המערכת.

טעינת מודול​

השירות קורא קובצי *.conf מתיקיית modules.d הסמוכה לקובץ ההגדרות. מיקומי ברירת המחדל:

מערכת הפעלהמיקום הגדרות המודוליםפורמט ספרייה
Linux/etc/mudfish-dns/modules.d/.so
Windows%ProgramData%\Mudfish DNS\modules.d\.dll

בכל קובץ יש לכתוב נתיב מוחלט לספרייה, אחד בכל שורה. למשל, תוכן /etc/mudfish-dns/modules.d/10-policy.conf:

/usr/lib/mudfish-dns/modules/policy.so

הקבצים נקראים לפי סדר שמותיהם, ובכל קובץ לפי סדר השורות. שורות ריקות ושורות שמתחילות ב־# מתעלמים מהן. אל תקיפו נתיבים במירכאות ואל תשתמשו במשתני סביבה או בהערות בסוף שורה; ביטויים אלה אינם מפוענחים. גם ב־Windows כתבו את הנתיב המוחלט המלא בקובץ, כולל רווחים אם יש.

לאחר הוספה, שינוי או הסרה של מודול, הפעילו מחדש את השירות. ב־Linux:

sudo systemctl restart mudfish-dns.service

ב־Windows הפעילו מחדש את שירות Mudfish DNS במנהל השירותים. פעולות התחלת DNS, עצירת DNS והחלת הגדרות באפליקציה אינן טוענות מחדש מודולים. אם אי אפשר לקרוא קובץ הגדרות, הנתיב שגוי או מתרחשת שגיאת טעינה או אתחול, השירות לא יתחיל. מותר שתיקיית המודולים תהיה חסרה או ריקה.

בפיתוח אפשר לחזור על הארגומנט --module כדי לטעון ספריות לפי סדר הארגומנטים. הדבר מחליף את הטעינה האוטומטית מ־modules.d. האפשרות --config FILE משנה גם את מיקום תיקיית המודולים הסמוכה לקובץ ההגדרות. האפשרות --restore-dns מבצעת שחזור בלי לטעון מודולים.

מימוש hooks​

קראו את הכותרת mudfish_dns_module.h או הורידו את mudfish_dns_module.h. הכותרת מגדירה מבנים, hooks, פעולות וכללי משך חיים של נתונים. המדריך משתמש ב־C ABI v2. חשפו את mudfish_dns_module_init_v2(), ובדקו את MUDFISH_DNS_MODULE_ABI_V2 ואת גודל המבנה שהתקבל לפני מילוי ה־hooks. החזירו 0 אם האתחול הצליח.

hookמועד הקריאה
on_dns_queryלאחר קבלת שאילתה שפוענחה ולפני חיפוש במטמון או העברה.
on_dns_responseלאחר בחירת תשובה ולפני שמירה במטמון או החזרה ללקוח. גם תשובות מהמטמון עוברות כאן.
on_web_helloלאחר בדיקת HTTP Host/TLS SNI הראשונית ולפני חיבור או עיבוד הנתונים הראשוניים.
on_web_dataלאחר קריאת נתוני לקוח נוספים או נתוני שרת ולפני העברתם.

פעולות DNS​

hooks של DNS ב־v2 מחזירים 0 בהצלחה ומגדירים את result->action.

פעולההשפעה
MUDFISH_DNS_CONTINUEהמשך למודול הבא ולעיבוד הרגיל.
MUDFISH_DNS_ALLOWסיום שרשרת ה־hooks הנוכחית והמשך שאילתת DNS רגילה או החזרת התשובה שנבחרה.
MUDFISH_DNS_BLOCKהחזרת REFUSED.
MUDFISH_DNS_DROPהשלכה בלי שליחת תשובת DNS.
MUDFISH_DNS_ANSWERיצירת תשובה מכתובת IPv4/IPv6 ומ־TTL שסופקו.
MUDFISH_DNS_REPLACEשימוש בתשובת DNS מלאה בפורמט wire שסיפק המודול.

אל תחזירו קבועי פעולה ישירות מ־DNS hooks ב־v2. ערך החזרה שאינו 0 או תוצאה לא תקינה גורמים ל־SERVFAIL. הפעולה ALLOW מסיימת רק את שרשרת ה־hooks הנוכחית ואינה עוקפת כללי שמות מתחם, הרשאות שיטות תקשורת או בדיקת אישורים. כל תוצאת שאילתה מלבד DROP עוברת גם ב־hooks של התשובה.

hooks של אינטרנט מחזירים ישירות MUDFISH_DNS_CONTINUE או MUDFISH_DNS_REJECT. דחיית בקשת אינטרנט סוגרת את החיבור. כדי להשתמש בהם, הגנת האינטרנט חייבת להיות מופעלת. תוכן HTTPS מפוענח אינו מסופק.

מאגרים, תהליכונים ומטמון​

אירועי הקלט והמאגרים הם לקריאה בלבד ותקפים רק בזמן ה־callback. תשובה חלופית חייבת להשתמש בזיכרון שבבעלות המודול ולהישאר תקפה עד ל־callback הבא של אותו מודול או עד לסיומו. אל תחזירו זיכרון מחסנית או מצביע מושאל מאירוע. מזהה DNS, ‏opcode והשאלה בתשובה החלופית חייבים להתאים לשאילתה המקורית. callbacks של מופע אחד רצים ברצף, אך עשויים להיקרא מתהליכונים שונים. סיימו אותם במהירות ואל תעבירו חריגות מעבר לגבול ABI.

תוצאות שנוצרו, הוחלפו, נחסמו או הושלכו אינן נשמרות במטמון המארח. החלפת תשובה מהמטמון אינה משנה את הרשומה המקורית. המארח מנקה את דגל AD בתשובות חלופיות ואינו מאמת או חותם מחדש DNSSEC. מודול שמשנה נתונים חתומים חייב לטפל בעצמו בחתימות שאינן תקפות עוד.

דוגמה וכותרת​

הדפים הבאים כוללים את כל קוד הדוגמה ואת הכותרת הדרושה. אין צורך להוריד בנפרד את עץ קוד המקור של Mudfish DNS.

קובץתוכן
policy.c — דוגמת מדיניות DNSהיתר, חסימה והשלכה של שאילתות, יצירת תשובת IP ושינוי כתובת ו־TTL בתשובה. כולל פקודות בנייה ובדיקה ב־Linux.
mudfish_dns_module.h — כותרת המודולהצהרות ABI, חתימות hooks, קבועי פעולה וכללי בעלות על מאגרים.

לפני הבנייה הורידו את policy.c ואת mudfish_dns_module.h לאותה תיקייה. פקודת הבנייה בדוגמה יוצרת ספריית .so ל־Linux.