ဒီ article လေးကတော့ ကိုယ့်ဆီမှာ VPS Web Server တစ်ခု ရှိမယ် hosting site က ပေးတဲ့ Managed
DNS နဲ့ public မထွက်ချင်ဘူး ကိုယ့်ဘာသာကို DNS server setup လုပ်ပြီး Authoritative DNS တစ်ခုလုပ်ကြည့်
မယ် ဆိုတဲ့ စိတ်ကူးရတုန်း စမ်းဖြစ်သွားတဲ့ article လေးဖြစ်ပါတယ်။
Before that, What is so called Authoritative-Only DNS?
ဒီ article ရဲ့ အဓိက setup ဖြစ်တဲ့ authoritative-only dns ကတော့ သူ manage လုပ်နေတဲ့ dns
records တွေကိုသာ request လုပ်လာရင် အကြောင်းပြန်ပေးပြီး သူမသိတဲ့ သူဆီမှာမရှိတဲ့ records တွေ
ရောက်လာရင် refused လုပ်ပြီး တစ်ခြား DNS servers တွေဆီကို forward လုပ်ပေးမှာမဟုတ်သလို မဆိုင်တဲ့
dns queries တွေအတွက်လဲ cache သိမ်းထားပေးမှာမဟုတ်ပါဘူး။
အဲ့တော့ dns queries request တွေကို အကုန်လိုက်ကြည့်ပေးနေစရာမလိုပဲ ကိုယ်နဲ့ ပတ်သတ်တဲ့
request တွေကိုပဲ take care လုပ်စရာလိုတဲ့အတွက် performance အတွက်လဲ ကောင်းတယ် overhead လဲမဖြစ်
တော့ဘူးပေါ့။ နောက်ထပ် DNS မှာ Forwarding DNS and Caching-only DNS ဆိုပြီး တော့လဲ ရှိပါတယ်။
Caching-only DNS
Caching-only DNS ကတော့ သူ့ဆီမှာ တစ်ကယ့် DNS server လို record zones တွေမထားထားဘူး။
သူ့ဆီကို ရောက်လာတဲ့ dns queries တွေကို သူကိုယ်တိုင် တစ်ခြား သက်ဆိုင်တဲ့ DNS servers တွေဆီမှာ လိုက်ရှာ
ပေးပြီးတော့ ရပြီဆိုရင် user ကို response ပြန်ပေးပါတယ်။ လိုက်ရှာလို့ ရလာတဲ့ DNS queries တွေကိုလဲ သူဆိီ
မှာ အချိန်တစ်ခု ထိသိမ်းထားပေးပြီး same queries request တွေ ရောက်လာရင် သူ့ဆီကနေပဲ response ပြန််ပေး
ပြီး DNS query time ကို ပိုပြီးတော့ မြန်စေပါတယ်။
Forwarding DNS
Forwarding DNS ကကျတော့ သူ့ဆီကို DNS query request တစ်ခုရောက်လာတယ် ဆိုပါတော့ ဒီ query
request က သူ ဆီမှာ cache ရှိနေရင် အကြောင်းပြန်ပေးလိုက်တယ် မရှိဘူးဆိုရင် query request ကို တစ်ခြား
DNS server ဆီ ပို့ပေးလိုက်တာဖြစ်ပါတယ်။ DNS query request ကို သူကို တိုင် Cache-Only DNS လိုမျိုး လိုက်
ရှာမနေပဲ တစ်ခြား DNS server ကပြန်လာတဲ့ response ကိုသာ cache လုပ်သိမ်းထားပေးပြီးတော့ နောက်တစ်ခါ
same request ရောက်လာမှသာ forward မလုပ်တော့ပဲ response ပြန်ပေးတဲ့ ပုံစံမျိုး ဖြစ်ပါတယ်။
So, what's the deal?
ဒီ article ကို စမ်းဖို့အတွက် domain တစ်ခု (i.e rootofinfo.com) , VPS for DNS servers, web server
and public ip addresses တွေရှိရပါမယ်။ ကျွန်တော်ကတော့ domain အတွက် godaddy နဲ့ VPS and public
ipaddress အတွက် Digital Ocean platform ကနေ အသုံးပြုထားပါတယ်။ ကြိုက်နှစ်သက်ရာ platform ကို
အသုံးပြုလို့ရပါတယ်။
Let's get started
- Domain name = rootofinfo.online
- Master DNS = ns1.rootofinfo.online
- Slave DNS = ns2.rootofinfo.online
- Web Server = web01.rootofinfo.online
- IP Address = 3 x Public IP Addresses
First thing first
Domain ကိုတော့ ၀ယ်ထားပြီးပြီလို့ပဲ သဘောထားလိုက်မယ် ပထဆုံးအနေနဲ့က DNS server တွေ set
up လုပ်ရအောင်။ အရင်ဆုံး DNS မှာ Master/Slave setup လုပ်မယ် Master/Slave ပုံစံကတော့ zones တွေ မှန်
သမျှကို Master ကနေပဲ အဓိက အလုပ်လုပ်မှာပါ Slave ဖက်က master မှာ တည်ဆောက်ထားတဲ့ zones တွေကို
maintain လုပ်ပြီး DNS query တွေလာတဲ့အခါ Master DNS ကို ကူညီပြီး response ပြန်ပေးမှာဖြစ်ပါတယ်။
Let's setup Master DNS first
အရင်ဆုံး CentOS7 မှာ DNS server အတွက် "bind" packages ကို install လုပ်ပါတယ်။
Configure /etc/named.conf file
Packages တွေ သွင်းပြီးရင်တော့ dns setup စလို့ရပါပြီ အရင်ဆုံး /etc/named.conf အောက်မှာ
authoritative mode အတွက် လိုအပ်တာတွေ ပြင်ဆင်ပါမယ်။ အောက်ပုံမှာဆိုရင်
1. "listen-on port 53" for ipv4 and ipv6 မှာ "any" ဆိုပြီးထည့်ထားလဲ ရတယ် ဒါမှမဟုတ် OS ရဲ့ ip ကိုလဲ
specific သတ်မှတ်နိုင်ပါတယ်။ Any ကတော OS မှာရှိတဲ့ any network interface ကို ဆိုလိုပါတယ်။
2. Allow-transfer = "none" ဆိုတာက မဆိုင်တဲ့ DNS queries တွေအတွက် ထပ်ပြီး တစ်ခြား DNS တွေဆီကို
transfer မလုပ်ဘူးလို့ သတ်မှတ်တာဖြစ်ပါတယ်။ Allow-transfer အတွက် သီးသန့် Slave server ကို zone file
create လုပ်တဲ့အခါ ကြေညာမှာဖြစ်ပါတယ်။
3. Recursion = "no" ကတော့ authoritative dns server ဖြစ်တဲ့အတွက် တစ်ခြား authoritative dns servers တွေ
နဲ့ အဆက်အသွယ် မလုပ်ဘူးလို့ သတ်မှတ်တာဖြစ်ပါတယ်။ မိမိနဲ့သတ်ဆိုင်တဲ့ dns records တွေကိုသာ ထိန်းသိမ်း
ပေးထားမှာဖြစ်ပါတယ်။
Defining a zone in /etc/named.rfc
Authoritative DNS အတွက် initial config တွေ ပြီးရင် domain အတွက် zone စတင်သတ်မှတ်မှာဖြစ်
ပါတယ်။ Zone တစ်ခု သတ်မှတ်ဖို့အတွက် /etc/named.rfc1912.zones မှာ သတ်မှတ်ပေးပါမယ်။ အောက်ပုံမှာဆို
ရင် domain name ဖြစ်တဲ့ "rootofinfo.online" အတွက် zone တစ်ခု တည်ဆောက်ထားပြီး Type က "master"
လက်ရှိ ns1 ကို Master DNS အနေနဲ့ သတ်မှတ်တာ ဖြစ်ပြီး file ကတော့ forward lookup zone file ထားမယ့်
နေရာကို ဖော်ပြထားတာဖြစ်တယ် နောက် "Allow transfer" မှာတော့ Slave DNS server ရဲ့ ip ကို ဖော်ပြပေး
ထားတာဖြစ်ပါတယ်။
အခု ဒီ lab setup မှာ ကျွန်တော် reverse zone ကို မထည့်တော့ဘူး ဘာဖြစ်လို့လဲ ဆိုတော့ reverse zone
တွေကို cloud providers တွေက handle လုပ်တဲ့ အတွက် forward zone နဲ့ ပဲ set up လုပ်သွားမှာဖြစ်ပါတယ်။
Next step is "creating a forward lookup zone"
အိုကေ domain အတွက် zone file တစ်ခု create လုပ်ပြီးပြီဆိုရင် အဲ့ domain အတွက် forward lookup
zone တစ်ခု စတင် create လုပ်ပေးရပါတော့မယ်။ Location ကတော့ /var/named/ အောက်မှာ create လုပ်ရမှာ
ဖြစ်ပါတယ်။
အောက်ပုံမှာဆိုရင် ပထမဆုံး သတိထားရမယ့်အချက်က name record တွေရဲ့ အနောက်မှာ dot "."
တွေ ထည့်ရမှာဖြစ်ပါတယ်။ Bind DNS ရဲ့ အလုပ်လုပ်ပုံကြောင့် နောက်မှာ dot "." တွေ ပါရမှာဖြစ်ပါတယ်။
နောက်တစ်ခုအနေနဲ့က SOA (State of Authority) မှာ Master DNS name နဲ့ domain ရဲ့ email အတွက် name
ကို ထည့်သွင်းရမှာပါ။
နောက်တစ်ချက် အနေနဲ့ သတိထားရမှာကတော့ ဒီ forward lookup zone file ကို edit တစ်ခါ ၀င်
ပြင်တိုင်း "Serial value" ကို zone update to date ဖြစ်ဖို့ရန် အတွက် increment တိုးပေးရမှာဖြစ်ပါတယ်။ ပြီးရင်
"rndc reload rootofinfo.online" rndc command ကို အသုံးပြုပြီး zone update လုပ်ပေးရမှာပါ။ ကျန်တာတွေ ဖြစ်တဲ့ refresh, expire, etc
စသည်တို့ကိုတော့ အထူးတလည် မပြောတော့ဘူး detail ကိုတော့ internet မှာ ပိုပြီး ပြည့်ပြည့်စုံစုံ ဖတ်နိုင်ပါ
တယ်။
အဓိက အားဖြင့် nameserver ဖြစ်တဲ့ ns1 နဲ့ ns2 အတွက် "NS Record" ဆောက်မယ်
နောက် Host A record တွေ ဆောက်မယ် နောက်ပြီး web server အတွက် Host A record တွေ တည်ဆောက်ထား
တာ ဖြစ်ပါ
တယ်။ "WWW" ကို CNAME အနေနဲ့ လဲ သတ်မှတ် နိုင်သလို Host A record အနေနဲ့ လဲ သတ်မှတ်နိုင်တယ်။CNAME
ဆိုတာ က Host A record ကို alias လုပ်ထားတဲ့ အတွက် dns query လုပ်တဲ့ အခါမှာ ကြန့်ကြာ နိုင်တယ် ဒါကြောင့်
"WWW" အတွက် Host A တိုက်ရိုက် လုပ်ပေး တာ recommend ပေးကြပါတယ်။
အခု forward lookup zone file မှာ သုံးထားတဲ့ IP တွေ က Digital Ocean terms အရ "Floating
IP" တွေ ဖြစ်ပြီး VPS တွေမှာ map လုပ်ပေးထားတာဖြစ်ပါတယ်။ Digital Ocean အဆိုအရ "Floating IP" တွေ
သာ public accessible တွေ ဖြစ်ပြီး ssh ၀င်တဲ့ public ip ကို public accessible အတွက် အသုံးပြုလို့မရဘူးဖြစ်ပါ
တယ်။ ကျွန်တော် လဲ အစက သတိမထားလို့ ssh ip တွေသုံးပြီး DNSက public မထွက်ဘူး ဖြစ်နေသေးတယ်။
Change Group ownership
အခုတည်ဆောက်လိုက်တဲ့ zone files တွေ ရယ် config file တွေကို permission စစ်ကြည့်ပြီး
အကယ်၍ group ownership က "named" group assign မလုပ်ထားဘူးဆိုရင် "chgrp" command ကို အသုံးပြု
ပြီး group ownership ပြောင်းပေးရမှာဖြစ်ပါတယ်။ ပြီးရင်တော့ "systemctl enable --now named" command
ဖြင့် dns service ကို master မှာ start လုပ် လို့ ရပါပြီ။
Let's move on to Slave DNS Server
Slave server ဖက်ခြမ်း မှာ dns အတွက် လိုအပ်တဲ့ bind packages တွေ သွင်းမယ် ပြီးရင်တော့
/etc/named.conf မှာ Master မှာ setting ချခဲ့ တဲ့ အတိုင်းပဲ သတ်မှတ်မယ်။ ပြီးရင် /etc/named.rfc1912.zones
file မှာ domain အတွက် record zone တစ်ခု ထည့်ပေးရမယ် ထည့်ပေးတဲ့အခါမှာ "Type" နေရာမှာ "slave",
masters နေရာမှာ "master dns ip address" ကို ထည့်ပေးရမယ်။ ပြီးရင်တော့ "systemctl enable --now named" ဖြင့် bind service ကို start လုပ်မယ်။
It's time for Web Server
Master/Slave DNS တည်ဆောက်လို့ ပြီးရင် ဒီ dns service ကို အသုံးပြု မယ့် web server တစ်ခု
တည်ဆောက်လိုက်မယ်။ web server အတွက် လိုအပ်တဲ့ packages, services start, /var/www/html အောက်မှာ
index file တစ်ခု ဆောက်ထားလိုက်ရင် ရပါပြီ။
What's the next steps?
Next steps ကတော့ configuration တွေမဟုတ်တော့ဘူး အဓိက domain ၀ယ်တဲ့ godaddy မှာ ပြင်ရ မ
ယ့် အချက် တစ်ချို့ ရယ် နောက် Digital Ocean ဖက်မှာ "Floating IP" mapping တွဲ တဲ့ ပုံစံရယ် နောက် Firewall
မှာ လိုအပ်တဲ့ ports တွေ ဖွင့် ပေးဖို့ ရယ် ပဲ ကျန်တော့မယ်။
Take a look at Godaddy, What's a Glue Record?
ပုံမှန်ဆိုရင် Domain register တစ်ခု ဖြစ်တဲ့ godaddy တို့လိုမျိုး providers တွေဆီမှာ domain တစ်ခု
၀ယ်လိုက်ရင် အဲ့ domain ကို manage လုပ်ဖို့ တစ်ပါတည်း DNS features ပါလာပြီးသားဖြစ်ပါတယ်။ အခုလိုမျိုး
own public dns server တစ်ခု ဆောက်စရာ မလိုတော့ဘူး ပေါ့။ အခု setup မှာက godaddy က ပေးထားတဲ့
DNS ip ကို ကို မသုံးဘူး ဖြစ်တဲ့ အတွက် ဒီ ၀ယ်ထားတဲ့ domain ကို သွားချင်ရင် ကျွန်တော့်တို့ ရဲ့ nameservers
ip address ကို ညွှန်ပေးရမှာ ဖြစ်ပါတယ်။ အဲ့လိုမျိုး ညွှန် ပေးတာကို "Glue Record" သတ်မှတ်တယ်လို့ ခေါ်ပါ
တယ်။ အောက်မှာ ပြထားတဲ့ ပုံလေး အတိုင်း nameservers ကို ကျွန်တော်တို့ ရဲ့ ns1 and n2 ကို point လုပ်မယ်
hostname ဆိုတဲ့ နေရာမှာ ns1 and ns2 ရဲ့ public ip ကို ထည့်သွင်း ပေးရမှာဖြစ်ပါတယ်။ အခု လိုမျိုး ပြောင်း
လိုက်တဲ့ အခါမှာ godaddy ကနေ "We can't display your DNS information...." ဆိုပြီး DNS ကို သူတို့ဆီ က ယူ
သုံးထားတာ မဟုတ်တော့ တဲ့ အကြောင်း ကို ပြောထားတာ တွေ့ရမှာ ဖြစ်ပါတယ်။
Let's go to Digital Ocean
Digital Ocean မှာတော့ အရင်ဆုံး Floating IP ဘယ်လို သတ်မှတ် မလဲ ဆိုတာ ပြောသွားမယ် အပေါ်
မှာ သုံးခဲ့တဲ့ public ip address တွေ သည် floating ip တွေ ဖြစ်ပါတယ်။ ဆိုတော့ အရင်ဆုံး VPS ဆောက်ပြီးတဲ့
အခါမှာ floating ip ကို map အရင် လုပ်ရမှာပါ။ Digtal Ocean account တစ်ခု ကို "Floating IP" ၃ ခုထိ ရပြီး
ထပ်လိုချင်ရင်တော့ request လုပ်ရပါမယ်။ ပြီးရင်တော့ Firewall မှာ လိုအပ် တဲ့ dns, http, ssh ports တွေ ဖွင့်
ထား ပေးရမှာ ဖြစ်ပါတယ်။
Testing DNS Query and Web Server
လိုအပ်တာတွေ လုပ်ပြီး သွားပြီ ဆိုရင်တော့ testing စမ်း ကြည့် ရအောင်။ အပြင်က နေ nslookup
command နဲ့ query ထောက်ကြည့်မယ်။ နောက် website အတွက် browser ကနေ ခေါ်ကြည့် မယ်။
အခုဆိုရင် ကျွန်တော်တို့ရဲ့ ကိုယ်ပိုင် Authoritative DNS server က အလုပ်လုပ်နေ ပြီ ဖြစ်ပါတယ်။
webserver အပြင် နောက်ပိုင်း ကိုယ်ပိုင် email sever တွေ FTP server တွေပါ ကိုယ်ပိုင် DNS server နဲ့ ချိတ် ပြီး
set up လုပ် နိုင် မှာ ဖြစ်ပါတယ်။
အိုကေ ဒါကတော့ Creating your own authoritative dns server ဖြစ်ပါတယ်.......
That's it 😊
Thank you!!!
Hello! Firstly I am really love your topic and I've been searching this kind of authoritative dns and map with public domain name to cloud for a long time. Thanks for sharing!!. In my lab envi, I tried with Azure and godaddy dns. In here, I faced some kind of DNS port issue in azure side although I opened inbound rule for DNS in azure Network Security Group. So I cannot resolve my domain from public :'(. Could you give me any kind of solution for this dns port issue in Azure.
ReplyDelete#calvin
Hello,
ReplyDeleteThanks for reaching out to my blog.
Have you done checking on your dns server config, linux firewall, selinux status and godaddy redirection to your nameservers?
When I was testing for this article, even though I did enable ports on firewall and dns services are ok, what I faced is public ip issue, i thought the public ip assigned to my servers was also usable as domain public ip but instead it was intended only for ssh. So, I had to use their so called "floating ip" service map to the servers then only my webpage is published. Even though, i haven't tested on azure yet, here is the youtube link that might be similar to your envi. Good luck on your testing.
Thanks!!!
https://www.youtube.com/watch?v=CzqquvXsFag