Implement DNS (bind9) and DHCP (isc-dhcp-server) and TFTP (tftpd-hpa).
This commit is contained in:
parent
ebcfd88ef4
commit
d8366d2ca2
9 changed files with 279 additions and 1 deletions
1
roles/dns-dhcp-tftp/defaults/main.yml
Normal file
1
roles/dns-dhcp-tftp/defaults/main.yml
Normal file
|
@ -0,0 +1 @@
|
|||
name_servers: ns1.{{ ansible_domain }}
|
11
roles/dns-dhcp-tftp/handlers/main.yml
Normal file
11
roles/dns-dhcp-tftp/handlers/main.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
- name: restart isc-dhcp-server
|
||||
systemd: name=isc-dhcp-server state=restarted enabled=yes
|
||||
listen: restart isc-dhcp-server
|
||||
|
||||
- name: restart bind
|
||||
systemd: name=bind9 state=restarted enabled=yes
|
||||
listen: restart bind
|
||||
|
||||
- name: restart tftpd-hpa
|
||||
systemd: name=tftpd-hpa state=restarted enabled=yes
|
||||
listen: restart tftpd-hpa
|
84
roles/dns-dhcp-tftp/tasks/main.yml
Normal file
84
roles/dns-dhcp-tftp/tasks/main.yml
Normal file
|
@ -0,0 +1,84 @@
|
|||
---
|
||||
- name: preseed tftpd-hpa
|
||||
debconf:
|
||||
name: tftpd-hpa
|
||||
question: tftpd-hpa/directory
|
||||
value: /var/lib/tftpboot
|
||||
vtype: string
|
||||
|
||||
- name: install tftpd, dhcpd and named packages
|
||||
apt:
|
||||
name:
|
||||
- isc-dhcp-server
|
||||
- tftpd-hpa
|
||||
- bind9
|
||||
state: latest
|
||||
|
||||
## FIXME: preseeding seems to be ignored
|
||||
- name: configure TFTP root directory
|
||||
replace:
|
||||
path: /etc/default/tftpd-hpa
|
||||
regexp: '^TFTP_DIRECTORY=".*"$'
|
||||
replace: 'TFTP_DIRECTORY="/var/lib/tftpboot"'
|
||||
notify: restart tftpd-hpa
|
||||
|
||||
- name: serve dhcp on LAN interface
|
||||
replace:
|
||||
path: /etc/default/isc-dhcp-server
|
||||
regexp: '^INTERFACESv4=".*"$'
|
||||
replace: 'INTERFACESv4="{{ if_lan }}"'
|
||||
notify: restart isc-dhcp-server
|
||||
|
||||
- name: deploy config files for isc-dhcp-server
|
||||
template:
|
||||
src: dhcpd.conf.j2
|
||||
dest: /etc/dhcp/dhcpd.conf
|
||||
backup: yes
|
||||
notify: restart isc-dhcp-server
|
||||
|
||||
- name: deploy config files for bind9
|
||||
template:
|
||||
src: "{{ item }}.j2"
|
||||
dest: "/etc/bind/{{ item }}"
|
||||
loop:
|
||||
- db.intern
|
||||
- db.192.168.0
|
||||
- localzones
|
||||
notify: restart bind
|
||||
|
||||
- name: enable local bind config
|
||||
lineinfile:
|
||||
path: /etc/bind/named.conf.local
|
||||
line: 'include "/etc/bind/localzones";'
|
||||
notify: restart bind
|
||||
|
||||
- name: adapt resolv.conf
|
||||
template:
|
||||
src: resolv.conf.j2
|
||||
dest: /etc/resolv.conf
|
||||
|
||||
## stop dhclient from overwriting /etc/resolv.conf:
|
||||
- name: supersede dhcp client data
|
||||
blockinfile:
|
||||
dest: /etc/dhcp/dhclient.conf
|
||||
block: |
|
||||
supersede domain-name "{{ ansible_domain }}";
|
||||
supersede domain-search "{{ ansible_domain }}";
|
||||
supersede domain-name-servers 127.0.0.1;
|
||||
insertbefore: "#send dhcp-client-identifier.*"
|
||||
|
||||
- name: generate rndc key
|
||||
command:
|
||||
cmd: rndc-confgen -a
|
||||
creates: /etc/bind/rndc.key
|
||||
|
||||
- name: copy rndc key
|
||||
copy:
|
||||
src: /etc/bind/rndc.key
|
||||
dest: /etc/dhcp/
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0640'
|
||||
remote_src: yes
|
||||
notify: restart isc-dhcp-server
|
||||
|
11
roles/dns-dhcp-tftp/templates/db.192.168.0.j2
Normal file
11
roles/dns-dhcp-tftp/templates/db.192.168.0.j2
Normal file
|
@ -0,0 +1,11 @@
|
|||
$TTL 500
|
||||
@ IN SOA {{ ansible_fqdn }}. root.{{ ansible_domain }}. (
|
||||
1 ; Serial
|
||||
3600 ; Refresh
|
||||
1800 ; Retry
|
||||
720000 ; Expire
|
||||
6400 ) ; Negative Cache TTL
|
||||
;
|
||||
@ NS {{ ansible_fqdn }}.
|
||||
MX 10 {{ ansible_fqdn }}.
|
||||
{{ ipaddr_lan | ipaddr("address") | regex_replace("^.*\.(.+$)", "\\1") }} PTR {{ ansible_fqdn }}.
|
17
roles/dns-dhcp-tftp/templates/db.intern.j2
Normal file
17
roles/dns-dhcp-tftp/templates/db.intern.j2
Normal file
|
@ -0,0 +1,17 @@
|
|||
$TTL 500
|
||||
@ IN SOA {{ ansible_fqdn }}. root.{{ ansible_domain }}. (
|
||||
1 ; Serial
|
||||
3600 ; Refresh
|
||||
1800 ; Retry
|
||||
720000 ; Expire
|
||||
6400 ) ; Negative Cache TTL
|
||||
;
|
||||
@ NS {{ ansible_fqdn }}.
|
||||
MX 10 {{ ansible_fqdn }}.
|
||||
{{ ansible_hostname }} A {{ ipaddr_lan | ipaddr("address") }}
|
||||
_ldap._tcp SRV 100 0 389 {{ ansible_fqdn }}.
|
||||
ns1 CNAME {{ ansible_fqdn }}.
|
||||
ns2 CNAME {{ ansible_fqdn }}.
|
||||
aptcache CNAME {{ ansible_fqdn }}.
|
||||
homes CNAME {{ ansible_fqdn }}.
|
||||
ldap CNAME {{ ansible_fqdn }}.
|
137
roles/dns-dhcp-tftp/templates/dhcpd.conf.j2
Normal file
137
roles/dns-dhcp-tftp/templates/dhcpd.conf.j2
Normal file
|
@ -0,0 +1,137 @@
|
|||
# dhcpd.conf
|
||||
#
|
||||
# Sample configuration file for ISC dhcpd
|
||||
#
|
||||
|
||||
# option definitions common to all supported networks...
|
||||
option domain-name "{{ ansible_domain }}";
|
||||
option domain-name-servers {{ name_servers }};
|
||||
|
||||
default-lease-time 600;
|
||||
max-lease-time 7200;
|
||||
|
||||
# The ddns-updates-style parameter controls whether or not the server will
|
||||
# attempt to do a DNS update when a lease is confirmed. We default to the
|
||||
# behavior of the version 2 packages ('none', since DHCP v2 didn't
|
||||
# have support for DDNS.)
|
||||
#ddns-update-style none;
|
||||
use-host-decl-names on;
|
||||
|
||||
include "/etc/dhcp/rndc.key";
|
||||
|
||||
zone intern. {
|
||||
primary dns;
|
||||
key rndc-key;
|
||||
}
|
||||
|
||||
zone 0.168.192.in-addr.arpa. {
|
||||
primary dns;
|
||||
key rndc-key;
|
||||
}
|
||||
|
||||
|
||||
# If this DHCP server is the official DHCP server for the local
|
||||
# network, the authoritative directive should be uncommented.
|
||||
authoritative;
|
||||
|
||||
# Use this to send dhcp log messages to a different log file (you also
|
||||
# have to hack syslog.conf to complete the redirection).
|
||||
#log-facility local7;
|
||||
|
||||
## The tftpd server IP address, for all clients.
|
||||
next-server 192.168.0.10;
|
||||
|
||||
option arch code 93 = unsigned integer 16;
|
||||
if option arch = 00:07 {
|
||||
filename "d-i/n-a/bootnetx64.efi";
|
||||
} else {
|
||||
filename "d-i/n-a/pxelinux.0";
|
||||
}
|
||||
|
||||
subnet 192.168.0.0 netmask 255.255.255.0 {
|
||||
option routers {{ ipaddr_lan | ipaddr("address") }};
|
||||
range {{ dhcp_start }} {{ dhcp_stop }};
|
||||
}
|
||||
|
||||
|
||||
# No service will be given on this subnet, but declaring it helps the
|
||||
# DHCP server to understand the network topology.
|
||||
|
||||
#subnet 10.152.187.0 netmask 255.255.255.0 {
|
||||
#}
|
||||
|
||||
# This is a very basic subnet declaration.
|
||||
|
||||
#subnet 10.254.239.0 netmask 255.255.255.224 {
|
||||
# range 10.254.239.10 10.254.239.20;
|
||||
# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
|
||||
#}
|
||||
|
||||
# This declaration allows BOOTP clients to get dynamic addresses,
|
||||
# which we don't really recommend.
|
||||
|
||||
#subnet 10.254.239.32 netmask 255.255.255.224 {
|
||||
# range dynamic-bootp 10.254.239.40 10.254.239.60;
|
||||
# option broadcast-address 10.254.239.31;
|
||||
# option routers rtr-239-32-1.example.org;
|
||||
#}
|
||||
|
||||
# A slightly different configuration for an internal subnet.
|
||||
#subnet 10.5.5.0 netmask 255.255.255.224 {
|
||||
# range 10.5.5.26 10.5.5.30;
|
||||
# option domain-name-servers ns1.internal.example.org;
|
||||
# option domain-name "internal.example.org";
|
||||
# option routers 10.5.5.1;
|
||||
# option broadcast-address 10.5.5.31;
|
||||
# default-lease-time 600;
|
||||
# max-lease-time 7200;
|
||||
#}
|
||||
|
||||
# Hosts which require special configuration options can be listed in
|
||||
# host statements. If no address is specified, the address will be
|
||||
# allocated dynamically (if possible), but the host-specific information
|
||||
# will still come from the host declaration.
|
||||
|
||||
#host passacaglia {
|
||||
# hardware ethernet 0:0:c0:5d:bd:95;
|
||||
# filename "vmunix.passacaglia";
|
||||
# server-name "toccata.example.com";
|
||||
#}
|
||||
|
||||
# Fixed IP addresses can also be specified for hosts. These addresses
|
||||
# should not also be listed as being available for dynamic assignment.
|
||||
# Hosts for which fixed IP addresses have been specified can boot using
|
||||
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
|
||||
# be booted with DHCP, unless there is an address range on the subnet
|
||||
# to which a BOOTP client is connected which has the dynamic-bootp flag
|
||||
# set.
|
||||
#host fantasia {
|
||||
# hardware ethernet 08:00:07:26:c0:a5;
|
||||
# fixed-address fantasia.example.com;
|
||||
#}
|
||||
|
||||
# You can declare a class of clients and then do address allocation
|
||||
# based on that. The example below shows a case where all clients
|
||||
# in a certain class get addresses on the 10.17.224/24 subnet, and all
|
||||
# other clients get addresses on the 10.0.29/24 subnet.
|
||||
|
||||
#class "foo" {
|
||||
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
|
||||
#}
|
||||
|
||||
#shared-network 224-29 {
|
||||
# subnet 10.17.224.0 netmask 255.255.255.0 {
|
||||
# option routers rtr-224.example.org;
|
||||
# }
|
||||
# subnet 10.0.29.0 netmask 255.255.255.0 {
|
||||
# option routers rtr-29.example.org;
|
||||
# }
|
||||
# pool {
|
||||
# allow members of "foo";
|
||||
# range 10.17.224.10 10.17.224.250;
|
||||
# }
|
||||
# pool {
|
||||
# deny members of "foo";
|
||||
# range 10.0.29.10 10.0.29.230;
|
||||
# }
|
||||
#}
|
13
roles/dns-dhcp-tftp/templates/localzones.j2
Normal file
13
roles/dns-dhcp-tftp/templates/localzones.j2
Normal file
|
@ -0,0 +1,13 @@
|
|||
zone "0.168.192.in-addr.arpa" {
|
||||
type master;
|
||||
notify no;
|
||||
file "/etc/bind/db.192.168.0";
|
||||
journal "/var/lib/bind/db.192.168.0.jnl";
|
||||
};
|
||||
|
||||
zone "intern" {
|
||||
type master;
|
||||
notify no;
|
||||
file "/etc/bind/db.intern";
|
||||
journal "/var/lib/bind/db.intern.jnl";
|
||||
};
|
3
roles/dns-dhcp-tftp/templates/resolv.conf.j2
Normal file
3
roles/dns-dhcp-tftp/templates/resolv.conf.j2
Normal file
|
@ -0,0 +1,3 @@
|
|||
domain {{ ansible_domain }}
|
||||
search {{ ansible_domain }}.
|
||||
nameserver 127.0.0.1
|
|
@ -160,7 +160,8 @@
|
|||
insertbefore: EOF
|
||||
block: |
|
||||
menuentry 'Debian {{ di_version }} (amd64) + preseed + sambox-client.yml' {
|
||||
linux /d-i/n-pkg/images/{{ di_version }}/amd64/text/debian-installer/amd64/linux auto=true priority=critical domain={{ ansible_domain }} url=tftp://{{ ansible_hostname }} playbook=sambox-client.yml ---
|
||||
regexp --set=1:oct4 --set=2:oct5 --set=3:oct6 "\:([[:xdigit:]]+)\:([[:xdigit:]]+)\:([[:xdigit:]]+)\$" $net_default_mac
|
||||
linux /d-i/n-pkg/images/{{ di_version }}/amd64/text/debian-installer/amd64/linux auto=true priority=critical hostname=${oct4}${oct5}${oct6} domain={{ ansible_domain }} url=tftp://{{ ansible_hostname }} playbook=sambox-client.yml ---
|
||||
initrd /d-i/n-pkg/images/{{ di_version }}/amd64/text/debian-installer/amd64/initrd.gz
|
||||
}
|
||||
marker: "# {mark} ANSIBLE MANAGED BLOCK sambox-client"
|
||||
|
|
Loading…
Add table
Reference in a new issue