pdns-console/README.md
2016-01-04 07:03:03 +01:00

279 lines
5.9 KiB
Markdown

# pdns-console
PDNS-Console provides a CLI to manage PowerDNS application and improved it by adding a powerfull DNS zone versionning.
* [Installation](#installation)
* [Available commands](#available-commands)
* [Example](#example)
# Commands
## Available commands
### Helpers
```
about Show information about pdns-console
help Displays help for a command
list Lists commands
```
### Manage domains
```
domain:add Add a domain
domain:list List domains
domain:remove Remove a domain
```
### Manage zones
```
zone:add Add a zone
zone:assign Assign a zone to a domain.
zone:list List DNS zones
zone:push Push activated zones to PowerDNS tables
zone:record:add Add a zone record
zone:record:remove Remove a zone record
zone:remove Remove a zone
zone:unassign Unassign the domain zone
zone:version:active Active a zone version
zone:version:add Add a zone version
zone:version:copy Copy a zone version
zone:version:remove Remove an unactivated zone version
zone:version:unactive Active a zone version
```
### Example
#### Specifications
* We want to manage the domain *example.tld*
* We need 3 records:
* *example.tld* -> 1.2.3.4
* *www.example.tld* -> same as *example.tld*
* The MX of *example.tld* is *mail.foo.net*
#### Add the domain
```
$ ./app/console domain:add
Name: example.tld
MASTER [null]:
Type [NATIVE]:
Domain added
```
```
$ ./app/console domain:list
DOMAIN: example.tld
ID : 5 # This ID is important
TYPE : NATIVE
MASTER:
```
#### Create a zone
##### Interactive (or not)
```
$ ./app/console zone:add
Name: Example zone
Description: My example zone
Zone added.
```
##### The list is updated
```
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4 # This ID is important
No version found
```
##### New version for "Example zone" (ID=4)
```
$ ./app/console zone:version:add 4 # My zone ID
Zone version added.
```
```
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4
Version: 1 - Active: No
No record found.
```
#### Add the records
##### "SOA" record (no interactive)
```
$ ./app/console zone:record:add 4 1 --name @ --type SOA --content "localhost. postmaster@localhost 0 10800 3600 604800 3600" --ttl 3600 --prio null
```
##### "A" record (interactive)
```
$ ./app/console zone:record:add 4 1
Name: @
Content: 1.2.3.4
Available types: A AAAA CNAME MX NS TXT SPF WKS SRV LOC SOA
Type: A
TTL: 3600
Prio [null]:
Zone record added.
```
##### "CNAME" record. "--ttl" is missing
```
$ ./app/console zone:record:add 4 1 --name www --type CNAME --content example.tld. --prio null
TTL: 3600
Zone record added.
```
##### "MX" record. The validation of "--prio" failed
```
$ ./app/console zone:record:add 4 1 --name @ --type MX --content mail.foo.net. --ttl 3600 --prio badValue
Prio [null]: badValueAgain
Prio [null]: 10
Zone record added.
```
##### My version is now ready
```
$ ./app/console zone:list
Example zone
------------
My example zone
ID: 4
Version: 1 - Active: No
ID | NAME | TYPE | TTL | PRIO | CONTENT
----------------------------------------------------------------------
13 | @ | SOA | 3600 | | localhost postmaster@localhost 0 10800 3600 604800 3600
14 | @ | A | 3600 | | 1.2.3.4
15 | www | CNAME | 3600 | | example.tld.
16 | @ | MX | 3600 | 10 | mail.foo.net.
```
#### Active and assign the new zone
```
$ ./app/console zone:version:active 4 1
Zone version activated.
$ ./app/console zone:assign 4 5
Domain zone updated.
```
```
./app/console domain:list --zone
DOMAIN: example.tld
ID : 5
TYPE : NATIVE
MASTER:
> Example zone
> ------------
> My example zone
> ID: 4
>
> Version: 1 - Active: Yes
>
> ID | NAME | TYPE | TTL | PRIO | CONTENT
> ----------------------------------------------------------------------
> 13 | @ | SOA | 3600 | | localhost postmaster@localhost 0 10800 3600 604800 3600
> 14 | @ | A | 3600 | | 1.2.3.4
> 15 | www | CNAME | 3600 | | example.tld.
> 16 | @ | MX | 3600 | 10 | mail.foo.net.
>
```
#### Push modifications
```
./app/console zone:push
```
#### Test :)
```
$ dig +short -t A @localhost example.tld
1.2.3.4
$ dig +short -t CNAME @localhost www.example.tld
example.tld.
$ dig +short -t MX @localhost example.tld
10 mail.foo.net.
```
# Installation
## Requirements
* PHP >= 5.4
* PDO with module for database connection
* Instance of PDNS (Powerdns) >= 3.1 with MySQL/PostgreSQL/SQLite backend
## Downloading sources
```shell
cd /usr/local/src/
git clone https://github.com/simmstein/pdns-console.git
cd pdns-console
```
### Dependances
```
curl -sS https://getcomposer.org/installer | php
./composer.phar install
```
### Database
#### Edit *propel.yaml*
* ```dsn: "mysql:host=localhost;dbname=pdns"```
* Change *localhost* with the database server name
* Change *pdns* with the database name
* Change user and password values with your pdsn database login
Run `./app/propel/console config:convert`
#### Models
The sources does not contain all application models. You have to generate them:
Run `./app/propel/console --recursive model:build`
#### Database updates
pdns-console needs to update pdns original tables and uses 3 more.
```shell
./app/propel/console --recursive migration:diff
./app/propel/console --recursive migration:migrate
```
## Symlink
To access the console without using the full path of `app/console`, make a symlink:
```ln -s $PWD/app/console /usr/local/bin/pdns-console```