Newer
Older
Master-Slave-DNS-with-BIND9 / README.md
Ilazog on 25 Mar 2020 16 KB Update README.md
  1. Master-Slave-DNS-with-BIND9
  2. ===============
  3.  
  4. Repository ini berisikan instalasi dan konfigurasi Master-Slave DNS pada Bind9
  5.  
  6. ## Task
  7. Instalasi dan Konfigurasi
  8. * BIND9
  9. * Glue Record Domain
  10.  
  11. Ketentuan pengerjaan:
  12. * Menggunakan 2 VPS dengan OS centos7
  13. * Menggunakan domain utama (domain.tld)
  14. * Menggunakan DNS Server BIND9
  15. * Menggunakan Master Slave Bind9
  16.  
  17. ## Instalasi dan Konfigurasi BIND9 (Master)
  18. #### Step 1: Install BIND9
  19. Untuk melakukan instalasi BIND9 yang pertama adalah melakukan remote ke IP VPS dengan menggunakan SSH
  20.  
  21. > ```$ ssh root@ipaddress```
  22.  
  23. Setelah berhasil login ke VPS, lakukan pembaharuan paket/repository dari system operasi Centos7 dengan perintah sebagai berikut:
  24.  
  25. > ```# yum -y update```
  26.  
  27. Setelah melakukan update system selanjutnya lakukan install epel-release
  28.  
  29. > ```# yum install epel-release -y```
  30.  
  31. Setelah melakukan install epel-release selanjutnya kita install bind9
  32.  
  33. > ```# yum install bind bind-utils -y```
  34.  
  35. #### Step 2: Konfigurasi BIND9
  36.  
  37. Kemudian lakukan backup file konfigurasi bind dengan melakukan copy file tersebut
  38.  
  39. > ```# cp /etc/named.conf /etc/named.conf.ori```
  40.  
  41. Lakukan perubahan konfigurasi named.conf dari sisi Master
  42.  
  43. > ```# vi /etc/named.conf```
  44.  
  45. Rubah isi dari file tersebut.
  46.  
  47. > ```
  48. listen-on port 53 { 127.0.0.1; 103.23.20.70;}; ( masukan ip server bind )
  49. listen-on-v6 port 53 { ::1; };
  50. allow-query { 127.0.0.1; 103.23.20.70; any; }; ( masukan ip server bind )
  51. allow-query-cache { 127.0.0.1; 103.23.20.70; any ;}; ( masukan ip server bind )
  52. ```
  53.  
  54. Kemudian masukan konfigurasi Zone Master pada file konfigurasi named.conf
  55.  
  56. > ```
  57. zone "padiakse.my.id" {
  58. type master; (masukan type disini sebagai master)
  59. file "/var/named/for.dns"; ( Penempatan file zona )
  60. allow-update { 117.53.47.189; }; ( Mengizinkan Update zone ke ip bind slave )
  61. allow-transfer { 117.53.47.189; }; ( Mengizinkan mentransfer zone ke ip bind slave )
  62. also-notify { 117.53.47.189; }; (Melakukan notify setiap kali ada peruabahan zone dari sisi master ke slave)
  63. notify yes;
  64. };
  65. ```
  66.  
  67. Setelah itu buat File Zone sesuai dengan penempatan file Zona pada file konfigurasi named.conf
  68.  
  69. > ```# vi /var/named/for.dns```
  70.  
  71. Berikut isi dari file zona Tersebut.
  72.  
  73. > ```
  74. $TTL 86400
  75. @ IN SOA padiakse.my.id. root.padiakse.my.id. (
  76. 2403202148 ;Serial yyMMddhhmm
  77. 3600 ;Refresh
  78. 1800 ;Retry
  79. 604800 ;Expire
  80. 86400 ;Minimum TTL
  81. )
  82. @ IN NS binds1.padiakse.my.id.
  83. @ IN NS binds2.padiakse.my.id.
  84. @ IN A 103.23.20.70
  85. binds1 IN A 103.23.20.70
  86. binds2 IN A 117.53.47.189
  87. bind IN A 117.53.47.189
  88. ```
  89.  
  90. Setelah file Zone selesai kita enable konfigurasi Bind9 Server dan menjalankan servicenya
  91.  
  92. > ```
  93. # systemctl enable named
  94. # systemctl start named
  95. ```
  96.  
  97. Pastikan service berjalan dengan normal.
  98.  
  99. > ```
  100. # systemctl status named
  101. ● named.service - Berkeley Internet Name Domain (DNS)
  102. Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
  103. Active: active (running) since Tue 2020-03-24 21:50:22 WIB; 15h ago
  104. Process: 8204 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  105. Process: 7386 ExecReload=/bin/sh -c /usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  106. Process: 8215 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  107. Process: 8213 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
  108. Main PID: 8216 (named)
  109. CGroup: /system.slice/named.service
  110. └─8216 /usr/sbin/named -u named -c /etc/named.conf
  111. ```
  112.  
  113.  
  114. ## Instalasi dan Konfigurasi BIND9 (Slave)
  115. #### Step 1: Install BIND9
  116. Untuk melakukan instalasi BIND9 yang pertama adalah melakukan remote ke IP VPS dengan menggunakan SSH
  117.  
  118. > ```$ ssh root@ipaddress```
  119.  
  120. Setelah berhasil login ke VPS, lakukan pembaharuan paket/repository dari system operasi Centos7 dengan perintah sebagai berikut:
  121.  
  122. > ```# yum -y update```
  123.  
  124. Setelah melakukan update system selanjutnya lakukan install epel-release
  125.  
  126. > ```# yum install epel-release -y```
  127.  
  128. Setelah melakukan install epel-release selanjutnya kita install bind9
  129.  
  130. > ```# yum install bind bind-utils -y```
  131.  
  132. #### Step 2: Konfigurasi BIND9
  133.  
  134. Kemudian lakukan backup file konfigurasi bind dengan melakukan copy file tersebut
  135.  
  136. > ```# cp /etc/named.conf /etc/named.conf.ori```
  137.  
  138. Lakukan perubahan konfigurasi named.conf dari sisi Slave
  139.  
  140. > ```# vi /etc/named.conf```
  141.  
  142. Rubah isi dari file tersebut.
  143.  
  144. > ```
  145. listen-on port 53 { 127.0.0.1; 117.53.47.189; }; ( masukan ip server bind )
  146. listen-on-v6 port 53 { none; };
  147. allow-query { 127.0.0.1; 117.53.47.189; any; }; ( masukan ip server bind )
  148. allow-query-cache { 127.0.0.1; 117.53.47.189; any ;}; ( masukan ip server bind )
  149. ```
  150.  
  151. Kemudian masukan konfigurasi Zone Slave pada file konfigurasi named.conf
  152.  
  153. > ```
  154. zone "padiakse.my.id" {
  155. type slave; (masukan type disini sebagai Slave)
  156. allow-transfer { 103.23.20.70; }; ( Mengizinkan Update zone dari Ip master )
  157. allow-notify { 103.23.20.70; }; ( Mengizinkan mentransfer zone dari Ip master)
  158. masters { 103.23.20.70; }; (Merupakan IP master dari konfigurasi slave)
  159. file "slaves/for.dns"; ( Penempatan file zona )
  160. masterfile-format text; ( Berguna untuk menerjemahkan zona dari master ke dalam format text)
  161. notify yes;
  162. };
  163. ```
  164.  
  165. Setelah file Zone selesai kita enable konfigurasi Bind9 Server dan menjalankan servicenya
  166.  
  167. > ```
  168. # systemctl enable named
  169. # systemctl start named
  170. ```
  171.  
  172. Pastikan service berjalan dengan normal.
  173.  
  174. > ```
  175. # systemctl status named
  176. ● named.service - Berkeley Internet Name Domain (DNS)
  177. Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
  178. Active: active (running) since Tue 2020-03-24 21:50:42 WIB; 15h ago
  179. Process: 16837 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  180. Process: 16849 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  181. Process: 16847 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
  182. Main PID: 16851 (named)
  183. CGroup: /system.slice/named.service
  184. └─16851 /usr/sbin/named -u named -c /etc/named.conf
  185. ```
  186.  
  187. ## Memastikan Konfigurasi Master-Slave Bind9
  188. #### Step 1: Lakukan Pengecekan pada file Zone dari sisi SLave
  189. Sesuai dengan file konfigurasi zone named.conf bahwa file zone akan diletakan pada folder /var/named/slaves/ maka kita harus masuk ke folder tersebut untuk memastikan
  190.  
  191. > ```# cd /var/named/slaves/```
  192.  
  193. Setelah itu lihat isi dari folder slaves
  194.  
  195. > ```
  196. [slaves]# ls
  197. for.dns
  198. ```
  199.  
  200. Apabila file tersebut tidak ada mohon pastikan lagi penempatan file zone pada sisi slave.
  201.  
  202. Jika sudah ditemukan kemudian kita lihat isi konfigurasi record DNS pada file Zone tersebut.
  203.  
  204. > ```
  205. # cat for.dns
  206. $ORIGIN .
  207. $TTL 86400 ; 1 day
  208. padiakse.my.id IN SOA padiakse.my.id. root.padiakse.my.id. (
  209. 2403202148 ; serial
  210. 3600 ; refresh (1 hour)
  211. 1800 ; retry (30 minutes)
  212. 604800 ; expire (1 week)
  213. 86400 ; minimum (1 day)
  214. )
  215. NS binds1.padiakse.my.id.
  216. NS binds2.padiakse.my.id.
  217. A 103.23.20.70=
  218. $ORIGIN padiakse.my.id.
  219. bind A 117.53.47.189
  220. binds1 A 103.23.20.70
  221. binds2 A 117.53.47.189
  222. ```
  223.  
  224. #### Step 2: Lakukan Pengecekan dengan melakukan penambahan record dari sisi master
  225. Lakukan penambahan record pada file zona sisi master
  226.  
  227. > ```# vi /var/named/for.dns```
  228.  
  229. Berikut isi dari file zona Tersebut.
  230.  
  231. > ```
  232. $TTL 86400
  233. @ IN SOA padiakse.my.id. root.padiakse.my.id. (
  234. 2403202149 ;Serial yyMMddhhmm
  235. 3600 ;Refresh
  236. 1800 ;Retry
  237. 604800 ;Expire
  238. 86400 ;Minimum TTL
  239. )
  240. @ IN NS binds1.padiakse.my.id.
  241. @ IN NS binds2.padiakse.my.id.
  242. @ IN A 103.23.20.70
  243. binds1 IN A 103.23.20.70
  244. binds2 IN A 117.53.47.189
  245. bind IN A 117.53.47.189
  246. www IN CNAME padiakse.my.id.
  247. @ IN MX 10 mail.padiakse.my.id.
  248. @ IN TXT "v=spf1 a mx -all"
  249. mail IN A 117.53.47.189
  250. ftp IN CNAME padiakse.my.id.
  251. ```
  252.  
  253. Setelah file Zone selesai kita enable konfigurasi Bind9 Server dan menjalankan servicenya
  254.  
  255. > ```
  256. # systemctl restart named
  257. ```
  258.  
  259. Jalankan perintah berikut untuk melakukan pengecekan zona
  260.  
  261. > ```
  262. # named-checkzone padiakse.my.id /var/named/for.dns
  263. zone padiakse.my.id/IN: loaded serial 2403202149
  264. OK
  265. ```
  266.  
  267. Lakukan pengecekan status pada sisi master.
  268.  
  269. > ```
  270. # systemctl status named
  271. ● named.service - Berkeley Internet Name Domain (DNS)
  272. Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
  273. Active: active (running) since Wed 2020-03-25 13:43:41 WIB; 1min 41s ago
  274. Process: 8440 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  275. Process: 7386 ExecReload=/bin/sh -c /usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  276. Process: 8451 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  277. Process: 8449 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
  278. Main PID: 8452 (named)
  279. CGroup: /system.slice/named.service
  280. └─8452 /usr/sbin/named -u named -c /etc/named.conf
  281. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53
  282. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: network unreachable resolving './DNSKEY/IN': 2001:500:a8::e#53
  283. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: network unreachable resolving './NS/IN': 2001:500:a8::e#53
  284. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53
  285. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: network unreachable resolving './NS/IN': 2001:500:2::c#53
  286. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: client @0x7f62c40b7800 117.53.47.189#34914 (padiakse.my.id): transfer of 'padiakse.my.id/IN': AXFR-style IXF...03202149)
  287. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: client @0x7f62c40b7800 117.53.47.189#34914 (padiakse.my.id): transfer of 'padiakse.my.id/IN': AXFR-style IXFR ended
  288. Mar 25 13:43:41 pdns.padiakse.my.id named[8452]: client @0x7f62c40a9060 117.53.47.189#41904: received notify for zone 'padiakse.my.id'
  289. Mar 25 13:43:42 pdns.padiakse.my.id named[8452]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
  290. Mar 25 13:43:42 pdns.padiakse.my.id named[8452]: resolver priming query complete
  291. Hint: Some lines were ellipsized, use -l to show in full.
  292. ```
  293.  
  294. Setelah itu lakukan restart service dari sisi slave
  295.  
  296. > ```
  297. # systemctl restart named
  298. ```
  299.  
  300. Kemudian cek file zone pada sisi slave.
  301.  
  302. > ```
  303. # cat for.dns
  304. $ORIGIN .
  305. $TTL 86400 ; 1 day
  306. padiakse.my.id IN SOA padiakse.my.id. root.padiakse.my.id. (
  307. 2403202149 ; serial
  308. 3600 ; refresh (1 hour)
  309. 1800 ; retry (30 minutes)
  310. 604800 ; expire (1 week)
  311. 86400 ; minimum (1 day)
  312. )
  313. NS binds1.padiakse.my.id.
  314. NS binds2.padiakse.my.id.
  315. A 103.23.20.70
  316. MX 10 mail.padiakse.my.id.
  317. TXT "v=spf1 a mx -all"
  318. $ORIGIN padiakse.my.id.
  319. bind A 117.53.47.189
  320. binds1 A 103.23.20.70
  321. binds2 A 117.53.47.189
  322. ftp CNAME padiakse.my.id.
  323. mail A 117.53.47.189
  324. www CNAME padiakse.my.id.
  325. ```
  326.  
  327. Cek status dari bind slave
  328.  
  329. > ```
  330. # systemctl status named
  331. ● named.service - Berkeley Internet Name Domain (DNS)
  332. Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
  333. Active: active (running) since Wed 2020-03-25 13:48:05 WIB; 7s ago
  334. Process: 17340 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  335. Process: 17352 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  336. Process: 17350 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
  337. Main PID: 17354 (named)
  338. CGroup: /system.slice/named.service
  339. └─17354 /usr/sbin/named -u named -c /etc/named.conf
  340. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './DNSKEY/IN': 2001:500:2::c#53
  341. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './NS/IN': 2001:500:2::c#53
  342. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './DNSKEY/IN': 2001:500:9f::42#53
  343. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './NS/IN': 2001:500:9f::42#53
  344. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './DNSKEY/IN': 2001:500:12::d0d#53
  345. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './NS/IN': 2001:500:12::d0d#53
  346. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53
  347. Mar 25 13:48:05 imam.localhost named[17354]: network unreachable resolving './NS/IN': 2001:500:2f::f#53
  348. Mar 25 13:48:06 imam.localhost named[17354]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
  349. Mar 25 13:48:06 imam.localhost named[17354]: resolver priming query complete
  350. ```
  351.  
  352. **Add Glue Record Pada Portal Domain**
  353.  
  354. Untuk menambahkan glue record pada domain.tld, silakan menghubungi pihak registrar domain tersebut dan dalam case ini kami menggunakan domain dari registrar Domain Cloud.
  355.  
  356. * Cara lihat registrar domain
  357.  
  358. > ```
  359. $ whois domain.tld
  360. Sponsoring Registrar PANDI ID:garuda
  361. Sponsoring Registrar Organization:Domain Cloud
  362. Sponsoring Registrar City:Jakarta Selatan
  363. Sponsoring Registrar State/Province:Jakarta
  364. Sponsoring Registrar Postal Code:12870
  365. Sponsoring Registrar Country:ID
  366. Sponsoring Registrar Phone:02129682828
  367. Sponsoring Registrar Contact Email:registrar@isi.co.id
  368. ```
  369.  
  370. * Masuk pada portal domain dan pilih bagian name server masukan nama name server dan Ip Address kemudian save changes.
  371.  
  372.  
  373. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak2.png" width="500">
  374. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak3.png" width="500">
  375.  
  376. **Pengecekan untuk Master Slave BIND9**
  377.  
  378. * Cek Glue record domain
  379.  
  380. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak1.png" width="500">
  381.  
  382. * Cek Record Domain
  383.  
  384. > ```
  385. $ dig padiakse.my.id ns @b.dns.id +short
  386. binds1.padiakse.my.id.
  387. binds2.padiakse.my.id.
  388. ```
  389.  
  390. > ```
  391. $ dig binds1.padiakse.my.id +short
  392. 103.23.20.70
  393. ```
  394.  
  395. > ```
  396. $ dig binds2.padiakse.my.id +short
  397. 117.53.47.189
  398. ```
  399.  
  400. > ```
  401. $ dig padiakse.my.id @binds1.padiakse.my.id +short
  402. 103.23.20.70
  403. ```
  404.  
  405. > ```
  406. $ dig padiakse.my.id @binds2.padiakse.my.id +short
  407. 103.23.20.70
  408. ```
  409.  
  410. > ```
  411. $ dig bind.padiakse.my.id +short
  412. 117.53.47.189
  413. ```
  414.  
  415. * Cek Record A Domain
  416.  
  417. > ```
  418. $ dig mail.padiakse.my.id +short
  419. 117.53.47.189
  420. ```
  421.  
  422. * Cek Record MX Domain
  423.  
  424. > ```
  425. $ dig padiakse.my.id mx +short
  426. 10 mail.padiakse.my.id.
  427. ```
  428.  
  429. * Cek Record NS Domain
  430.  
  431. > ```
  432. $ dig padiakse.my.id ns +short
  433. binds1.padiakse.my.id.
  434. binds2.padiakse.my.id.
  435. ```
  436.  
  437. * Cek Record TXT Domain
  438.  
  439. > ```
  440. $ dig padiakse.my.id txt +short
  441. "v=spf1 a mx -all"
  442. ```
  443.  
  444. * Cek Record CNAME Domain
  445.  
  446. > ```
  447. $ dig www.padiakse.my.id cname +short
  448. padiakse.my.id.
  449. $ dig ftp.padiakse.my.id cname +short
  450. padiakse.my.id.
  451. ```
  452.  
  453. Apabila dengan tools dig belum muncul untuk record tersebut kemungkinan besar record tersebut masih dalam proses *Propagasi* atau *kita salah memaasukan record tersebut* untuk itu kita dapat mengecek kembali pada table record dan apabila tidak ada masalah pada table record kita dapat melakukan pengecekan proses propagasi record domain dan berikut kami lampirkan:
  454.  
  455. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak4.png" width="500">
  456. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak5.png" width="500">
  457.  
  458. Berikut dokumentasi dari report record DNS yang telah ditambahkan tadi.
  459.  
  460. <img src="https://manan.s3-id-jkt-1.kilatstorage.id/gambar/cak6.png" width="500">
  461.  
  462.  
  463. **Sekian dan Terima Kasih**