நேட்டிவ் தொகுதிகள் (உருவாக்குநர்களுக்கானது)
வழக்கமான பயன்பாட்டிற்கு தொகுதிகள் (modules) தேவையில்லை. நேட்டிவ் லைப்ரரிகள் மூலம் Windows அல்லது Linux சேவையின் செயல்பாடுகளை விரிவாக்க விரும்பும் மென்பொருள் உருவாக்குநர்கள் மற்றும் நிர்வாகிகளுக்கானது இந்த வழிகாட்டி. தொகுதிகள் சேவையின் அனுமதியுடன் சேவையின் உட்புறத்தில் இயங்குகின்றன. நம்பகமான குறியீடுகளை மட்டுமே நிறுவவும்; தொகுதி கோப்புகள், சார்ந்திருக்கும் கோப்புகள் மற்றும் அமைப்புக் கோப்புகளை நிர்வாகி மட்டுமே அணுகக்கூடியவாறு பராமரிக்கவும்.
தொகுதியை ஏற்றுதல்
அமைப்புக் கோப்பிற்கு அருகில் உள்ள modules.d கோப்பகத்தில் உள்ள *.conf கோப்புகளைச் சேவை படிக்கிறது. இயல்புநிலை இருப்பிடங்கள் பின்வருமாறு:
| இயங்குதளம் | தொகுதி உள்ளமைவு இருப்பிடம் | லைப்ரரி வடிவம் |
|---|---|---|
| Linux | /etc/mudfish-dns/modules.d/ | .so |
| Windows | %ProgramData%\Mudfish DNS\modules.d\ | .dll |
ஒவ்வொரு கோப்பிலும் ஒரு வரிக்கு ஒரு முழுமையான கோப்புப் பாதை (absolute path) வீதம் குறிப்பிட வேண்டும். உதாரணமாக /etc/mudfish-dns/modules.d/10-policy.conf கோப்பின் உள்ளடக்கம்:
/usr/lib/mudfish-dns/modules/policy.so
கோப்புப் பெயர்களின் வரிசைப்படி படிக்கப்பட்டு, ஒவ்வொரு கோப்பிற்குள்ளும் வரிகளின் வரிசைப்படி படிக்கப்படும். வெற்றுக் கோடுகளும் # குறியீட்டுடன் தொடங்கும் வரிகளும் புறக்கணிக்கப்படும். பாதைகளை மேற்கோள் குறிகளுக்குள் இடவோ அல்லது சூழல் மாறிகள், வரியின் இறுதியில் குறிப்புகள் ஆகியவற்றையோ பயன்படுத்த வேண்டாம்; அவை புரிந்துகொள்ளப்படாது. Windows-இலும் இடைவெளிகள் உள்ள பாதைகள் உட்பட முழுமையான பாதையை உள்ளிடவும்.
தொகுதியைச் சேர்த்தல், மாற்றுதல் அல்லது நீக்கிய பிறகு சேவையை மறுதொடக்கம் செய்ய வேண்டும். Linux-இல் பின்வரும் கட்டளையைப் பயன்படுத்தவும்:
sudo systemctl restart mudfish-dns.service
Windows-இல் சேவைகள் மேலாளரில் (Services) Mudfish DNS சேவையை மறுதொடக்கம் செய்யவும். செயலியில் உள்ள Start DNS, Stop DNS, Apply Settings ஆகியவை தொகுதிகளை மீண்டும் ஏற்றாது. அமைப்புக் கோப்பைப் படிக்க முடியாவிட்டாலோ, தவறான பாதை இருந்தாலோ, ஏற்றுதல் அல்லது துவக்குதல் பிழை ஏற்பட்டாலோ சேவை தொடங்காது. தொகுதி கோப்பகம் இல்லாமலோ அல்லது காலியாகவோ இருக்கலாம்.
மென்பொருள் உருவாக்கத்தின் போது, --module வாதத்தை மீண்டும் மீண்டும் குறிப்பிடுவதன் மூலம் வாதங்களின் வரிசைப்படி லைப்ரரிகளை ஏற்றலாம். இந்நேர்வில் modules.d தானியங்கி ஏற்றுதல் தவிர்க்கப்படும். --config FILE என்பது அமைப்புக் கோப்பிற்கு அருகில் உள்ள தொகுதி கோப்பகத்தின் இருப்பிடத்தையும் மாற்றும். --restore-dns என்பது தொகுதிகளை ஏற்றாமல் மீட்டமைப்பைச் செய்யும்.
ஹூக்குகளைச் செயல்படுத்துதல் (Implement Hooks)
mudfish_dns_module.h ஹெடரைப் படிக்கவும் அல்லது mudfish_dns_module.h கோப்பைப் பதிவிறக்கவும்.
இந்த ஹெடர் தொகுதியில் பயன்படுத்தப்படும் கட்டமைப்புகள் (structs), ஹூக்குகள், செயல்கள் மற்றும் தரவு ஆயுட்கால விதிகளை வரையறுக்கிறது. இந்த வழிகாட்டியில் C ABI v2 பயன்படுத்தப்படுகிறது. mudfish_dns_module_init_v2() செயல்பாட்டை வெளிப்புறத்திற்கு வெளிப்படுத்தி (export), ஹூக்குகளை நிரப்புவதற்கு முன் MUDFISH_DNS_MODULE_ABI_V2 மற்றும் அனுப்பப்பட்ட கட்டமைப்பு அளவைச் சரிபார்க்கவும். துவக்கம் வெற்றியடைந்தால் 0 என்பதைத் திருப்பியனுப்ப வேண்டும்.
| ஹூக் | அழைக்கப்படும் நேரம் |
|---|---|
on_dns_query | பிரிக்கப்பட்ட வினவல் ஏற்றுக்கொள்ளப்பட்ட பிறகு, தற்காலிக நினைவகத் தேடல் அல்லது பகிர்தலுக்கு முன். |
on_dns_response | பதில் தேர்ந்தெடுக்கப்பட்ட பிறகு, தற்காலிக நினைவகத்தில் சேமிப்பதற்கு அல்லது கிளையன்ட்டிற்கு அனுப்புவதற்கு முன். தற்காலிக நினைவகத்தில் உள்ள பதில்களும் இந்த ஹூக் வழியே செல்லும். |
on_web_hello | ஆரம்ப HTTP Host/TLS SNI ஆய்வு முடிந்த பிறகு, இணைப்பை ஏற்படுத்துவதற்கு அல்லது ஆரம்பத் தரவைக் கையாளுவதற்கு முன். |
on_web_data | அடுத்தடுத்த கிளையன்ட் தரவு அல்லது சேவையகத் தரவு படிக்கப்பட்ட பிறகு, அனுப்புவதற்கு முன். |
DNS செயல்கள் (DNS Actions)
v2 DNS ஹூக்குகள் வெற்றியடைந்தால் 0 என்பதைத் திருப்பியனுப்பும் மற்றும் result->action மதிப்பை அமைக்கும்.
| செயல் | விளைவு |
|---|---|
MUDFISH_DNS_CONTINUE | அடுத்த தொகுதி மற்றும் வழக்கமான செயலாக்கத்தைத் தொடரும். |
MUDFISH_DNS_ALLOW | தற்போதைய ஹூக் சங்கிலியை முடித்து வழக்கமான DNS தேடலைத் தொடரும் அல்லது தேர்ந்தெடுக்கப்பட்ட பதிலைத் திருப்பியனுப்பும். |
MUDFISH_DNS_BLOCK | REFUSED என்பதைத் திருப்பியனுப்பும். |
MUDFISH_DNS_DROP | DNS பதிலை அனுப்பாமல் நிராகரிக்கும் (drop). |
MUDFISH_DNS_ANSWER | வழங்கப்பட்ட IPv4/IPv6 முகவரி மற்றும் TTL கொண்டு புதிய பதிலை உருவாக்கும். |
MUDFISH_DNS_REPLACE | தொகுதி வழங்கும் முழுமையான DNS வயர் வடிவப் பதிலைப் (wire-format) பயன்படுத்தும். |
v2 DNS ஹூக்குகளில் செயல் மாறிலிகளை (action constants) நேரடியாகத் திருப்பியனுப்ப வேண்டாம். சார்பு பூஜ்ஜியமற்ற மதிப்பைத் திருப்பியனுப்பினாலோ அல்லது முடிவு செல்லாததாக இருந்தாலோ SERVFAIL ஏற்படும். ALLOW என்பது தற்போதைய ஹூக் சங்கிலியை மட்டுமே முடிக்கும்; டொமைன் விதிகள், தகவல்தொடர்பு முறை அனுமதி அல்லது சான்றிதழ் ஆய்வுகளைத் தவிர்க்காது. DROP தவிர மற்ற வினவல் முடிவுகள் பதில் ஹூக் வழியேயும் செல்லும்.
வலை ஹூக்குகள் MUDFISH_DNS_CONTINUE அல்லது MUDFISH_DNS_REJECT என்பதை நேரடியாகத் திருப்பியனுப்பும். வலைக் கோரிக்கை நிராகரிக்கப்பட்டால் இணைப்பு உடனடியாகத் துண்டிக்கப்படும். வலை ஹூக்குகளைப் பயன்படுத்த வலைப் பாதுகாப்பு இயக்கப்பட்டிருக்க வேண்டும்; மறைகுறியாக்கப்பட்ட HTTPS உள்ளடக்கங்கள் வழங்கப்படாது.
பஃப்பர்கள், த்ரெட்டிங் மற்றும் தற்காலிக நினைவகம்
உள்ளீட்டு நிகழ்வுகளும் பஃப்பர்களும் படிக்க மட்டுமே உரியவை (read-only) மற்றும் கால்பேக் செயல்பாட்டின் போது மட்டுமே செல்லுபடியாகும். மாற்று பதில்கள் தொகுதிக்குச் சொந்தமான நினைவகத்தைப் பயன்படுத்த வேண்டும் மற்றும் அந்தத் தொகுதியின் அடுத்த கால்பேக் அல்லது வெளியேறும் நேரம் வரை செல்லுபடியாக இருக்க வேண்டும். ஸ்டேக் மெமரி அல்லது நிகழ்விலிருந்து பெறப்பட்ட பாயிண்டர்களைத் திருப்பியனுப்ப வேண்டாம். மாற்றுப் பதிலின் DNS ID, opcode மற்றும் கேள்வி அசல் வினவலுடன் பொருந்த வேண்டும். ஒரு நிகழ்வின் கால்பேக்குகள் வரிசையாக இயங்கும் என்றாலும் வெவ்வேறு த்ரெட்களில் அழைக்கப்படலாம். கால்பேக்குகளைக் குறுகிய நேரத்தில் முடிக்கவும், ABI எல்லைக்கு அப்பால் விதிவிலக்குகளைக் (exceptions) கொண்டு செல்ல வேண்டாம்.
உருவாக்கப்பட்ட, மாற்றப்பட்ட, தடுக்கப்பட்ட அல்லது நிராகரிக்கப்பட்ட முடிவுகள் ஹோஸ்ட் தற்காலிக நினைவகத்தில் சேமிக்கப்படாது. தற்காலிக நினைவகத்தில் உள்ள பதிலை மாற்றினாலும் அசல் தற்காலிக நினைவக உருப்படி மாறாது. ஹோஸ்ட் மாற்றுப் பதிலின் AD கொடியை (flag) அழித்துவிடும்; மேலும் DNSSEC சரிபார்ப்பு அல்லது மறு கையொப்பத்தைச் செய்யாது. கையொப்பமிடப்பட்ட தரவை மாற்றும் தொகுதிகள் செல்லாததாக்கப்பட்ட கையொப்பங்களைத் தாங்களாகவே கையாள வேண்டும்.
எடுத்துக்காட்டும் ஹெடரும்
கீழே உள்ள பக்கங்களில் முழுமையான மாதிரி மூலக் குறியீடும் தேவையான ஹெடரும் உள்ளன. Mudfish DNS மூலக் குறியீட்டு மரத்தைத் தனித்துப் பதிவிறக்க வேண்டிய அவசியமில்லை.
| கோப்பு | உள்ளடக்கம் |
|---|---|
| policy.c — DNS கொள்கை எடுத்துக்காட்டு | DNS வினவல்களை அனுமதித்தல், தடுத்தல், நிராகரித்தல், IP பதிலை உருவாக்குதல், பதில் முகவரி மற்றும் TTL-ஐ மாற்றுதல். Linux பில்ட் மற்றும் சோதனை கட்டளைகளும் இதில் அடங்கும். |
| mudfish_dns_module.h — தொகுதி ஹெடர் | ABI அறிவிப்புகள், ஹூக் கையொப்பங்கள், செயல் மாறிலிகள், பஃப்பர் உரிமை விதிகள். |
பில்ட் செய்வதற்கு முன் policy.c மற்றும் mudfish_dns_module.h ஆகியவற்றை ஒரே கோப்புறையில் பதிவிறக்கவும். எடுத்துக்காட்டின் பில்ட் கட்டளை Linux .so லைப்ரரியை உருவாக்கும்.