Add an authoritative hidden master
This runs bind as a hidden master nameserver so we can do all the keysigning there, and then use nsd (or bind) as public authoritative slaves. Change-Id: Ifb2ad109103051fa13c4af1c7be1ca0ae98bb1a1
This commit is contained in:
parent
832eb323a6
commit
4ccf277850
@ -23,7 +23,16 @@ At a Glance
|
|||||||
Adding a Zone
|
Adding a Zone
|
||||||
=============
|
=============
|
||||||
|
|
||||||
To add a new zone, add an entry to :file:`manifests/site.pp`, and
|
To add a new zone, add an entry to :file:`manifests/site.pp`,
|
||||||
|
:file:`modules/openstack_project/manifests/master_nameserver.pp` and
|
||||||
create a new git repository to hold the contents of the zone.
|
create a new git repository to hold the contents of the zone.
|
||||||
|
|
||||||
|
Run::
|
||||||
|
|
||||||
|
dnssec-keygen -a RSASHA256 -b 2048 -3 example.net
|
||||||
|
dnssec-keygen -a RSASHA256 -b 2048 -3 -fk example.net
|
||||||
|
|
||||||
|
And add the resulting files to the `dnssec_keys` key in the
|
||||||
|
`group/adns.yaml` private hiera file on puppetmaster.
|
||||||
|
|
||||||
.. note:: This section will be expanded.
|
.. note:: This section will be expanded.
|
||||||
|
@ -825,6 +825,27 @@ node /^status\d*\.openstack\.org$/ {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This is a hidden authoritative master nameserver, not publicly
|
||||||
|
# accessible.
|
||||||
|
# Node-OS: xenial
|
||||||
|
node /^adns\d+\.openstack\.org$/ {
|
||||||
|
$group = 'adns'
|
||||||
|
|
||||||
|
class { 'openstack_project::server':
|
||||||
|
sysadmins => hiera('sysadmins', []),
|
||||||
|
iptables_allowed_hosts => [
|
||||||
|
{protocol => 'tcp', port => '53', hostname => 'ns1.openstack.org'},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class { 'openstack_project::master_nameserver':
|
||||||
|
tsig_key => hiera('tsig_key', {}),
|
||||||
|
dnssec_keys => hiera_hash('dnssec_keys', {}),
|
||||||
|
notifies => dns_a('ns1.openstack.org'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# These are publicly accessible authoritative slave nameservers.
|
||||||
# Node-OS: xenial
|
# Node-OS: xenial
|
||||||
node /^ns\d+\.openstack\.org$/ {
|
node /^ns\d+\.openstack\.org$/ {
|
||||||
$group = 'ns'
|
$group = 'ns'
|
||||||
|
@ -80,6 +80,7 @@ SOURCE_MODULES["https://github.com/rafaelfelix/puppet-pear"]="1.0.3"
|
|||||||
SOURCE_MODULES["https://github.com/saz/puppet-memcached"]="v2.6.0"
|
SOURCE_MODULES["https://github.com/saz/puppet-memcached"]="v2.6.0"
|
||||||
SOURCE_MODULES["https://github.com/saz/puppet-timezone"]="v3.3.0"
|
SOURCE_MODULES["https://github.com/saz/puppet-timezone"]="v3.3.0"
|
||||||
SOURCE_MODULES["https://github.com/stankevich/puppet-python"]="1.9.4"
|
SOURCE_MODULES["https://github.com/stankevich/puppet-python"]="1.9.4"
|
||||||
|
SOURCE_MODULES["https://github.com/theforeman/puppet-dns"]="4.1.0"
|
||||||
SOURCE_MODULES["https://github.com/vamsee/puppet-solr"]="0.0.8"
|
SOURCE_MODULES["https://github.com/vamsee/puppet-solr"]="0.0.8"
|
||||||
SOURCE_MODULES["https://github.com/voxpupuli/puppet-alternatives"]="0.3.0"
|
SOURCE_MODULES["https://github.com/voxpupuli/puppet-alternatives"]="0.3.0"
|
||||||
SOURCE_MODULES["https://github.com/voxpupuli/puppet-archive"]="v0.5.1"
|
SOURCE_MODULES["https://github.com/voxpupuli/puppet-archive"]="v0.5.1"
|
||||||
|
@ -22,3 +22,5 @@ zuul-executor ~ze\d+\.openstack\.org
|
|||||||
grafana ~grafana\d*\.openstack\.org
|
grafana ~grafana\d*\.openstack\.org
|
||||||
status ~status\d*\.openstack\.org
|
status ~status\d*\.openstack\.org
|
||||||
paste ~paste\d*\.openstack\.org
|
paste ~paste\d*\.openstack\.org
|
||||||
|
adns ~adns\d*\.openstack\.org
|
||||||
|
ns ~ns\d*\.openstack\.org
|
||||||
|
120
modules/openstack_project/manifests/master_nameserver.pp
Normal file
120
modules/openstack_project/manifests/master_nameserver.pp
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
define openstack_project::master_zone (
|
||||||
|
$source = undef,
|
||||||
|
) {
|
||||||
|
concat::fragment { "dns_zones+10_${name}.dns":
|
||||||
|
target => $::dns::publicviewpath,
|
||||||
|
content => template('openstack_project/nameserver/bind.zone.erb'),
|
||||||
|
order => "10-${name}",
|
||||||
|
}
|
||||||
|
file { "/var/lib/bind/zones/${name}":
|
||||||
|
ensure => directory,
|
||||||
|
owner => 'bind',
|
||||||
|
group => 'bind',
|
||||||
|
mode => 'u+rwX,g+rX,o+rX',
|
||||||
|
source => $source,
|
||||||
|
recurse => remote,
|
||||||
|
require => File['/var/lib/bind/zones'],
|
||||||
|
notify => Service[$::dns::namedservicename],
|
||||||
|
}
|
||||||
|
file { "/etc/bind/keys/${name}":
|
||||||
|
require => File['/etc/bind/keys'],
|
||||||
|
ensure => directory,
|
||||||
|
owner => 'root',
|
||||||
|
group => 'bind',
|
||||||
|
mode => '0750',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
define openstack_project::dnssec_key (
|
||||||
|
$public = undef,
|
||||||
|
$private = undef,
|
||||||
|
$zone = undef,
|
||||||
|
) {
|
||||||
|
file { "/etc/bind/keys/${zone}/K${zone}.+008+${name}.key":
|
||||||
|
ensure => present,
|
||||||
|
content => $public,
|
||||||
|
owner => 'root',
|
||||||
|
group => 'bind',
|
||||||
|
mode => '0440',
|
||||||
|
require => File["/etc/bind/keys/${zone}"],
|
||||||
|
}
|
||||||
|
file { "/etc/bind/keys/${zone}/K${zone}.+008+${name}.private":
|
||||||
|
ensure => present,
|
||||||
|
content => $private,
|
||||||
|
owner => 'root',
|
||||||
|
group => 'bind',
|
||||||
|
mode => '0440',
|
||||||
|
require => File["/etc/bind/keys/${zone}"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
define openstack_project::bind_key (
|
||||||
|
$key = undef,
|
||||||
|
) {
|
||||||
|
file { "/etc/bind/${name}.key":
|
||||||
|
require => Package[$::dns::dns_server_package],
|
||||||
|
owner => 'root',
|
||||||
|
group => 'bind',
|
||||||
|
mode => '0440',
|
||||||
|
content => template('openstack_project/nameserver/bind.key.erb'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class openstack_project::master_nameserver (
|
||||||
|
$tsig_key = undef,
|
||||||
|
$dnssec_keys = undef,
|
||||||
|
$notifies = undef,
|
||||||
|
) {
|
||||||
|
|
||||||
|
$also_notify = join($notifies, ';')
|
||||||
|
|
||||||
|
class { '::haveged': }
|
||||||
|
|
||||||
|
class { '::dns':
|
||||||
|
dns_notify => yes,
|
||||||
|
listen_on_v6 => "${::ipaddress6}",
|
||||||
|
additional_directives => [
|
||||||
|
'include "/etc/bind/tsig.key";',
|
||||||
|
],
|
||||||
|
additional_options => {
|
||||||
|
'listen-on' => "{ ${::ipaddress}; }",
|
||||||
|
# Notify requests can also be TSIG signed, but the current version
|
||||||
|
# of the NSD puppet module doesn't let us configure that easily.
|
||||||
|
'also-notify' => "{ ${also_notify}; }",
|
||||||
|
# Bind doesn't make it easy (or possible?) to restrict transfers by
|
||||||
|
# ip address and TSIG, so we only use the TSIG key here.
|
||||||
|
'allow-transfer' => "{ key tsig; }",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file { '/etc/bind/keys':
|
||||||
|
require => Package[$::dns::dns_server_package],
|
||||||
|
ensure => directory,
|
||||||
|
owner => 'root',
|
||||||
|
group => 'bind',
|
||||||
|
mode => '0750',
|
||||||
|
}
|
||||||
|
file { '/var/lib/bind/zones':
|
||||||
|
require => Package[$::dns::dns_server_package],
|
||||||
|
ensure => directory,
|
||||||
|
}
|
||||||
|
|
||||||
|
openstack_project::bind_key { 'tsig':
|
||||||
|
key => $tsig_key,
|
||||||
|
}
|
||||||
|
|
||||||
|
create_resources(openstack_project::dnssec_key, $dnssec_keys)
|
||||||
|
|
||||||
|
# Per zone configuration
|
||||||
|
vcsrepo { '/opt/zone-zuul-ci.org':
|
||||||
|
ensure => latest,
|
||||||
|
provider => git,
|
||||||
|
revision => 'master',
|
||||||
|
source => 'https://git.openstack.org/openstack-infra/zone-zuul-ci.org',
|
||||||
|
}
|
||||||
|
openstack_project::master_zone { 'zuul-ci.org':
|
||||||
|
source => 'file:///opt/zone-zuul-ci.org/zones/zuul-ci.org',
|
||||||
|
require => Vcsrepo['/opt/zone-zuul-ci.org'],
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
key "<%= @name %>" {
|
||||||
|
algorithm <%= @key['algorithm'] %>;
|
||||||
|
secret "<%= @key['secret'] %>";
|
||||||
|
};
|
13
modules/openstack_project/templates/nameserver/bind.zone.erb
Normal file
13
modules/openstack_project/templates/nameserver/bind.zone.erb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
zone <%= @name %> {
|
||||||
|
type master;
|
||||||
|
file "/var/lib/bind/zones/<%= @name %>/zone.db";
|
||||||
|
|
||||||
|
# look for dnssec keys here:
|
||||||
|
key-directory "/etc/bind/keys/<%= @name %>";
|
||||||
|
|
||||||
|
# publish and activate dnssec keys:
|
||||||
|
auto-dnssec maintain;
|
||||||
|
|
||||||
|
# use inline signing:
|
||||||
|
inline-signing yes;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user