PHPackages                             nicokaiser/dyndns - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. nicokaiser/dyndns

AbandonedArchivedLibrary[Utility &amp; Helpers](/categories/utility)

nicokaiser/dyndns
=================

A simple dynamic DNS that updates an existing BIND

1.0.4(11y ago)10063333[2 issues](https://github.com/nicokaiser/Dyndns/issues)MITPHP

Since Oct 4Pushed 11y ago1 watchersCompare

[ Source](https://github.com/nicokaiser/Dyndns)[ Packagist](https://packagist.org/packages/nicokaiser/dyndns)[ RSS](/packages/nicokaiser-dyndns/feed)WikiDiscussions master Synced 5d ago

READMEChangelogDependenciesVersions (5)Used By (0)

Dyndns: a simple DynDNS server in PHP
=====================================

[](#dyndns-a-simple-dyndns-server-in-php)

This script takes the same parameters as the original dyndns.org server does. It can update a BIND DNS server via `nsupdate`.

As it uses the same syntax as the original DynDNS.org servers do, a dynamic DNS server equipped with this script can be used with DynDNS compatible clients without having to modify anything on the client side.

### Features

[](#features)

This script handles DNS updates on the url

```
http://yourdomain.tld/?hostname=&myip=

```

For security HTTP basic auth is used. You can create multiple users and assign host names for each user.

### Installation

[](#installation)

To be able to dynamically update the BIND DNS server, a DNS key must be generated with the command:

```
ddns-confgen

```

This command outputs instructions for your BIND installation. The generated key has to be added to the named.conf.local:

```
key "ddns-key" {
    algorithm hmac-sha256;
    secret "bvZ....K5A==";
};

```

and saved to a file which is referenced in index.php as "bind.keyfile". In the "zone" entry, you have to add an "update-policy":

```
zone "dyndns.example.com" {
    type master;
    file "db.dyndns.example.com";
    ...
    update-policy {
        grant ddns-key zonesub ANY;
    }
}

```

In this case, the zone is also called "dyndns.example.com". The (initial) db.dyndns.example.com file (located in BIND's cache directory) looks like this:

```
$TTL 1h
@ IN SOA dyndns.example.com. root.example.com. (
        2007111501      ; serial
        1h              ; refresh
        15m             ; retry
        7d              ; expiration
        1h              ; minimum
        )
        NS

```

Remember to change access rights so BIND is able to write to this file. On Ubuntu the zone need to be in /var/lib/bind due to AppArmor.

### PHP script configuration

[](#php-script-configuration)

The PHP script is called by the DynDNS client, it validates the input and calls "nsupdate" to finally update the DNS with the new data. Its configuration is rather simple, the user database is implemented as text file "dyndns.user" with each line containing

```
:

```

Where the password is crypt'ed like in Apache's htpasswd files. Use -d parameter to select the CRYPT encryption.

```
htpasswd -c -d conf/dyndns.user user1

```

Hosts are assigned to users in using the file "dyndns.hosts":

```
:(,,,...)

```

(So users can update multiple hosts, and a host can be updated by multiple users).

### Installation via Composer

[](#installation-via-composer)

```
# Install Composer
curl -sS https://getcomposer.org/installer | php

# Add Dyndns as a dependency
php composer.phar require nicokaiser/dyndns:*

```

Then you can create a simple `index.php` with the configuration:

```
