BIND (9) সার্ভারগুলির মধ্যে সমস্ত অঞ্চলকে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করার কোনও উপায় আছে যাতে আমি যখন মাস্টারগুলিতে যুক্ত করি তখন আমাকে দাসে জোনের যোগ করতে হবে না?
BIND (9) সার্ভারগুলির মধ্যে সমস্ত অঞ্চলকে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করার কোনও উপায় আছে যাতে আমি যখন মাস্টারগুলিতে যুক্ত করি তখন আমাকে দাসে জোনের যোগ করতে হবে না?
উত্তর:
BIND 9.7.2-P2 দেখুন যেখানে আপনার কাছে "আরএনডিসি অ্যাডজোন" এবং "আরএনডিসি ডেলজোন" বিবৃতি রয়েছে যা আপনাকে চলমান সার্ভার থেকে অঞ্চলগুলি "দূরবর্তীভাবে" যুক্ত করতে এবং মুছে ফেলার অনুমতি দেয়।
আমার কাছে একটি কাগজ রয়েছে যা কিছু উদাহরণ দেয় যা আমি গত মাসে ন্যানোগে দিয়েছিলাম।
ftp://ftp.isc.org/isc/pubs/pres/NANOG/50/DNSSEC-NANOG50.pdf
যদিও এটি পিছনে যাবে না এবং আপনার বর্তমানে থাকা কোনও জঞ্জাল পরিষ্কার করবে না, এটি আপনাকে "rndc" ব্যবহার করে পরিচালনা করতে সক্ষম মেশিনগুলিকে সিঙ্ক্রোনাইজ করা সত্যিই সহজ করে তোলে।
[হ্যাঁ, বরং একটি পুরাতন পোস্টে প্রতিক্রিয়া জানাচ্ছি, তবে BIND 9.7.2-P2 এটির ওয়ারেন্ট দেওয়ার পক্ষে যথেষ্ট দুর্দান্ত]
আরও একটি আপডেট যুক্ত করা হচ্ছে (সত্যের বহু বছর পরে, তবে আশা করা যায় যে এটি লোকেরা যাতে অনুসন্ধানের ফলাফলগুলিতে এটি জুড়ে যায়) সহায়তা করে, আমি ক্যাটালগ অঞ্চলগুলি ব্যবহারের পরামর্শ দিতে চাই।
BIND 9.11 (2018) এ প্রবর্তিত ক্যাটালগ অঞ্চলগুলি প্রাথমিক ও মাধ্যমিক সার্ভারগুলির মধ্যে ভাগ করা একটি বিশেষ জোনের মাধ্যমে জোনগুলি স্বয়ংক্রিয়ভাবে জোন (সংযোজন এবং মোছার) মঞ্জুরি দেয়।
সম্পূর্ণ তথ্যের জন্য, দেখুন: https://kb.isc.org/docs/aa-01401
আপনি ফ্ল্যাটফাইলে ব্যাকএন্ড ব্যবহার করছেন তবে বাইন্ড 9 এ স্থানীয়ভাবে করার কোনও উপায় আমি জানি না। বিভিন্ন ডিবি-ব্যাকড সিস্টেম রয়েছে যা এটি স্বয়ংক্রিয়ভাবে সহায়তা করতে পারে। অথবা আপনি এটি স্ক্রিপ্ট করতে পারেন:
আমি জোনগুলির তালিকা এবং জোনটির জন্য প্রাথমিক এনএস আইপি সহ একটি পাঠ্য ফাইল পপুলেট করি এবং এটি এমন একটি ওয়েবসাইটে আটকে রাখি যা আমি আমার দাসদের অ্যাক্সেসের অনুমতি দিয়ে থাকি। দাসরা এই ফাইলটি পর্যায়ক্রমে নিয়ে আসে এবং যদি এটি পরিবর্তিত হয় তবে তারা পার্স করে এটি একটি নামডকনফ তৈরি করে এবং কনফিগারগুলি পুনরায় লোড করতে বাইন্ডকে বলে। এটি "স্বয়ংক্রিয়" এই অর্থে যে আমাকে নিজের সেকেন্ডারিগুলিতে ম্যানুয়ালি চাপ দিতে হবে না এবং কনফিগারগুলি আপডেট করতে হবে তবে এটি এখনও বাইন্ড 9 এর বাহ্যিক।
আপনার পুরো ডিএনএস অবকাঠামো পরিচালনা করতে আপনি একটি উচ্চ স্তরের কনফিগারেশন ম্যানেজমেন্ট সিস্টেম যেমন পুতুলের মতো ব্যবহার করতে পারেন । যদিও এটি কিছুটা জটিল।
হতে পারে আপনি পুতুল বা সিএফইঙ্গিনের মতো কোনও কনফিগারেশন ম্যানেজমেন্ট সিস্টেমের সন্ধান করছেন ? এতে অতিরিক্ত অবকাঠামো জড়িত রয়েছে, তবে তারা প্রচুর কনফিগারেশন সামগ্রী বিতরণ করতে পারে এবং এটিকে সহজেই অন্তর্ভুক্ত করতে পারে।
বাঁধাই নিজে এটি করতে পারে না। আরও উল্লেখযোগ্য বিষয়, এটি এটি করা অযাচিত হবে। অনেকগুলি পরিস্থিতি রয়েছে যেখানে নির্দিষ্ট কয়েকটি ডোমেন কোনও প্রদত্ত গোলামের সাথে প্রতিলিপি করা উচিত।
আপনার পুরো অঞ্চলটি / var / নামযুক্ত গাছে rsync ব্যবহার করা বেশ ভাল কাজ করে যদি আপনি নিজের অঞ্চলগুলি সঠিকভাবে লিখেন এবং নিশ্চিত হন যে নামযুক্ত.কনফ / var / নামেই বাস করে। এটি যদিও গতিশীল আপডেটগুলির সাথে কাজ করবে না, এবং "কীভাবে জিনিসগুলি করা উচিত" এর জন্য শস্যের বিরুদ্ধে বাছাই।
আমি একটি বিশেষ জোনে প্রচারের জন্য সমস্ত ডোমেন স্টাফ করার জন্যও পরীক্ষা করে দেখেছি এবং মাস্টার জোনে তারা যা দেখছে তার ভিত্তিতে নামটি.কনফ পুনর্নির্মাণের জন্য দাসদের একটি সাধারণ স্ক্রিপ্ট ব্যবহার করেছি। মূলত উপরের টেক্সট ফাইলের মতো একই জিনিস, তবে ডিএনএস থেকে এটি খাওয়ানো সব কিছু ইন-ব্যান্ড রাখতে। এটি হারিয়ে যাওয়ার আগে সম্ভবত আমার স্ক্রিপ্টটি প্রকাশ করা উচিত = /
প্রত্যেকের এবং তাদের মায়ের নিজস্ব ডোমেন থাকার সময়ে, এটি অবাক করে দেয় যে বিনয়ের সাথে এই সংহত করার জন্য এখন পর্যন্ত খুব ভাল সমাধান নেই isn't / /
পুতুল বা সিএফইঙ্গাইন পরীক্ষা করার জন্য আমি উপরের পরামর্শগুলি দ্বিতীয় (বা তৃতীয়) করছি। এছাড়াও, আপনি সিভিএস / এসভিএন এর বাইরে এবং আপনার ফাইলগুলি পরীক্ষা করে দেখতে পারেন। আপনি যদি কোনও স্ক্রিপ্টিং সমাধানে আগ্রহী হন তবে আমি যা ব্যবহার করি তা এখানে:
#!/bin/bash
DATE=`date +%Y-%m-%d`
archive='/root/dns'
cd $archive
[ $1 ] && DEBUG=$1
if [ "$DEBUG" == "-debug" ]; then
echo "Debugging activated..."
else
unset DEBUG
fi
for server in dnsm02 dnsm03 dnsm51 dnsm52; do
for file in named.conf named.cfx.conf named.external.conf named.internal.conf named.logging.conf named.options.conf; do
PATCHDIR="$archive/$server/$DATE/patch" && [ $DEBUG ] && echo "PATCHDIR = $PATCHDIR"
SRVDIR="$archive/$server/$DATE" && [ $DEBUG ] && echo "SRVDIR = $SRVDIR"
## Fetch bind config files from $server, put them in date stamped $archive/$server
[ ! -d $PATCHDIR ] && mkdir -p $PATCHDIR && [ $DEBUG ] && echo "Created archive directory"
scp -q user@$server:/etc/bind/$file $archive/$server/$DATE/$file && [ $DEBUG ] && echo "Copied remote $file from $server..."
## diff fetched file against template file and create a patch
[ $DEBUG ] && echo "Creating patch file..."
diff -u $SRVDIR/$file $archive/$server/$file > $PATCHDIR/patch.$file
[ ! -s $PATCHDIR/patch.$file ] && rm -f $PATCHDIR/patch.$file && [ $DEBUG ] && echo "no differences , no patch created for $server $file"
[ -s $PATCHDIR/patch.$file ] && patch $SRVDIR/$file $PATCHDIR/patch.$file && ssh user@$server "sudo scp user@dnsm01:$SRVDIR/$file /etc/bind/$file" && [ $DEBUG ] && echo "$file patched and uploaded"
done
[ $DEBUG ] && echo "Checking whether patch directory is empty..."
[ $(ls -1A $PATCHDIR | wc -l) -eq 0 ] && rmdir $PATCHDIR && [ $DEBUG ] && echo "$PATCHDIR empty, removing..."
ssh user@$server "sudo rndc reload"
done
এই সেটআপের জন্য ssh কীগুলি বেশ প্রয়োজনীয়। আমি অসাধারণ স্ক্রিপ্টিং-ফু শক্তি দাবি করি না, সুতরাং সমালোচনা করতে নির্দ্বিধায় থাকুন, তবে বিনয়ী হন।
ভাল অভিজ্ঞতা, এটি কাজ করে। আমি আমার স্ক্রিপ্টগুলি পোস্ট করতে পারি, যদি কেউ সেগুলি চায়।
এটি এমন কিছু পিএইচপি কোড যা মাস্টার সার্ভার একটি তালিকা তৈরি করতে চালাতে পারে। বিকল্পগুলি তখন এটি কোনও ডিবিতে আপলোড করা হতে পারে বা অন্যান্য ডিএনএস সার্ভারগুলি এটিকে http / গুলি ধরে টানতে পারে।
মাস্টার সার্ভার এটি চালাতে পারে:
$dir = "/var/lib/bind";
$files = scandir($dir);
foreach($files as $file) {
$zoneparts = explode(".hosts", $file);
if(count($zoneparts) > 1){
echo $zoneparts[0] . "\r\n";
}
}
স্লেভ সার্ভার এটি চালাতে পারে:
$zones = file(URL TO MASTER SERVER);
if($zones != ""){
$header = "// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
";
file_put_contents("/var/www/html/zone/zones.txt", $header);
foreach($zones as $zone){
if($zone != "") {
$zone = preg_replace('~[[:cntrl:]]~', '', $zone);
$config = 'zone "' . $zone.'" {
type slave;
masters {lemming; };
allow-transfer {none; };
file "/var/lib/bind/db.'.$zone.'";
};
';
file_put_contents('/var/www/html/zone/zones.txt', $config, FILE_APPEND);
}}
}
"জোন" দির লিখতে হবে
তারপরে এটির মতো একটি বাশ স্ক্রিপ্ট তৈরি করুন:
#!/bin/bash
php /var/www/html/index.php
cp /var/www/html/zone/zones.txt /etc/bind/named.conf
service bind9 restart
logger DNS Zones pulled from master and bind restarted /home/bob/dns_sync.sh
তারপরে রুট হিসাবে ক্রোনজব তৈরি করুন (ক্রন্টব-ই):
*/10 * * * * /home/bob/dns_sync.sh