1. Przegląd i konfiguracja sieci. Jedną z podstaw całej konfiguracji jest zewnętrzny adres IP, który pozwoli innym użytkownikom (z zewnątrz) na dostęp do usług naszego serwera. W moim przypadku eth0 posiada zewnętrzny adres IP tzw sticky IP (adres ip przyznawany dynamicznie przez DHCP, ale nie zmienny), eth1 wewnętrzny adres IP. Edytujemy, dodajemy i konfigurujemy plik /etc/network/interfaces. lo – localhost eth0 – adres IP przypisywany automatycznie (DHCP od ISP), eth1 – adres IP wewnętrzny serwera, Jeżeli mamy stały zewnętrzny adres IP od ISP, dodajemy go w ten sam sposób jak adres do interfejsu eth1. Przypisujemy adres IP do eth1 jak poniżej.. sudo nano /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). auto lo eth0 eth1 iface lo inet loopback iface eth0 inet dhcp iface eth1 inet static address 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255 network 192.168.0.0 Restartujemy sieć.. sudo /etc/init.d/networking restart Sprawdzamy zmiany konfiguracji.. sudo ifconfig -a Wynik powinien wygladać mniej wiecej tak: user@user:~# ifconfig -a eth0 Link encap:Ethernet HWaddr 0......2:4d:cb inet addr:IP-zewnętrzny Bcast:255.255.255.255 Mask:255..... inet6 addr: fe80:........:4dcb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5016600 errors:0 dropped:0 overruns:0 frame:0 TX packets:4520209 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3183538900 (2.9 GiB) TX bytes:1092548919 (1.0 GiB) Interrupt:20 Base address:0x8400 eth1 Link encap:Ethernet HWaddr 00........3:d2 inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::.......:f3d2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1513542 errors:0 dropped:0 overruns:0 frame:0 TX packets:2078340 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:175133878 (167.0 MiB) TX bytes:1773917146 (1.6 GiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:183782 errors:0 dropped:0 overruns:0 frame:0 TX packets:183782 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:97228271 (92.7 MiB) TX bytes:97228271 (92.7 MiB) Edycja i dodanie nazwy domeny do /etc/hosts. 192.168.0.100 domena.pl sudo nano /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.0.100 domena.pl # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters sudo echo domena.pl > /etc/hostname 2. Instalacja serwera Bind DNS. Instalacja Quota’y – opcjonalnie. Instalacja serwera Bind DNS. sudo apt-get install bind9 binutils dnsutils 3. Konfiguracja serwera Bind DNS – chroot. Zatrzymanie serwera Bind DNS. sudo /etc/init.d/bind9 stop Edycja /etc/default/bind9 i konfiguracja serwera Bind DNS do pracy w chroot: (OPTIONS=”-u bind -t /var/lib/named”). sudo nano /etc/default/bind9 # run resolvconf? RESOLVCONF=yes # startup options for the server #OPTIONS="-u bind" OPTIONS="-u bind -t /var/lib/named" Tworzenie katalogów w /var/lib w których serwer Bind będzie pracował: sudo mkdir -p /var/lib/named/etc sudo mkdir /var/lib/named/dev sudo mkdir -p /var/lib/named/var/cache/bind sudo mkdir -p /var/lib/named/var/run/bind/run sudo mkdir -p /var/lib/named/var/log/ sudo touch /var/lib/named/var/log/named.log Przesunięcie katalogu z plikami konfiguracyjnymi z /etc/bind do /var/lib/named/etc: sudo mv /etc/bind /var/lib/named/etc Tworzenie symlinku (dowiązania symbolicznego) do nowego katalogu z plikami konfiguracyjnymi ze starej lokalizaji (/etc/bind). sudo ln -s /var/lib/named/etc/bind /etc/bind Tworzenie katalogów null i random i ustawienie do nich uprawnień.. sudo mknod /var/lib/named/dev/null c 1 3 sudo mknod /var/lib/named/dev/random c 1 8 sudo chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random sudo chown -R bind:bind /var/lib/named/var/* sudo chown -R bind:bind /var/lib/named/etc/bind Tworzenie pliku bind-chroot.conf i dodanie wpisu do niego. sudo nano /etc/rsyslog.d/bind-chroot.conf $AddUnixListenSocket /var/lib/named/dev/log Restart programu do logowania – rsyslog: sudo /etc/init.d/rsyslog restart Start serwera Bind DNS. sudo /etc/init.d/bind9 start Sprawdzenie logów.. tail -n 100 /var/log/syslog 4. Konfiguracja stref – Bind DNS. Edycja i konfiguracja /etc/bind/named.conf.options. sudo nano /etc/bind/named.conf.options Dodajemy opcje: allow-query, recursion, version, allow-transfer Allow-transfer {88.198.106.11, 173.244.206.26, 82.130.104.214; } zezwala na pobieranie ustawień pliku stref drugiemu serwerowi dns – będzie to serwer BuddyNS. options { directory "/var/cache/bind"; statistics-file "/var/run/named/named.stats"; pid-file "/var/run/named/named.pid"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing listen-on { IP-zewnętrzny; 192.168.0.100; # IP address of the local interface to listen 127.0.0.1; # ditto }; auth-nxdomain yes; # conform to RFC1035 allow-query { any; }; # allow anyone to issue queries recursion no; # disallow recursive queries version "[SECURED]"; allow-transfer { 88.198.106.11; # c.transfer.buddyns.com 173.244.206.26; # d.transfer.buddyns.com 82.130.104.214; # e.transfer.buddyns.com }; }; Jeżeli nasz serwer będzie za wolno odpytywał.. można dodać opcje „forwarders” { najbliższe adresy IP dns’ów np: naszego ISP }: ... forwarders { 12.34.56.78; 78.65.43.21; }; ... Edycja i dodanie plików stref do /etc/bind/named.conf.default-zones. sudo nano /etc/bind/named.conf.default-zones Tworzenie listy kontroli acl (lan_hosts) i dodanie do niej wewnętrzne adresy IP lub wszystkie adresy IP (z zakresu 192.168.0.1 – 192.168.0.255 z maską 255.255.255.0) oraz localhost (127.0.0.1): acl "lan_hosts" { 192.168.0.0/24; # network address of your local LAN 127.0.0.1; # allow loop back }; ... Tworzenie widoków klienckich (internal i external) w których zdecydujemy, jacy klienci mają prawo do używania naszego cache dns’a. Klienci w widoku internal beda mieli większe uprawnienia niż klienci w widoku external. Konfiguracja widoku klienckiego – view „internal„. Dodanie do widoku klienckiego view „internal” opcji: match-clients – dodanie listy kontroli acl (lan_hosts), recursion – pozwolenie na zapytania, notify – powiadomienia, Ustawienia stref: – strefa główna, – strefa lokalna, – strefa domen: domena.pl.internal, – strefa adresów odwrotnych : 127.in-addr.arpa, 0.168.192.in-addr.arpa. ... view "internal" { match-clients {lan_hosts; }; # match hosts in acl "lan_hosts" above allow-query { lan_hosts; }; allow-transfer { none; }; allow-notify { none; }; allow-recursion { lan_hosts; }; recursion yes; # allow recursive queries // prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "0.168.192.in-addr.arpa" { type master; file "/etc/bind/0.168.192.in-addr.arpa"; notify yes; }; zone "domena.pl" { notify yes; type master; file "/etc/bind/db.domena.pl.internal"; }; }; ... Konfiguracja widoku klienckiego – view „external„. Dodanie do widoku klienckiego view „internal„: – match-clients, – recursion, – allow-query, – allow-transfer. Ustawienia stref: – domen: domena.pl.external, – adresy odwrotne: odwrotny-adres-ip.in-addr.arpa (adres zwenętrzny). ... view "external" { // "localnets" and "any" are special reserved words // "localnets" mean any network address (as opposed to host address) configured // on the local network interfaces - "!" means to negate match-clients { !localnets; any; }; allow-query { !localnets; any; }; recursion no; allow-transfer { 88.198.106.11; 82.130.104.214; 173.244.206.26; }; zone "domena.pl" { type master; notify yes; file "/etc/bind/db.domena.pl.external; allow-query { any; }; allow-transfer { 88.198.106.11; 82.130.104.214; 173.244.206.26; }; }; zone "odwrotny-adres-ip.in-addr.arpa" { type master; notify yes; file "/etc/bind/odwrotny-adres-ip.in-addr.arpa"; allow-query { any; }; }; }; Konfiguracja poszczególnych stref: Strefa db.domena.pl.external: sudo nano /etc/bind/db.domena.pl.external $TTL 86400 ; 1 day @ 86400 IN SOA ns1.domena.pl. admin.domena.pl. ( 2007011647 86400 900 604800 86400 ) @ IN NS ns1 @ IN NS c.ns.buddyns.com. @ IN NS e.ns.buddyns.com. @ IN A zewnetrzny IP ns1 IN A zewnetrzny IP mail IN A zewnetrzny IP @ IN MX 10 mail.domena.pl. @ IN TXT "v=spf1 a mx -all" @ IN SPF "v=spf1 a mx -all" www IN CNAME @ *.domena.pl. IN A zewnętrzny IP // WILDCARD ZONE!!! Strefa odwrotny-adres-ip.in-addr.arpa. (external). sudo nano /etc/bind/odwrotny-adres-ip.in-addr.arpa $TTL 3600 odwrotny-adres-ip.in-addr.arpa. IN SOA ns1.domena.pl. admin.domena.pl. ( 2006081446 28800 604800 604800 8640 ) @ IN NS ns1.domena.pl. @ IN PTR ns1.domena.pl. @ IN A zewnętrzny IP @ IN NS c.ns.buddyns.com. @ IN NS e.ns.buddyns.com. ns1 IN A zewnętrzny IP ostatnia liczba IP IN PTR domena.pl. Konfiguracja poszczególnych stref: Strefa db.domena.pl.internal: sudo nano /etc/bind/db.domena.pl.internal $TTL 86400 ; 1 day @ 86400 IN SOA ns1.domena.pl. admin.domena.pl. ( 2007011619 86400 900 604800 86400 ) @ IN NS ns2 @ IN A 192.168.0.100 @ IN NS ns1 @ IN NS ns2 ns1 IN A zewnętrzne IP ns2 IN A 192.168.0.100 mail IN A 192.168.0.100 @ IN MX 10 mail.domena.pl. @ IN TXT "v=spf1 a mx -all" @ IN SPF "v-spf1 a mx -all" www IN CNAME @ *.domena.pl. IN A 192.168.0.100 //Strefa Wildacrd Strefa 0.168.192.in-addr.arpa. (internal). sudo nano /etc/bind/0.168.192.in-addr.arpa $TTL 3600 @ IN SOA ns2.domena.pl. admin.domena.pl. ( 2006081443 28800 604800 604800 8640 ) ns2 IN A 192.168.0.100 @ IN NS ns2.domena.pl. @ IN PTR ns2.domena.pl. 100 IN PTR domena.pl. /etc/init.d/bind9 restart Test konfiguracji: sudo named-checkzone domena.pl /etc/bind/db.domena.pl zone domena.pl/IN: loaded serial 2074511467 OK sudo named-checkzone domena.pl /etc/bind/0.168.192.in-addr.arpa zone domena.pl/IN: loaded serial 2086481644 OK sudo ping domena.pl PING domena.pl (127.0.1.1) 56(84) bytes of data. 64 bytes from domena.pl (127.0.1.1): icmp_req=1 ttl=64 time=0.120 ms 64 bytes from domena.pl (127.0.1.1): icmp_req=2 ttl=64 time=0.101 ms 64 bytes from domena.pl (127.0.1.1): icmp_req=3 ttl=64 time=0.076 ms 64 bytes from domena.pl (127.0.1.1): icmp_req=4 ttl=64 time=0.131 ms ^C --- domena.pl ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2998ms rtt min/avg/max/mdev = 0.076/0.107/0.131/0.020 ms sudo nslookup domena.pl Server: 127.0.0.1 Address: 127.0.0.1#53 Name: domena.pl Address: 192.168.0.100 sudo dig domena.pl ; <<>> DiG 9.7.3 <<>> domena.pl ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: XXXXX ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;domena.pl. IN A ;; ANSWER SECTION: domena.pl. 86400 IN A 192.168.0.100 ;; AUTHORITY SECTION: domena.pl. 86400 IN NS ns1.domena.pl. domena.pl. 86400 IN NS ns2.domena.pl. ;; ADDITIONAL SECTION: ns1.domena.pl. 86400 IN A zewnętrzny IP ns2.domena.pl. 86400 IN A 192.168.0.100 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: DATA.GODZINA.ROK ;; MSG SIZE rcvd: XXX Uwaga! Może zdarzyć się, że serwer nie bedzie autoryzował zapytań z naszej wewnetrznej sieci. Należy edytować i dodać zewnętrrzny adres IP do listy kontroli acl: sudo nano /etc/bind/named.conf.default-zones acl "lan_hosts" { 192.168.0.0/24; # network address of your local LAN 127.0.0.1; # allow loop back zewnetrzne IP # dodać jeśli jest problem z zapytaniami }; Tworzenie symlinków do statystyk, procesu i logu: sudo ln -s /var/lib/named/var/run/named.stats /var/run/named/named.stats sudo ln -s /var/lib/named/var/run/named.pid /var/run/named/named.pid sudo ln -s /var/lib/named/var/log/named.log /var/log/named.log Tworzenie pliku ze statystykami: sudo rndc stats