Po základním nastavení sítě, a uvedení do funkčního stavu, se můžeme pustit do instalace základních síťových služeb. Jelikož již máme na centrálních serverech pracující službu SSH, nemusíme potřebné operace provádět fyzicky u těchto strojů. Následující popis se bude vztahovat na služby VPN a DNS, které jsou pro naši infrastrukturu potřebné.Než začneme s instalací a konfigurací jednotlivých služeb, potřebujeme u našeho registrátora DNS domény (my-own-domain.net) a poskytovatelů internetu/hostingu upravit DNS záznamy patřící centrálním serverům. Není to nezbytně nutné, nicméně nám to ulehčí pozdější práci s infrastrukturou. Pokud používáme smyšlený název domény, který jsme neregistrovali, tento krok přeskočíme.
Nastavení DNS záznamů u poskytovatelů
Do DNS záznamů pro naši doménu my-own-domain.net vložíme (většinou přes webové rozhraní registrátora) následující řádky:
srv-01 A 192.168.1.253 srv-02 A 192.168.2.253
IP adresy opět změníme na správné, přidělené od ISP.
Změny otestujeme příkazem ping, případně dig:
[root@srv-01 ~]# ping srv-01.my-own-domain.net PING srv-01. my-own-domain.net (192.168.1.253) 56(84) bytes of data. 64 bytes from srv-01.my-own-domain.net (192.168.1.253): icmp_seq=1 ttl=52 time=22.3 ms 64 bytes from srv-01.my-own-domain.net (192.168.1.253): icmp_seq=2 ttl=52 time=16.5 ms ^C --- srv-01. my-own-domain.net ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1011ms rtt min/avg/max/mdev = 16.540/19.427/22.315/2.890 ms [root@srv-01 ~]# dig srv-01.my-own-domain.net ; <<>> DiG 9.10.2-P2 <<>> srv-01.my-own-domain.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER< ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ; srv-01.my-own-domain.net. IN A ;; ANSWER SECTION: srv-01.my-own-domain.net. 219 IN A 192.168.1.253 ;; AUTHORITY SECTION: my-own-domain.net. 45339 IN NS nejaky-registrator.cz. ;; ADDITIONAL SECTION: nejaky-registrator.cz. 281 IN A 192.168.1.254 ;; Query time: 0 msec ;; SERVER: 172.16.1.254#53(172.16.1.254) ;; WHEN: Sat Jul 18 15:38:59 CEST 2015 ;; MSG SIZE rcvd: 198
Propagování změn DNS záznamů může trvat delší dobu. To je dáno zejména nastavením parametru TTL v hlavičce SOA.
Nyní kontaktujeme poskytovatele internetu/hostingu a necháme zavést tzv. reverzní záznamy. Ty slouží k opačnému překladu, tedy z IP adresy na název. Každému poskytovateli předáme relevantní údaje platné v jeho síti.
ISP A:
192.168.1.253 PTR srv-01.my-own-domain.net.
ISP B:
192.168.2.253 PTR srv-02.my-own-domain.net.
Změny opět otestujeme příkazem ping, případně dig. U příkazu dig je ale změna. Jelikož se jedná o reverzní záznam, nemůžeme zadat IP adresu ve formátu 192.168.1.253, ale s obráceným pořadím bajtů a sufixem .in-addr.arpa. Tedy 253.1.168.192.in-addr.arpa.
[root@srv-01 ~]# ping 192.168.1.253 PING 192.168.1.253 (192.168.1.253) 56(84) bytes of data. 64 bytes from 192.168.1.253: icmp_seq=1 ttl=53 time=15.2 ms ^C --- 192.168.1.253 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 15.266/15.266/15.266/0.000 ms [root@srv-01 ~]# dig 253.1.168.192.in-addr.arpa ; <<>> DiG 9.10.2-P2 <<>> 253.1.168.192.in-addr.arpa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59427 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ; 253.1.168.192.in-addr.arpa. IN A ;; AUTHORITY SECTION: 1.168.192.in-addr.arpa. 3539 IN SOA ns.nejaky-registrator.cz. root.nejaky-registrator.cz. 2015072101 3600 3600 2592000 3600 ;; Query time: 2 msec ;; SERVER: 172.16.1.254#53(172.16.1.254) ;; WHEN: Út čec 21 09:20:50 CEST 2015 ;; MSG SIZE rcvd: 112
Nastavení VPN
Pro bezpečnou komunikaci mezi zařízeními ve všech našich interních sítích, skrze internet, použijeme technologii VPN. Je to možnost, jak směrovat IP sítě s privátním rozsahem přes sítě veřejné. Mimo jiné slouží pro zašifrování komunikace, která je pro případné odchycení nečitelná. Použití VPN je pro propojování síťové infrastruktury standardem.
Nainstalujeme balíček openvpn. Tato operace se týká VPN serveru srv-01 a klientů srv-02, gw-01 a gw-02.
Konfigurace openvpn je umístěna v adresáři /etc/openvpn/.
Nastavení VPN serveru
Nainstalujeme balíček easy-rsa. Ten slouží pro generování a údržbu SSL certifikátů. Po instalaci zkopírujeme adresář obsahující programový kód do /etc/openvpn/. Je to běžná praxe a bývá popsána v mnoha příručkách.
[root@srv-01 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/
V souboru /etc/openvpn/easy-rsa/vars upravíme následující řádky:
export KEY_COUNTRY="CZ" export KEY_PROVINCE="" export KEY_CITY="Praha" export KEY_ORG="Moje sit" export KEY_EMAIL="moje.jmeno@my-own-domain.net " export KEY_OU=""
Obsah nastavíme dle vlastního uvážení, nikterak na něm nezáleží. Následně generované certifikáty budeme používat pouze pro naši VPN.
Vytvoříme adresář pro umístění certifikátů a nastavíme bezpečná práva:
[root@srv-01 ~]# mkdir /etc/openvpn/easy-rsa/keys [root@srv-01 ~]# chmod 700 /etc/openvpn/easy-rsa/keys
Generování certifikátů pro VPN
Nejprve musíme vygenerovat certifikát tzv. certifikační autority (CA). Ten bude používán pro podepisování všech ostatních certifikátů. VPN server si při přihlášení nejprve ověří jeho platnost a následně povolí nebo zakáže připojení. Certifikát CA je ale používán i klienty. Ti si ověřují, zda server, kam se připojují, je opravdu jejich VPN server.
[root@srv-01 ~]# cd /etc/openvpn/easy-rsa [root@srv-01 easy-rsa]# . ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys [root@srv-01 easy-rsa]# ./build-ca Generating a 2048 bit RSA private key .........................................................+++ .................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CZ]: State or Province Name (full name) []: Locality Name (eg, city) [Praha]: Organization Name (eg, company) [Moje sit]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [Moje sit CA]:srv-01 Name [EasyRSA]:srv-01 Email Address [moje.jmeno@my-own-domain.net]: [root@srv-01 easy-rsa]# ls -l /etc/openvpn/easy-rsa/keys/ total 12 -rw-r--r-- 1 root root 1602 Jul 12 22:53 ca.crt -rw------- 1 root root 1704 Jul 12 22:53 ca.key -rw-r--r-- 1 root root 0 Jul 12 22:44 index.txt -rw-r--r-- 1 root root 3 Jul 12 22:44 serial
Vytvoříme parametrický soubor pro algoritmus a výměnu klíčů DIFFIE-HELLMAN (trvá to nějakou dobu):
[root@srv-01 easy-rsa]# ./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ..........+...........................................................................................+...
Vygenerujeme a podepíšeme (za pomoci certifikátu CA) SSL certifikát VPN serveru:
[root@srv-01 easy-rsa]# ./build-key-server srv-01 Generating a 2048 bit RSA private key .....................+++ ......+++ writing new private key to 'srv-01.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CZ]: State or Province Name (full name) []: Locality Name (eg, city) [Praha]: Organization Name (eg, company) [Moje sit]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [srv-01]: Name [EasyRSA]:srv-01 Email Address [moje.jmeno@my-own-domain.net]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CZ' localityName :PRINTABLE:'Praha' organizationName :PRINTABLE:'Moje sit' commonName :PRINTABLE:'srv-01' name :PRINTABLE:'srv-01' emailAddress :IA5STRING:'moje.jmeno@my-own-domain.net' Certificate is to be certified until Jul 9 21:12:40 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Nastavení služby VPN
V adresáři /etc/openvpn/ vytvoříme soubor server.conf s obsahem:
dev tun port 1194 proto udp server 10.128.1.0 255.255.255.0 route 10.11.1.0 255.255.255.0 10.128.1.1 push "route 10.11.1.0 255.255.255.0" route 10.12.1.0 255.255.255.0 10.128.1.1 push "route 10.12.1.0 255.255.255.0" topology subnet ifconfig-pool-persist /etc/openvpn/ipp.txt client-config-dir /etc/openvpn/ccd/ keepalive 10 120 comp-lzo persist-key persist-tun status /var/log/openvpn-status.log verb 3 client-to-client user nobody group nobody ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/srv-01.crt key /etc/openvpn/easy-rsa/keys/srv-01.key dh /etc/openvpn/easy-rsa/keys/dh2048.pem #crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
VPN server při startu služby vytvoří síťové rozhraní tun0 s IP adresou 10.128.1.1. Nově bude vytvořena i síť 10.128.1.0/24, která bude určena pouze pro komunikaci zařízení v rámci vytvořeného VPN tunelu. Všechna zařízení připojená do VPN budou mít na rozhraní tun0 IP adresu z tohoto rozsahu. Řádky push a route obsahují definici našich interních sítí. Při vytvoření VPN tunelu na klientech se tyto řádky využijí k nastavení statického směrování na jednotlivých zařízeních. Pokud tuto vlastnost nechceme využít, tzn., z lokality Praha nebudou moci zařízení komunikovat s lokalitou Bern a opačně, řádky vymažeme.
Vytvoříme adresář /etc/openvpn/ccd/, který bude obsahovat jména zařízení a nastavení identifikující, které interní sítě obsluhují. U těchto zařízení se tedy nebude při výstavbě VPN tunelu nastavovat statické směrování právě do těchto sítí. Pokud nám nebude směrování procházet, jeden z problémů může být právě zde.
[root@srv-01 ccd]# mkdir /etc/openvpn/ccd [root@srv-01 ccd]# cd /etc/openvpn/ccd [root@srv-01 ccd]# cat gw-01 iroute 10.11.1.0 255.255.255.0 [root@srv-01 ccd]# cat gw-02 iroute 10.12.1.0 255.255.255.0
Zakomentovaný řádek crl-verify slouží pro případ, že nám někdo odcizí zařízení obsahující klientský VPN certifikát. Pokud zatím nemáme potřebu jej využít, necháme zakomentovaný. Pokud je soubor, na který je odkazováno, prázdný, služba se nespustí. Příklad revokace certifikátu zařízení „mobil-android“:
[root@srv-01 ccd]# cd /etc/openvpn/easy-rsa [root@srv-01 ccd]# . ./vars [root@srv-01 ccd]# ./revoke-full mobil-android Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Revoking Certificate 05. Data Base Updated
Pokud je nastavení kompletní, povolíme a spustíme službu openvpn:
[root@srv-01 openvpn]# systemctl enable openvpn@server Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service. [root@srv-01 openvpn]# systemctl start openvpn@server
Ověříme, zda služba poslouchá na správném portu a protokolu (řádky port 1194 a proto udp v souboru server.conf):
[root@srv-01 openvpn]# netstat -lupn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:1194 0.0.0.0:* 5528/openvpn
Případnou změnu portu můžeme provést podobně jako v případě služby SSH.
Zkontrolujeme nastavení rozhraní a směrovací tabulku:
[root@srv-01 openvpn]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:bd:07:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.253/24 brd 192.168.1.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:febd:73f/64 scope link
valid_lft forever preferred_lft forever
4: tun0@NONE: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.128.1.1/24 brd 10.128.1.255 scope global tun0
valid_lft forever preferred_lft forever
[root@srv-01 openvpn]# ethtool tun0
Settings for tun0:
Supported ports: [ ]
Supported link modes: Not reported
Supported pause frame use: No
Supports auto-negotiation: No
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 10Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Current message level: 0xffffffa1 (-95)
drv ifup tx_err tx_queued intr tx_done rx_status pktdata hw wol 0xffff8000
Link detected: yes
[root@srv-01 openvpn]# ip route
default via 192.168.1.254 dev eno16777736
10.11.1.0/24 via 10.128.1.1 dev tun0
10.12.1.0/24 via 10.128.1.1 dev tun0
10.128.1.0/24 dev tun0 proto kernel scope link src 10.128.1.1
192.168.1.0/24 dev eno16777736 proto kernel scope link src 192.168.1.253
Poznámka: ethtool hlásí rychlost rozhraní 10 Mb/s, ale skutečná se pohybuje výše (záleží na rychlostech fyzických rozhraních, výkonů CPU a vytíženosti obou zařízení):
[root@gw-01 ~]# iperf -c 10.128.1.1 ------------------------------------------------------------ Client connecting to 10.128.1.1, TCP port 5001 TCP window size: 43.8 KByte (default) ------------------------------------------------------------ [ 3] local 10.128.1.2 port 55111 connected with 10.128.1.1 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 326 MBytes 274 Mbits/sec
Zajímá-li nás stav připojených klientských zařízení, můžeme se podívat do souboru /var/log/openvpn-status.log:
[root@srv-01 ~]# cat /var/log/openvpn-status.log OpenVPN CLIENT LIST Updated,Tue Jul 21 08:40:53 2015 Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since gw-01,172.16.1.1:32890,37842335,13563125,Tue Jul 21 06:27:48 2015 ROUTING TABLE Virtual Address,Common Name,Real Address,Last Ref 10.128.1.2,gw-01,172.16.1.1:32890,Tue Jul 21 06:33:38 2015 10.11.1.0/24,gw-01,172.16.1.1:32890,Tue Jul 21 06:27:48 2015 GLOBAL STATS Max bcast/mcast queue length,0 END
Povolení komunikace na firewallu
Jelikož služba čeká na síťovém portu 1194/udp na případná spojení klientských zařízení, musí být tento port nastaven na firewallu jako průchozí.
Do souboru /etc/nftables.conf přidáme k pravidlu povolující službu SSH další řádek:
# Sluzba VPN: max. 15 pripojeni za minutu, pokusy logovat udp dport 1194 limit rate 15/minute log prefix "VPN::ACPT: " counter accept
Firewall restartujeme:
[root@srv-01 etc]# systemctl restart nftables
Nastavení VPN klientů
Oproti VPN serveru nastavení klienta vyžaduje minimum operací skládající se z generování certifikátu, jeho umístění na klientské zařízení, úprava konfiguračních souborů a start VPN služby.
Pro stručnost budu popisovat nastavení VPN u internetové brány gw-01. Pro všechna ostatní zařízení, srv-02 a gw-02, je postup obdobný.
Generování certifikátů pro VPN
Pro každé fyzické zařízení, které se bude připojovat k VPN serveru, potřebujeme vygenerovat a podepsat jedinečný SSL certifikát. Tuto operaci provádíme opět na VPN serveru.
[root@srv-01 ~]# cd /etc/openvpn/easy-rsa [root@srv-01 easy-rsa]# . ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys [root@srv-01 easy-rsa]# ./build-key gw-01 Generating a 2048 bit RSA private key ....+++ ............+++ writing new private key to 'gw-01.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CZ]: State or Province Name (full name) []: Locality Name (eg, city) [Praha]: Organization Name (eg, company) [Moje sit]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [gw-01]: Name [EasyRSA]:gw-01 Email Address [moje.jmeno@my-own-domain.net]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CZ' localityName :PRINTABLE:'Praha' organizationName :PRINTABLE:'Moje sit' commonName :PRINTABLE:'gw-01' name :PRINTABLE:'gw-01' emailAddress :IA5STRING:'moje.jmeno@my-own-domain.net' Certificate is to be certified until Jul 9 20:55:59 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Nastavení služby VPN
Na klientském zařízení v adresáři /etc/openvpn/ vytvoříme soubor client.conf s obsahem:
client dev tun proto udp remote srv-01.my-own-domain.net 1194 resolv-retry infinite nobind persist-key persist-tun ns-cert-type server cipher bf-cbc comp-lzo verb 3 mute 20 ca ca.crt mssfix 1300 key gw-01.key cert gw-01.crt
V konfiguračním souboru změníme na řádku remote jméno serveru na náš aktuální. Můžeme použít i IP adresu. Pokud jsme na VPN serveru provedli změnu portu či protokolu, tuto operaci promítneme i zde. Upravíme názvy souborů s certifikáty, řádky key a cert. Tyto certifikáty, společně se souborem ca.crt, musíme do adresáře /etc/openvpn/ zkopírovat ze serveru ručně. U souboru /etc/openvpn/gw-01.key změníme oprávnění:
[root@gw-01 openvpn]# chmod 600 /etc/openvpn/gw-01.key
Nyní můžeme povolit a spustit službu openvpn:
[root@gw-01 openvpn]# systemctl enable openvpn@client Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@client.service to /usr/lib/systemd/system/openvpn@.service. [root@gw-01 openvpn]# systemctl start openvpn@client
Provedeme kontrolu rozhraní tun0:
[root@gw-01 ~]# ip addr show tun0
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.128.1.2/24 brd 10.128.1.255 scope global tun0
valid_lft forever preferred_lft forever
[root@gw-01 ~]# ip route
default via 172.16.1.254 dev eno16777736
10.11.1.0/24 dev eno33554976 proto kernel scope link src 10.11.1.254
10.12.1.0/24 via 10.128.1.1 dev tun0
10.128.1.0/24 dev tun0 proto kernel scope link src 10.128.1.2
172.16.1.0/24 dev eno16777736 proto kernel scope link src 172.16.1.1
Firewall
Není potřeba nastavovat. Služba VPN bude pouze iniciovat spojení k serveru.
Poznámka: Pokud budeme chtít omezit komunikaci mezi VPN a ostatními zařízeními v místní síti, vložíme příslušné pravidlo v souboru /etc/nftables.conf do řetězce forward. Např. pokud nechceme, aby byla možná komunikace ze zařízení v naší síti k portu 53/tcp serverů ve VPN, použijeme iifname tun0 tcp dport 53 counter drop.
Nastavení DNS
Jednou z nejdůležitějších služeb všech sítí je DNS, která slouží pro překlad názvů na IP adresy a opačně. Obvykle si vystačíme se standardními DNS servery v internetu nebo od poskytovatele připojení, ale my chceme mít vlastní, kam si budeme zadávat záznamy vztahující se k našim místním doménám (praha.my-own-domain.net a bern.my-own-domain.net).
Popis se nebude věnovat technologii DNSSEC. Podpora ale bude ve službách zapnuta.
Nejdříve nainstalujeme balíček bind (ISC DNS Server), který je součástí většiny distribucí linuxu. Nastavení se bude vztahovat na servery srv-01, net-01 a net-02, proto provedeme instalaci na všechny tyto servery. Na server srv-02 službu nasazovat nebudeme, pouze v případě, že bychom chtěly vytvořit „failover cluster“ (nebudu popisovat).
Zjednodušené schéma, jak komunikují jednotlivé služby v rámci DNS je na následujícím obrázku (šipky odpovídají směru dotazu, odpověď jde stejnou cestou zpět):
Dotazy (A, AAAA, SRV, TXT, …) týkající se naší domény my-own-domain.net jsou z internetu směrovány na DNS server u registrátora. Dotazy na veřejné IP adresy serverů srv-01 a srv-02, tedy 192.168.1.253 a 192.168.2.253 jsou směrovány na DNS servery hostingu.
Pokud naše doména my-own-domain.net obsahuje nějakou subdoménu (NS záznamy – např. intranet.my-own-domain.net), je dotaz přes DNS server registrátora směrován na naši DNS službu nainstalovanou na serveru srv-01. Server srv-02 nemá nainstalovanou službu DNS, a pro dotazy využívá DNS servery v internetu.
Místní servery net-01 a net-02 obsahují sofistikovanější nastavení. Služba DNS spolupracuje s DHCP a, kromě přeposílání (forward) dotazů jiným DNS serverům, slouží jako primární a zároveň sekundární DNS server. DNS služba na srv-01 obsahuje nastavení subdomén my-own-domain.net dostupných z internetu, a současně subdomén dostupných z našich interních sítí.
Zařízení v interních sítích, a internetové brány gw-01 a gw-02, jsou pouhými klienty DNS služeb a jejich dotazy jsou vyřizovány na serverech net-01, net-02, případně směrovány jinam (srv-01, internet, …).
Centrální server srv-01
Pro běžný provoz není DNS služba na serveru srv-01 příliš důležitá. Většina požadavků je vyřizována přes DNS na místních serverech net-01 a net-02. Centrální server využijeme hlavně pro zpracování požadavků přicházejících z prostředí internetu. Pokud tedy máme např. subdoménu mail.my-own-domain.net, obsahující MX záznamy a záznamy cluster serverů pro zpracování pošty, bez tohoto serveru se neobejdeme. V našem případě bude srv-01 obsahovat záznamy pro IP adresy náležící VPN a sekundární záznamy našich dvou domén praha.my-own-domain.net a bern.my-own-domain.net.
Nastavení služby DNS
Nejprve vytvoříme adresáře, kde budou umístěny zónové soubory obsahující jednotlivé záznamy. Tyto adresáře budou vlastněny uživatelem named.
[root@srv-01 ~]# mkdir /var/named/pri [root@srv-01 ~]# chown named:named /var/named/pri [root@srv-01 ~]# mkdir /var/named/sec [root@srv-01 ~]# chown named:named /var/named/sec
Stejným způsobem vytvoříme adresář pro detailní logy:
[root@srv-01 ~]# mkdir /var/log/named [root@srv-01 ~]# chown named:named /var/log/named
Hlavním konfiguračním souborem je /etc/named.conf. Ten odkazuje na zónové soubory obsahující definice jednotlivých domén/subdomén. Primární domény budeme uchovávat v adresáři /var/named/pri/, sekundární v adresáři /var/named/sec/.
acl "trusted" {
127.0.0.0/8;
::1/128;
10.11.0.0/16;
10.12.0.0/16;
10.128.1.0/24;
};
options {
directory "/var/named";
pid-file "/run/named/named.pid";
// listen-on-v6 { any; };
// IP adresu 192.168.1.253 zmenit na spravnou
listen-on { 127.0.0.1; 192.168.1.253; 10.128.1.1; };
allow-transfer { none; };
allow-update { none; };
allow-query { any; };
allow-query-cache { trusted; };
allow-recursion { trusted; };
auth-nxdomain no;
rate-limit { responses-per-second 20; window 5; };
version none;
hostname none;
server-id none;
forwarders {
// servery NIC.CZ
217.31.204.130;
193.29.206.206;
};
dnssec-validation auto;
dnssec-enable yes;
dnssec-lookaside . trust-anchor dlv.isc.org.;
sig-validity-interval 2400;
};
statistics-channels {
inet 127.0.0.1 port 8053;
};
logging {
channel default_log {
file "/var/log/named/named.log" versions 1 size 128k;
print-time yes;
print-severity yes;
print-category yes;
};
channel dnssec_log {
file "/var/log/named/dnssec.log" versions 1 size 64k;
print-time yes;
print-severity yes;
print-category yes;
};
channel queries_log {
file "/var/log/named/queries.log" versions 1 size 512k;
print-time yes;
print-severity yes;
print-category yes;
};
channel update_debug {
file "/var/log/named/updates.log" versions 1 size 64k;
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
};
category default { default_log; };
category general { default_log; };
category dnssec { dnssec_log; };
category queries { queries_log; };
category update { update_debug; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "localhost.ip6.zone";
};
zone "255.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "0.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "." IN {
type hint;
file "root.hint";
};
// zona pro emailovy system
zone "mail.my-own-domain.net" {
type master;
file "pri/mail.my-own-domain.net";
};
// zony pro VPN
zone "vpn-net.my-own-domain.net" IN {
type master;
notify yes;
// v pripade zmeny upozornit net-01 a net-02
also-notify { 10.11.1.253; 10.12.1.253; };
// povolit prenos zony na net-01 a net-02
allow-transfer { 10.11.1.253; 10.12.1.253; };
// povolit dotazy z
allow-query { 10.128.1.0/24; 127.0.0.0/16; 10.11.0.0/16; 10.12.0.0/16; };
file "pri/vpn-net.my-own-domain.net";
};
zone "1.128.10.in-addr.arpa" IN {
type master;
notify yes;
// v pripade zmeny upozornit net-01 a net-02
also-notify { 10.11.1.253; 10.12.1.253; };
// povolit prenos zony na net-01 a net-02
allow-transfer { 10.11.1.253; 10.12.1.253; };
// povolit dotazy z
allow-query { 10.128.1.0/24; 127.0.0.0/16; 10.11.0.0/16; 10.12.0.0/16; };
file "pri/1.128.10.in-addr.arpa";
};
// interni zony pro lokalitu Praha
zone "praha.my-own-domain.net" IN {
type slave;
// master server net-01
masters { 10.11.1.253; };
file "sec/praha.my-own-domain.net";
};
zone "1.11.10.in-addr.arpa" IN {
type slave;
// master server net-01
masters { 10.11.1.253; };
file "sec/1.11.10.in-addr.arpa";
};
// interni zony pro lokalitu Bern
zone "bern.my-own-domain.net" IN {
type slave;
// master server net-02
masters { 10.12.1.253; };
file "sec/bern.my-own-domain.net";
};
zone "1.12.10.in-addr.arpa" IN {
type slave;
// master server net-02
masters { 10.12.1.253; };
file "sec/1.12.10.in-addr.arpa";
};
// tato zona je pouze pro smyslenou domenu my-own-domain.net, ktera neni registrovana v internetu
zone "my-own-domain.net" IN {
type master;
notify yes;
// v pripade zmeny upozornit net-01 a net-02
also-notify { 10.11.1.253; 10.12.1.253; };
// povolit prenos zony na net-01 a net-02
allow-transfer { 10.11.1.253; 10.12.1.253; };
// povolit dotazy z
allow-query { 10.128.1.0/24; 127.0.0.0/16; 10.11.0.0/16; 10.12.0.0/16; };
file "pri/my-own-domain.net";
};
// vim:set ts=4 sw=4 et:
Veškeré IP adresy, názvy domén a názvy souborů musíme upravit podle našeho skutečného stavu. Na serveru budeme upravovat pouze zónové soubory uložené v adresáři /var/named/pri/. Zónu my-own-domain.net vytvoříme pouze v případě, že je smyšlená a nemáme ji registrovanou v internetu. V tomto případě nevytváříme ani subdoménu mail.my-own-domain.net, na kterou by nám mohla přicházet elektronická pošta.
Zónové soubory
U všech zónových souborů nastavíme vlastníka a skupinu named.
Zóna určená pouze pro zpracování elektronické pošty:
$TTL 86400
@ IN SOA mail.my-own-domain.net. root.my-own-domain.net. (
2015042001 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS srv-01.my-own-domain.net.
srv-01 A 192.168.1.253
@ MX 10 srv-01
@ A 192.168.1.253
@ TXT "v=spf1 mx ip4:192.168.1.253 include:my-own-domain.net ~all"
@ SPF "v=spf1 mx ip4:192.168.1.253 include:my-own-domain.net ~all"
Pokud budeme subdoménu mail.my-own-domain.net využívat, do DNS záznamů u našeho registrátora vložíme následující řádek:
mail NS srv-01
Zóna obsahující seznam zařízení přímo připojených do VPN. Tuto zónu je nutné vytvořit podle obsahu souboru /etc/openvpn/ipp.txt. Ten je udržován službou openvpn. Je sice možné tuto operaci provádět automaticky při připojování/odpojování klientů VPN, ale vyžaduje to napsání souboru skriptů, které budou udržovat zónu aktuální. Soubor /etc/openvpn/ipp.txt se ale prakticky nemění, a proto pro náš případ pouze několika statických zařízení je manuální úprava nejjednodušší.
$TTL 86400
@ IN SOA srv-01.vpn-net.my-own-domain.net. root.my-own-domain.net. (
2015022606 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS srv-01.vpn-net.my-own-domain.net.
@ A 10.128.1.1
srv-01 A 10.128.1.1
gw-01 A 10.128.1.2
gw-02 A 10.128.1.3
srv-02 A 10.128.1.4
; zaznamy musi souhlasit s obsahem souboru /etc/openvpn/ipp.txt
Reverzní záznamy pro zónu vpn-net.my-own-domain.net. I tato zóna musí být synchronizována se souborem /etc/openvpn/ipp.txt. Nicméně pokud tyto dvě zóny nechceme používat, nemusíme.
$ORIGIN .
$TTL 86400 ; 1 day
1.128.10.in-addr.arpa IN SOA srv-01.vpn-net.my-own-domain.net. root.my-own-domain.net. (
2015022631 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS srv-01.vpn-net.my-own-domain.net.
$ORIGIN 1.128.10.in-addr.arpa.
$TTL 3600 ; 1 hour
1 PTR srv-01.vpn-net.my-own-domain.net.
2 PTR gw-01.vpn-net.my-own-domain.net.
3 PTR gw-02.vpn-net.my-own-domain.net.
4 PTR srv-02.vpn-net.my-own-domain.net.
; zaznamy musi souhlasit s obsahem souboru /etc/openvpn/ipp.txt
Zónu my-own-domain.net vytváříme pouze, pokud je naše doména smyšlená a nemáme ji registrovanou v internetu. To se nám může hodit pro případ, že stavíme infrastrukturu v provizorních podmínkách bez připojení do celosvětové sítě, nebo nemůžeme operativně během konfigurace měnit nastavení naší domény u registrátora.
$TTL 86400
@ IN SOA srv-01.my-own-domain.net. root.my-own-domain.net. (
2015022608 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS srv-01.my-own-domain.net.
@ A 192.168.1.253
srv-01 A 192.168.1.253
srv-02 A 192.168.2.253
net-01 A 10.11.1.253
net-02 A 10.11.2.253
praha NS net-01
bern NS net-02
mail NS srv-01
; tato zona je pouze pro smyslenou domenu my-own-domain.net, ktera neni registrovana v internetu
Spuštění služby
Pře spuštěním DNS provedeme kontrolu syntaxe včetně master zónových souborů:
[root@srv-01 pri]# named-checkconf -z zone localhost/IN: loaded serial 42 zone 0.0.127.in-addr.arpa/IN: loaded serial 42 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 42 zone 255.in-addr.arpa/IN: loaded serial 42 zone 0.in-addr.arpa/IN: loaded serial 42 zone mail.my-own-domain.net/IN: loaded serial 2015042001 zone vpn-net.my-own-domain.net/IN: loaded serial 2015022606 zone 1.128.10.in-addr.arpa/IN: loaded serial 2015022631 zone my-own-domain.net/IN: loaded serial 2015022608
Pokud máme službu DNS na serveru nakonfigurovánu, můžeme ji povolit a spustit. Nevadí, pokud nebudou master či slave servery uvedené v konfiguraci v provozu. V takovém případě bude automaticky navázáno spojení při jejich startu.
[root@srv-01 pri]# systemctl enable named Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service. [root@srv-01 pri]# systemctl start named
Máme-li se startem potíže, můžeme se podívat na logy do adresáře /var/log/named/.
Test služby
Podíváme se, zda jsou otevřeny síťové porty:
[root@srv-01 pri]# netstat -lutpn | grep named tcp 0 0 10.128.1.1:53 0.0.0.0:* LISTEN 6577/named tcp 0 0 192.168.1.253:53 0.0.0.0:* LISTEN 6577/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 6577/named tcp 0 0 127.0.0.1:8053 0.0.0.0:* LISTEN 6577/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 6577/named tcp6 0 0 :::53 :::* LISTEN 6577/named tcp6 0 0 ::1:953 :::* LISTEN 6577/named udp 0 0 10.128.1.1:53 0.0.0.0:* 6577/named udp 0 0 192.168.1.253:53 0.0.0.0:* 6577/named udp 0 0 127.0.0.1:53 0.0.0.0:* 6577/named udp6 0 0 :::53 :::* 6577/named
Služba DNS využívá zejména port 53/tcp i /udp. Jak je podle výpisu vidět, je otevřeno množství portů na různých síťových rozhraních. Proto bude nutné nastavit pravidla pro firewall.
Pro otestování můžeme použít příkaz dig:
[root@srv-01 ~]# dig @127.0.0.1 vpn-net.my-own-domain.net ; <<>> DiG 9.10.2-P2 <<>> @127.0.0.1 vpn-net.my-own-domain.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9631 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;vpn-net.my-own-domain.net. IN A ;; ANSWER SECTION: vpn-net.my-own-domain.net. 86400 IN A 10.128.1.1 ;; AUTHORITY SECTION: vpn-net.my-own-domain.net. 86400 IN NS srv-01.vpn-net.my-own-domain.net. ;; ADDITIONAL SECTION: srv-01.vpn-net.my-own-domain.net. 86400 IN A 10.128.1.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Jul 21 18:27:29 CEST 2015 ;; MSG SIZE rcvd: 107
Firewall
Pro naše účely povolíme přístup na port 53/udp ze všech sítí, tzn. i z internetu, a na port 53/tcp pouze přes VPN (rozhraní tun0). Protokol TCP je nutné povolit pro zone transfer, což je vlastnost pro synchronizaci jednotlivých zón mazi master a slave servery.
Do souboru /etc/nftables.conf přidáme k pravidlům povolujícím služby SSH a VPN další řádky:
# Sluzba DNS udp dport 53 counter accept iif tun0 tcp dport 53 counter accept
Firewall restartujeme:
[root@srv-01 etc]# systemctl restart nftables
Nastavení překladu na serveru srv-01
V tuto chvíli máme službu DNS funkční, nicméně potřebujeme na serveru nastavit překlad IP adres a názvů právě touto službou.
V souboru /etc/netctl/eno16777736 upravíme řádek DNS= na DNS=('127.0.0.1') a restartujeme síťové rozhraní:
[root@srv-01 ~]# netctl restart eno16777736
Po této operaci by měl být obsah souboru /etc/resolv.conf následující:
# Generated by resolvconf domain my-own-domain.net search local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net nameserver 127.0.0.1
Místní server net-01
Abychom mohli používat překlady názvu na IP adresu, a opačně, pro zařízení v naší síti, potřebujeme nainstalovat DNS službu i na naše místní servery net-01 a net-02. Nastavení je podobné jako v případě srv-01.
Nastavení služby DNS
Vytvoříme adresáře pro zónové soubory a logy a nastavíme oprávnění:
[root@net-01 ~]# mkdir /var/named/pri [root@net-01 ~]# chown named:named /var/named/pri [root@net-01 ~]# mkdir /var/named/sec [root@net-01 ~]# chown named:named /var/named/sec [root@net-01 ~]# mkdir /var/log/named [root@net-01 ~]# chown named:named /var/log/named
Upravíme konfigurační soubor /etc/named.conf :
acl "trusted" {
127.0.0.0/8;
::1/128;
10.11.0.0/16;
10.12.0.0/16;
10.128.1.0/24;
};
options {
directory "/var/named";
pid-file "/run/named/named.pid";
// listen-on-v6 { any; };
listen-on { 127.0.0.1; 10.11.1.253; };
allow-transfer { none; };
allow-update { none; };
allow-query { trusted; };
allow-query-cache { trusted; };
allow-recursion { trusted; };
auth-nxdomain no;
rate-limit { responses-per-second 20; window 5; };
version none;
hostname none;
server-id none;
forwarders {
// servery NIC.CZ
217.31.204.130;
193.29.206.206;
};
dnssec-validation auto;
dnssec-enable yes;
dnssec-lookaside . trust-anchor dlv.isc.org.;
sig-validity-interval 2400;
};
logging {
channel default_log {
file "/var/log/named/named.log" versions 1 size 128k;
print-time yes;
print-severity yes;
print-category yes;
};
channel dnssec_log {
file "/var/log/named/dnssec.log" versions 1 size 64k;
print-time yes;
print-severity yes;
print-category yes;
};
channel queries_log {
file "/var/log/named/queries.log" versions 1 size 512k;
print-time yes;
print-severity yes;
print-category yes;
};
channel update_debug {
file "/var/log/named/updates.log" versions 1 size 64k;
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
};
category default { default_log; };
category general { default_log; };
category dnssec { dnssec_log; };
category queries { queries_log; };
category update { update_debug; };
};
statistics-channels {
inet 127.0.0.1 port 8053;
};
include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1/32; ::1/128; } keys { "rndc-key"; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "localhost.ip6.zone";
};
zone "255.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "0.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "." IN {
type hint;
file "root.hint";
};
zone "vpn-net.my-own-domain.net" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/vpn-net.my-own-domain.net";
};
zone "1.128.10.in-addr.arpa" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/1.128.10.in-addr.arpa";
};
zone "praha.my-own-domain.net" IN {
type master;
notify yes;
// v pripade zmeny upozornit srv-01 a net-02
also-notify { 10.128.1.1; 10.12.1.253; };
// povolit prenos zony na srv-01 a net-02
allow-transfer { 10.128.1.1; 10.12.1.253; };
allow-update { key "rndc-key"; };
file "pri/praha.my-own-domain.net";
};
zone "1.11.10.in-addr.arpa" IN {
type master;
notify yes;
// v pripade zmeny upozornit srv-01 a net-02
also-notify { 10.128.1.1; 10.12.1.253; };
// povolit prenos zony na srv-01 a net-02
allow-transfer { 10.128.1.1; 10.12.1.253; };
allow-update { key "rndc-key"; };
file "pri/1.11.10.in-addr.arpa";
};
zone "dhcp.praha.my-own-domain.net" {
type master;
allow-update { key "rndc-key"; };
file "pri/dhcp.praha.my-own-domain.net";
};
zone "bern.my-own-domain.net" IN {
type slave;
// master server net-02
masters { 10.12.1.253; };
file "sec/bern.my-own-domain.net";
};
zone "1.12.10.in-addr.arpa" IN {
type slave;
// master server net-02
masters { 10.12.1.253; };
file "sec/1.12.10.in-addr.arpa";
};
zone "local.my-own-domain.net" {
type master;
file "pri/local.my-own-domain.net";
};
// tato zona je pouze pro smyslenou domenu my-own-domain.net, ktera neni registrovana v internetu
// pokud mame domenu registrovanu, nepouzijeme
zone "my-own-domain.net" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/my-own-domain.net";
};
// vim:set ts=4 sw=4 et:
Nastavení není tak restriktivní jako v případě srv-01. Navíc je možné některé zóny za běhu měnit jinými službami, např. DHCP (o této službě bude následující článek).
Zónové soubory
U všech zónových souborů nastavíme vlastníka a skupinu named.
Zóna obsahující místní služby a další servery umístěné na lokalitě Praha. V domácnosti zde mohou být uvedeny chytré spotřebiče, kterým přidělíme pevnou IP adresu:
$TTL 86400
@ IN SOA net-01.praha.my-own-domain.net. root.my-own-domain.net. (
2015022606 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-01.praha.my-own-domain.net.
@ A 10.11.1.253
net-01 A 10.11.1.253
gw-01 A 10.11.1.254
Reverzní záznamy pro celou interní síť na lokalitě Praha:
$ORIGIN .
$TTL 86400 ; 1 day
1.11.10.in-addr.arpa IN SOA net-01.praha.my-own-domain.net. root.my-own-domain.net. (
2015022631 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-01.praha.my-own-domain.net.
$ORIGIN 1.11.10.in-addr.arpa.
$TTL 3600 ; 1 hour
253 PTR net-01.praha.my-own-domain.net.
254 PTR gw-01.praha.my-own-domain.net.
Zóna určená pouze pro „dočasná“ zařízení, která se připojují do naší sítě. Tato zařízení nebudou mít pevnou IP adresu, ale bude přidělována DHCP serverem (DHCP server může přidělovat i pevné IP adresy na základě MAC adresy fyzického síťového rozhraní, ty ale budeme umisťovat do zóny praha.my-own-domain.net):
$ORIGIN .
$TTL 86400 ; 1 day
dhcp.praha.my-own-domain.net IN SOA net-01.praha.my-own-domain.net. root.my-own-domain.net. (
2009043191 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-01.praha.my-own-domain.net.
Pokud chceme, můžeme vytvořit speciální zónu, kam budeme umisťovat služby, které budou umístěné na všech lokalitách. To je vhodné pro případ, že se připojujeme stejným chytrým telefonem nebo notebookem v obou lokalitách. Takovou zónu/subdoménu jsem pojmenoval <code>local.my-own-domain.net</code>. V nastavení příslušného klientského zařízení nastavíme například pro přístup k proxy adresu <code>http://local.my-own-domain.net:3128</code> a již nezáleží, zda se připojujeme na lokalitě Praha nebo Bern.
$TTL 86400
@ IN SOA net-srv.local.my-own-domain.net. root.my-own-domain.net. (
2015022608 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-01.praha.my-own-domain.net.
@ A 10.11.1.253
net-srv A 10.11.1.253
gateway A 10.11.1.254
Nastavení vlastního zónového souboru je ale na lokalitě závislé.
Spuštění služby
Pře spuštěním DNS provedeme kontrolu syntaxe včetně master zónových souborů:
[root@net-01 pri]# named-checkconf -z zone localhost/IN: loaded serial 42 zone 0.0.127.in-addr.arpa/IN: loaded serial 42 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 42 zone 255.in-addr.arpa/IN: loaded serial 42 zone 0.in-addr.arpa/IN: loaded serial 42 zone praha.my-own-domain.net/IN: loaded serial 2015022606 zone 1.11.10.in-addr.arpa/IN: loaded serial 2015022631 zone dhcp.praha.my-own-domain.net/IN: loaded serial 2009043191
Pokud máme službu DNS na serveru nakonfigurovánu, můžeme ji povolit a spustit.
[root@net-01 pri]# systemctl enable named Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service. [root@net-01 pri]# systemctl start named
Máme-li se startem potíže, můžeme se podívat na logy do adresáře /var/log/named/.
Test služby
Podíváme se, zda jsou otevřeny síťové porty:
[root@net-01 pri]# netstat -lutpn | grep named tcp 0 0 10.11.1.253:53 0.0.0.0:* LISTEN 430/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 430/named tcp 0 0 127.0.0.1:8053 0.0.0.0:* LISTEN 430/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 430/named tcp6 0 0 :::53 :::* LISTEN 430/named udp 0 0 10.11.1.253:53 0.0.0.0:* 430/named udp 0 0 127.0.0.1:53 0.0.0.0:* 430/named udp6 0 0 :::53 :::* 430/named
Služba DNS opět využívá zejména port 53/tcp i /udp.
Pro otestování můžeme použít příkaz dig:
[root@net-01 pri]# dig @127.0.0.1 praha.my-own-domain.net ; <<>> DiG 9.10.2-P2 <<>> @127.0.0.1 praha.my-own-domain.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28779 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;praha.my-own-domain.net. IN A ;; ANSWER SECTION: praha.my-own-domain.net. 86400 IN A 10.11.1.253 ;; AUTHORITY SECTION: praha.my-own-domain.net. 86400 IN NS net-01.praha.my-own-domain.net. ;; ADDITIONAL SECTION: net-01.praha.my-own-domain.net. 86400 IN A 10.11.1.253 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Jul 22 14:34:12 CEST 2015 ;; MSG SIZE rcvd: 105
Firewall
Nebude nastaven.
Nastavení překladu na serveru net-01
V souboru /etc/netctl/eno16777736 upravíme řádek DNS= na DNS=('127.0.0.1') a restartujeme síťové rozhraní:
[root@net-01 ~]# netctl restart eno16777736
Po této operaci by měl být obsah souboru /etc/resolv.conf následující:
# Generated by resolvconf domain praha.my-own-domain.net search local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net nameserver 127.0.0.1
Nastavení překladu na serveru gw-01
Na tuto změnu si musíme dát pozor, jelikož se bude provádět na obou síťových rozhraních.
Rozhraní do internetu:
V souboru /etc/netctl/eno16777736 odstraníme všechny řádky s názvem DNS. Zůstane nám pouze:
Description='Sitove rozhrani eno16777736 pro pristup do internetu' Interface=eno16777736 Connection=ethernet IP=static Address=172.16.1.1/24' Gateway='172.16.1.254'
Rozhraní do místní/interní sítě:
V souboru /etc/netctl/eno33554976 přidáme nastavení pro překlad DNS:
Description='Sitove rozhrani eno33554976 pro pristup do interni site'
Interface=eno33554976
Connection=ethernet
IP=static
Address='10.11.1.254/24'
DNS=('10.11.1.253')
DNSDomain='praha.my-own-domain.net'
DNSSearch='local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net'
a restartujeme síťové rozhraní:
[root@gw-01 ~]# netctl restart eno16777736 [root@gw-01 ~]# netctl restart eno33554976
Po této operaci by měl být obsah souboru /etc/resolv.conf následující:
# Generated by resolvconf domain praha.my-own-domain.net search local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net nameserver 10.11.1.253
Místní server net-02
Nastavení je podobné jako v případě net-01. Abych však předešel případným nejasnostem, uvedu jej celé.
Nastavení služby DNS
Vytvoříme adresáře pro zónové soubory a logy a nastavíme oprávnění:
[root@net-02 ~]# mkdir /var/named/pri [root@net-02 ~]# chown named:named /var/named/pri [root@net-02 ~]# mkdir /var/named/sec [root@net-02 ~]# chown named:named /var/named/sec [root@net-02 ~]# mkdir /var/log/named [root@net-02 ~]# chown named:named /var/log/named
Upravíme konfigurační soubor /etc/named.conf :
acl "trusted" {
127.0.0.0/8;
::1/128;
10.11.0.0/16;
10.12.0.0/16;
10.128.1.0/24;
};
options {
directory "/var/named";
pid-file "/run/named/named.pid";
// listen-on-v6 { any; };
listen-on { 127.0.0.1; 10.12.1.253; };
allow-transfer { none; };
allow-update { none; };
allow-query { trusted; };
allow-query-cache { trusted; };
allow-recursion { trusted; };
auth-nxdomain no;
rate-limit { responses-per-second 20; window 5; };
version none;
hostname none;
server-id none;
forwarders {
// servery NIC.CZ
217.31.204.130;
193.29.206.206;
};
dnssec-validation auto;
dnssec-enable yes;
dnssec-lookaside . trust-anchor dlv.isc.org.;
sig-validity-interval 2400;
};
logging {
channel default_log {
file "/var/log/named/named.log" versions 1 size 128k;
print-time yes;
print-severity yes;
print-category yes;
};
channel dnssec_log {
file "/var/log/named/dnssec.log" versions 1 size 64k;
print-time yes;
print-severity yes;
print-category yes;
};
channel queries_log {
file "/var/log/named/queries.log" versions 1 size 512k;
print-time yes;
print-severity yes;
print-category yes;
};
channel update_debug {
file "/var/log/named/updates.log" versions 1 size 64k;
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
};
category default { default_log; };
category general { default_log; };
category dnssec { dnssec_log; };
category queries { queries_log; };
category update { update_debug; };
};
statistics-channels {
inet 127.0.0.1 port 8053;
};
include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1/32; ::1/128; } keys { "rndc-key"; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "localhost.ip6.zone";
};
zone "255.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "0.in-addr.arpa" IN {
type master;
file "empty.zone";
};
zone "." IN {
type hint;
file "root.hint";
};
zone "vpn-net.my-own-domain.net" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/vpn-net.my-own-domain.net";
};
zone "1.128.10.in-addr.arpa" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/1.128.10.in-addr.arpa";
};
zone "bern.my-own-domain.net" IN {
type master;
notify yes;
// v pripade zmeny upozornit srv-01 a net-01
also-notify { 10.128.1.1; 10.11.1.253; };
// povolit prenos zony na srv-01 a net-01
allow-transfer { 10.128.1.1; 10.11.1.253; };
allow-update { key "rndc-key"; };
file "pri/bern.my-own-domain.net";
};
zone "1.12.10.in-addr.arpa" IN {
type master;
notify yes;
// v pripade zmeny upozornit srv-01 a net-01
also-notify { 10.128.1.1; 10.11.1.253; };
// povolit prenos zony na srv-01 a net-01
allow-transfer { 10.128.1.1; 10.11.1.253; };
allow-update { key "rndc-key"; };
file "pri/1.12.10.in-addr.arpa";
};
zone "dhcp.bern.my-own-domain.net" {
type master;
// v pripade zmeny upozornit srv-01 a net-01
//also-notify { 10.128.1.1; 10.11.1.253; };
// povolit prenos zony na srv-01 a net-01
//allow-transfer { 10.128.1.1; 10.11.1.253; };
allow-update { key "rndc-key"; };
file "pri/dhcp.bern.my-own-domain.net";
};
zone "praha.my-own-domain.net" IN {
type slave;
// master server net-01
masters { 10.11.1.253; };
file "sec/praha.my-own-domain.net";
};
zone "1.11.10.in-addr.arpa" IN {
type slave;
// master server net-01
masters { 10.11.1.253; };
file "sec/1.11.10.in-addr.arpa";
};
zone "local.my-own-domain.net" {
type master;
file "pri/local.my-own-domain.net";
};
// tato zona je pouze pro smyslenou domenu my-own-domain.net, ktera neni registrovana v internetu
zone "my-own-domain.net" IN {
type slave;
// master server srv-01
masters { 10.128.1.1; };
file "sec/my-own-domain.net";
};
// vim:set ts=4 sw=4 et:
Zónové soubory
U všech zónových souborů nastavíme vlastníka a skupinu named.
Zóna obsahující místní služby a další servery umístěné na lokalitě Bern:
$TTL 86400
@ IN SOA net-02.bern.my-own-domain.net. root.my-own-domain.net. (
2015022606 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-02.bern.my-own-domain.net.
@ A 10.12.1.253
net-02 A 10.12.1.253
gw-02 A 10.12.1.254
Reverzní záznamy pro celou interní síť na lokalitě Bern:
$ORIGIN .
$TTL 86400 ; 1 day
1.12.10.in-addr.arpa IN SOA net-02.bern.my-own-domain.net. root.my-own-domain.net. (
2015022631 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-02.bern.my-own-domain.net.
$ORIGIN 1.12.10.in-addr.arpa.
$TTL 3600 ; 1 hour
253 PTR net-02.bern.my-own-domain.net.
254 PTR gw-02.bern.my-own-domain.net.
Zóna určená pouze pro „dočasná“ zařízení, která se připojují do naší sítě:
$ORIGIN .
$TTL 86400 ; 1 day
dhcp.bern.my-own-domain.net IN SOA net-02.bern.my-own-domain.net. root.my-own-domain.net. (
2009043191 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-02.bern.my-own-domain.net.
Speciální zóna <code>local.my-own-domain.net</code>:
$TTL 86400
@ IN SOA net-srv.local.my-own-domain.net. root.my-own-domain.net. (
2015022608 ; serial
86400 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS net-02.bern.my-own-domain.net.
@ A 10.12.1.253
net-srv A 10.12.1.253
gateway A 10.12.1.254
Spuštění služby
Pře spuštěním DNS provedeme kontrolu syntaxe včetně master zónových souborů:
[root@net-02 var]# named-checkconf -z zone localhost/IN: loaded serial 42 zone 0.0.127.in-addr.arpa/IN: loaded serial 42 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 42 zone 255.in-addr.arpa/IN: loaded serial 42 zone 0.in-addr.arpa/IN: loaded serial 42 zone bern.my-own-domain.net/IN: loaded serial 2015022606 zone 1.12.10.in-addr.arpa/IN: loaded serial 2015022631 zone dhcp.bern.my-own-domain.net/IN: loaded serial 2009043191
Pokud máme službu DNS na serveru nakonfigurovánu, můžeme ji povolit a spustit.
[root@net-02 pri]# systemctl enable named Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service. [root@net-02 pri]# systemctl start named
Máme-li se startem potíže, můžeme se podívat na logy do adresáře /var/log/named/.
Test služby
Podíváme se, zda jsou otevřeny síťové porty:
[root@net-02 pri]# netstat -lutpn | grep named tcp 0 0 10.12.1.253:53 0.0.0.0:* LISTEN 329/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 329/named tcp 0 0 127.0.0.1:8053 0.0.0.0:* LISTEN 329/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 329/named tcp6 0 0 :::53 :::* LISTEN 329/named tcp6 0 0 ::1:953 :::* LISTEN 329/named udp 0 0 10.12.1.253:53 0.0.0.0:* 329/named udp 0 0 127.0.0.1:53 0.0.0.0:* 329/named udp6 0 0 :::53 :::* 329/named
Služba DNS opět využívá zejména port 53/tcp i /udp.
Pro otestování můžeme použít příkaz dig:
[root@net-02 pri]# dig @127.0.0.1 bern.my-own-domain.net ; <<>> DiG 9.10.2-P2 <<>> @127.0.0.1 bern.my-own-domain.net ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16284 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;bern.my-own-domain.net. IN A ;; ANSWER SECTION: bern.my-own-domain.net. 86400 IN A 10.12.1.253 ;; AUTHORITY SECTION: bern.my-own-domain.net. 86400 IN NS net-02.bern.my-own-domain.net. ;; ADDITIONAL SECTION: net-02.bern.my-own-domain.net. 86400 IN A 10.12.1.253 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Jul 22 17:04:24 CEST 2015 ;; MSG SIZE rcvd: 104
Firewall
Nebude nastaven.
Nastavení překladu na serveru net-02
V souboru /etc/netctl/eno16777736 upravíme řádek DNS= na DNS=('127.0.0.1') a restartujeme síťové rozhraní:
[root@net-02 ~]# netctl restart eno16777736
Po této operaci by měl být obsah souboru /etc/resolv.conf následující:
# Generated by resolvconf domain bern.my-own-domain.net search local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net nameserver 127.0.0.1
Nastavení překladu na serveru gw-02
Na tuto změnu si musíme dát opět pozor, jelikož se bude provádět na obou síťových rozhraních.
Rozhraní do internetu:
V souboru /etc/netctl/eno16777736 odstraníme všechny řádky s názvem DNS. Zůstane nám pouze:
Description='Sitove rozhrani eno16777736 pro pristup do internetu' Interface=eno16777736 Connection=ethernet IP=static Address=172.16.2.1/24' Gateway='172.16.2.254'
Rozhraní do místní/interní sítě:
V souboru /etc/netctl/eno33554976 přidáme nastavení pro překlad DNS:
Description='Sitove rozhrani eno33554976 pro pristup do interni site'
Interface=eno33554976
Connection=ethernet
IP=static
Address='10.12.1.254/24'
DNS=('10.12.1.253')
DNSDomain='bern.my-own-domain.net'
DNSSearch='local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net'
a restartujeme síťové rozhraní:
[root@gw-02 ~]# netctl restart eno16777736 [root@gw-02 ~]# netctl restart eno33554976
Po této operaci by měl být obsah souboru /etc/resolv.conf následující:
# Generated by resolvconf domain praha.my-own-domain.net search local.my-own-domain.net my-own-domain.net praha.my-own-domain.net bern.my-own-domain.net nameserver 10.12.1.253
Jednoduchý test VPN a DNS
Zkusíme v našich sítích a na internetu přeložit některé názvy na IP adresy. Pokud vše pracuje, otestujeme latence a přístup na internet.
[root@net-01 netctl]# nslookup 10.128.1.1 Server: 127.0.0.1 Address: 127.0.0.1#53 1.1.128.10.in-addr.arpa name = srv-01.vpn-net.my-own-domain.net. [root@net-01 netctl]# nslookup 10.128.1.2 Server: 127.0.0.1 Address: 127.0.0.1#53 2.1.128.10.in-addr.arpa name = gw-01.vpn-net.my-own-domain.net. [root@net-01 netctl]# nslookup srv-01.vpn-net.my-own-domain.net Server: 127.0.0.1 Address: 127.0.0.1#53 Name: srv-01.vpn-net.my-own-domain.net Address: 10.128.1.1 [root@net-01 netctl]# nslookup praha.my-own-domain.net Server: 127.0.0.1 Address: 127.0.0.1#53 Name: praha.my-own-domain.net Address: 10.11.1.253 [root@net-01 netctl]# nslookup bern.my-own-domain.net Server: 127.0.0.1 Address: 127.0.0.1#53 Name: bern.my-own-domain.net Address: 10.12.1.253 [root@net-01 netctl]# nslookup 10.12.1.253 Server: 127.0.0.1 Address: 127.0.0.1#53 253.1.12.10.in-addr.arpa name = net-02.bern.my-own-domain.net. [root@net-01 netctl]# nslookup srv-01 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: srv-01.my-own-domain.net Address: 192.168.1.253 [root@net-01 netctl]# nslookup gw-02 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: gw-02.bern.my-own-domain.net Address: 10.12.1.254 [root@net-01 netctl]# ping srv-01 PING srv-01.my-own-domain.net (192.168.1.253) 56(84) bytes of data. 64 bytes from 192.168.1.253: icmp_seq=1 ttl=62 time=0.812 ms ^C --- srv-01.my-own-domain.net ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.812/0.812/0.812/0.000 ms [root@net-01 netctl]# ping gw-01.vpn-net.my-own-domain.net PING gw-01.vpn-net.my-own-domain.net (10.128.1.2) 56(84) bytes of data. 64 bytes from gw-01.vpn-net.my-own-domain.net (10.128.1.2): icmp_seq=1 ttl=64 time=0.402 ms 64 bytes from gw-01.vpn-net.my-own-domain.net (10.128.1.2): icmp_seq=2 ttl=64 time=0.322 ms [root@net-01 netctl]# traceroute net-02 traceroute to net-02 (10.12.1.253), 30 hops max, 60 byte packets 1 gw-01.praha.my-own-domain.net (10.11.1.254) 0.309 ms 0.299 ms 0.232 ms 2 gw-02.vpn-net.my-own-domain.net (10.128.1.3) 6.545 ms 6.482 ms 6.741 ms 3 net-02.bern.my-own-domain.net (10.12.1.253) 6.682 ms 7.277 ms 7.225 ms [root@net-01 netctl]# nslookup google.com Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: google.com Address: 173.194.116.228 Name: google.com Address: 173.194.116.230 Name: google.com Address: 173.194.116.231 Name: google.com Address: 173.194.116.233 [root@net-01 netctl]# ping google.com PING google.com (173.194.116.233) 56(84) bytes of data. 64 bytes from prg02s11-in-f9.1e100.net (173.194.116.233): icmp_seq=1 ttl=54 time=24.3 ms 64 bytes from prg02s11-in-f9.1e100.net (173.194.116.233): icmp_seq=2 ttl=54 time=36.9 ms [root@net-01 netctl]# traceroute google.com traceroute to google.com (173.194.116.233), 30 hops max, 60 byte packets 1 gw-01.praha.my-own-domain.net (10.11.1.254) 0.229 ms 0.194 ms 0.169 ms 2 172.16.1.254 (172.16.1.254) 1.093 ms 1.031 ms 0.971 ms 3 * * * 4 192.168.18.1 (192.168.24.1) 7.764 ms 7.860 ms 7.806 ms 5 192.168.0.1 (192.168.0.1) 7.814 ms 7.758 ms 14.566 ms 6 * * * 7 213.46.172.210 (213.46.172.210) 43.422 ms 45.386 ms 45.402 ms 8 209.85.246.93 (209.85.246.93) 43.169 ms 30.712 ms 29.304 ms 9 prg02s11-in-f9.1e100.net (173.194.116.233) 37.078 ms 30.072 ms 28.959 ms [root@net-01 ~]# pacman -Syu :: Synchronizing package databases... core 121.8 KiB 361K/s 00:00 [########################################] 100% extra 1745.6 KiB 102K/s 00:17 [########################################] 100% community 2.7 MiB 338K/s 00:08 [########################################] 100% :: Starting full system upgrade... resolving dependencies... looking for conflicting packages... Packages (3) libevent-2.0.22-1 links-2.10-1 postfix-3.0.2-1 Total Download Size: 4.29 MiB Total Installed Size: 10.24 MiB Net Upgrade Size: 2.24 MiB :: Proceed with installation? [Y/n]
Následovat bude…
Tato část se věnovala zprovoznění VPN a DNS.
Do naší sítě můžeme připojovat zařízení s pevnými IP adresami, které vybereme z rozsahu 10.11.1.1-10.11.1.252 na lokalitě Praha a 10.12.1.1-10.12.1.252 na lokalitě Bern. Brány použijeme 10.11.1.254, 10.12.1.254 a DNS 10.11.1.253, 10.12.1.253. Síťové masky jsou ve všech sítích 255.255.255.0 (/24).
Příště nainstalujeme službu DHCP, která nám umožní přidělovat IP adresy nově připojeným zařízením automaticky, proxy server a webový server.

Pingback: Jak jsem nasadil IPv6 | brichacek.net
Pingback: Zajimave cteni | Blog J.Z. na NAS4y.NET
Pingback: Arch Linux on Orange Pi Zero | brichacek.net