Memiliki server lebih dari satu dengan beberapa server saling terhubung dalam jaringan terbatas atau intranet, menjadi suatu kebutuhan untuk pengarahan domain lokal ke server-server spesifik. Bisa jadi domain seperti intranet.loc atau semacamnya digunakan untuk menavigasi antara satu server dengan server lain. Letak server yang berada di intranet tentunya memerlukan tata kelola resolve domain tersebut sehingga suatu DNS resolver service dalam intranet menjadi suatu kebutuhan. Lantas bagaiman cara mudah untuk membuat DNS resolver local untuk menerjemahkan nama domain ke alamat IP di intranet ? Tulisan ini akan membahas tutorial membuat local DNS dengan Bind9 di dalam kontainer docker untuk menjadi DNS resolver local untuk intranet anda.
Apa itu DNS ?
DNS (Domain Name System) adalah sistem yang menerjemahkan nama domain ke alamat IP, memungkinkan kita untuk mengakses situs web dengan mudah menggunakan nama alih-alih angka IP. Dalam lingkungan jaringan lokal (intranet), memiliki server DNS lokal adalah kebutuhan untuk dapat menerjemahkan nama domain lokal yang tidak ditemukan pada DNS global. Semisal DNS global dapat menerjemahkan bahwa google.com adalah 8.8.8.8, maka DNS lokal dapat menerjemahkan intranet.loc menjadi 10.104.0.2, suatu IP lokal pada intranet anda.
Langkah 1: Persiapkan Lingkungan Docker
Pastikan Docker dan Docker-Compose sudah terpasang di sistem Anda. Anda dapat mengunduh dan menginstal Docker dari situs resminya jika belum terpasang.
Langkah 2: Siapkan Folder Konfigurasi Bind9
Pada tutorial ini konfigurasi Bind9 akan disimpan di dalam folder /home/bind9.
cd /home mkdir bind9 cd bind9 mkdir config mkdir cache mkdir records
Langkah 3: Siapkan File konfigurasi Docker-Compose
Lakukan langkah berikut untuk membuat file konfigurasi docker-compose.
nano docker-compose.yml
Untuk service ini akan mengekspose port 58 pada localhost yang dipetakan pada port 53 TCP dan UDP container. Sebagai bahan pertimbangan untuk kebanyakan server port 53 sudah digunakan oleh systemd-resolver sehingga jika kita mengekspose Bind9 pada port 53 akan terjadi konflik. Untuk tutorial ini kita akan menggunakan user root dan timezone America/New_York. Untuk jaringan kita akan membuat jaringan baru yaitu bind9 dengan IP statik 172.21.0.253. Hal ini agar berikutnya memudahkan kita mendaftarkan Bind9 ke dalam DNS record.
version: "3" services: bind9: container_name: bind9 image: ubuntu/bind9:latest environment: - BIND9_USER=root - TZ=America/New_York ports: - 58:53/tcp - 58:53/udp networks: bind9_bind9: ipv4_address: 172.21.0.253 volumes: - ./config:/etc/bind - ./cache:/var/cache/bind - ./records:/var/lib/bind restart: unless-stopped
networks:
bind9:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16
gateway: 172.21.0.1
Langkah 4: Siapkan File Named.conf
Masuk ke file config, kita kemudian membuat file named.conf
cd /home/bind9/config nano named.conf
File ini bertujuan memberikan akses kepada IP range yang kita berikan izin untuk mengakses bind9. Sekaligus menambahkan file zona yang pada tutorial ini kita gunakan intranet.loc.
acl internal { 172.17.0.0/16; 172.21.0.0/16; 127.0.0.1; localhost; localnets; }; options { forwarders { 8.8.8.8; 8.8.4.4; }; allow-query { internal; }; }; zone "intranet.loc" IN { type master; file "/etc/bind/intranet.loc.zone"; };
Langkah 5: Siapkan File intranet.loc.zone
Masuk ke file config, kita kemudian membuat file named.conf
cd /home/bind9/config nano intranet.loc.zone
File ini bertujuan untuk mengatur DNS record standar meliputi, A, AAAA, NS, MX, dll.
$TTL 2d $ORIGIN intranet.loc. @ IN SOA ns1.intranet.loc admin.intranet.loc ( 20230218 ; serial number 3600 ; refresh period 600 ; retry period 604800 ; expire time 1800 ; negative TTL ) @ IN NS ns1.intranet.loc. ns1 IN A 172.21.0.253 @ IN A 172.17.0.1 test IN A 172.17.0.1
Langkah 6: Nyalakan Bind9
Untuk menyalakan Bind9 anda cukup melakukan docker-compose up -d
cd /home/bind9 docker-compose up -d
Langkah 7: Update DNS pada host server
Untuk mengupdate DNS pada host server secara instan anda dapat melakukan update pada /etc/resolv.conf
nano /etc/resolv.conf
kemudian tambahkan pada line teratas
nameserver 172.21.0.253
Langkah 8: Uji Coba pada Server Host
Terakhir anda dapat menguji cobakan dengan melakukan command nslookup
nslookup test.intranet.loc
Hasilnya akan menunjukkan 172.17.0.1
Langkah 9: Setup firewall untuk server
Misal anda menggunakan IP server lain 10.104.0.3, dan IP 10.104.0.2 pada server host eth1 network interface tambahkan ini
ufw allow from 10.104.0.3 iptables -t nat -A PREROUTING -i eth1 -p udp -d 10.104.0.2 --dport 53 -j DNAT --to-destination 10.104.0.2:58 iptables -t nat -A PREROUTING -i eth1 -p tcp -d 10.104.0.2 --dport 53 -j DNAT --to-destination 10.104.0.2:58
Langkah 10: Update DNS pada server lain
Untuk mengupdate DNS pada host server secara instan anda dapat melakukan update pada /etc/resolv.conf
nano /etc/resolv.conf
kemudian tambahkan pada line teratas IP dari Server Host Bind9
nameserver 10.104.0.2
Langkah 11: Uji Coba pada Server Lain
Terakhir anda dapat menguji cobakan dengan melakukan command nslookup
nslookup test.intranet.loc
Hasilnya akan menunjukkan 10.104.0.2. Selamat mencoba