Giter Site home page Giter Site logo

dstapp / docker-ddns Goto Github PK

View Code? Open in Web Editor NEW
628.0 628.0 156.0 210 KB

Easy-to-deploy dynamic DNS with Docker, Go and Bind9

License: MIT License

Makefile 6.87% Go 82.73% Shell 6.71% Dockerfile 3.69%
ddns dns docker dynamic-dns self-hosted selfhosted

docker-ddns's People

Contributors

diogosm avatar fluix-dev avatar joshdvir avatar sgyurko avatar stv0g avatar vdweegen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-ddns's Issues

Read IP through Traefik

Wondering what headers would need to be passed for this to work through a traefik proxy. Right now unless I specify an IP it gets set to the internal traefik network IP. I tried a few things but nothing is working. I think something might need to be changed on the software side also.

Update to stretch

This image still uses jessie (old-stable) and should be updated to the current stable release stretch.

Autocleanup of unused names

Hi there.
First of thanks for this wonderful software. I've been desperately needing exactly this.

Anyways, what I would love to have is (an optional) way for the service to start cleaning up old entries. To give them a TTL for their existance. (Please don't use the TTL value for that. It should be a different one)
The main reason I'm asking for this is quite simple. We use this to identify devices. They all get their own unique ID and that's how we address them. Now the setup they are a part of is very volatile. Meaning that IP addresses get reassigned often. And devices get added and removed from the pool frequently too. This means that for a device that has been removed from the pool could still have a DNS entry. And a new device might have gotten that IP. So then instead of getting an error that the name cannot be resolved, we would connect to the wrong device without even knowing really.

I hope that request makes sense to you. And I also hope that it won't be too much work to implement.

Chellenge with Resolving my NS

I had to redirect port 53, but I haven't been able to get dig to resolve my NS. If I run it from the server itself it resolves as 127.0.0.53. When I run it from my desktop, I get connection timeout.

I have the firewall open on ports 53, 5353, 8080. The records on my DNS appear correct... Running the docker on UBUNTU. Its a shared VPS, where I am hosting 3 domains on 2 IPs.
EDIT:
I put it on its own IP that resolves a reverse DNS (Just in case). No improvement.

[Question] Are the SOA/NS records correct?

First of all, thank you so much for this project! I’ve been using (/trying to use) it to keep a single subdomain pointed to my home Internet’s public IP address so that I can VPN back to the home network from anywhere, anytime – without paying for overpriced DDNS services. Thank you for this convenient package!

I wanted to ask, however, if the SOA record that is created by default is correct. Let me describe my setup:

  • docker-ddns runs on ddns.milanvit.net (update API endpoints are accessible here), and I want it to manage records in the ns.milanvit.net subdomain, for example office.ns.milanvit.net
  • DNS records for milanvit.net are managed on Cloudflare, and I created the following three records:
    • Type: NS, name: ns, value: ddns.milanvit.net
    • Type: A, name: ddns, value: <ipv4-address-of-my-server>, not Cloudflare-proxied
    • Type: AAAA, name: ddns, value: <ipv6-address-of-my-server>, not Cloudflare-proxied
  • I run docker-ddns in Dokku, with the following configuration:
$ dokku config ddns
=====> ddns env vars
DOKKU_APP_RESTORE:       1
DOKKU_CHECKS_DISABLED:   _all_
DOKKU_DOCKERFILE_PORTS:  53/tcp 8080/tcp
DOKKU_PROXY_PORT_MAP:    http:80:8080 https:443:8080
DOKKU_PROXY_SSL_PORT:    443
RECORD_TTL:              3600
SHARED_SECRET:           supersecret
ZONE:                    ns.milanvit.net
$ dokku storage:report ddns
=====> ddns storage information
       Storage build mounts:
       Storage deploy mounts:         -v /var/lib/dokku/data/storage/ddns:/var/cache/bind
       Storage run mounts:            -v /var/lib/dokku/data/storage/ddns:/var/cache/bind
$ dokku docker-options:report ddns
=====> ddns docker options information
       Docker options build:
       Docker options deploy:         -p 53:53 -p 53:53/udp --restart=on-failure:10 -v /var/lib/dokku/data/storage/ddns:/var/cache/bind
       Docker options run:            -v /var/lib/dokku/data/storage/ddns:/var/cache/bind
$ dokku proxy:report ddns
=====> ddns proxy information
       Proxy enabled:                 true
       Proxy port map:                http:80:8080 https:443:8080
       Proxy type:                    nginx

In other words, mount /var/cache/bind as persistent storage, make port 53 (both TCP and UDP) directly accessible, and proxy port 8080 through nginx; on top of that, manage subdomain ns.milanvit.net. I hope all of the above is correct and expected.

Now to my question, finally 😅 After setting everything up, I ran a few dig commands, with not always correct results:

$ dig @1.1.1.1 +short ns.milanvit.net NS
localhost. # incorrect
$ dig @8.8.8.8 +short ns.milanvit.net NS
localhost. # incorrect
$ dig @1.1.1.1 +short ddns.milanvit.net A
<correct IPv4 address>
$ dig @1.1.1.1 +short ddns.milanvit.net AAAA
<correct IPv6 address>
$ dig @1.1.1.1 +short <subdomain>.ns.milanvit.net
<SOMEHOW correct IPv4 address from docker-ddns>
$ dig @8.8.8.8 +short <subdomain>.ns.milanvit.net
<now that I’m writing this, it’s also correct but it definitely wasn’t 5 minutes ago>

And for example, if I run a dig on the server running docker-ddns:

$ dig @127.0.0.1 <subdomain>.ns.milanvit.net                                                  Čt 23. dubna 2020, 09:08:26 JST

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @127.0.0.1 <subdomain>.ns.milanvit.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54383
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 9589e6d074039310da7536b55ea0dc928ee6ca78a38cc782 (good)
;; QUESTION SECTION:
;<subdomain>.ns.milanvit.net.          IN      A

;; ANSWER SECTION:
<subdomain>.ns.milanvit.net.   3600    IN      A       <correct IP address>

;; AUTHORITY SECTION:
ns.milanvit.net.        86400   IN      NS      localhost. # that’s not right, right?

;; ADDITIONAL SECTION:
localhost.              604800  IN      A       127.0.0.1
localhost.              604800  IN      AAAA    ::1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Apr 23 09:08:50 JST 2020
;; MSG SIZE  rcvd: 160

I wonder, are the NS and SOA records correct? Should they really point at localhost? Or is it something that we should manually change after the zone files are initially created? I originally thought it’s a problem with my DNS configuration, but after asking the same question at Cloudflare Community Forums, I was told it’s configuration problem…

Sorry for very lengthy explanation, but thank you for your insights!

Let's Encrypt

Should probably consider integrating Let's Encrypt support into the web/update server, this way you can send updates over HTTPS so they cannot be intercepted.

Make deploy issue

~/docker-ddns$ make deploy
docker build -t davd/dyndns-server .
make: docker: Command not found
Makefile:2: recipe for target 'image' failed
make: *** [image] Error 127

I get this on both Ubuntu Server 16 32- and 64-bit after update/upgrade.

Am I missing something?

[feature request] Add support for multiple domains/all subdomains

Hi,

thanks for this project. I'm using it for half a year now, it works fine.
However, I use FritzBox as DDNS requester and it does not allow to send multiple requests. Can you add functionality, so that I can send mutliple domains (maybe separated by ,)?

My current workaround is the following:

        result := UpdateRecord(response.Domain, response.Address, response.AddrType)
+       UpdateRecord("*." + response.Domain, response.Address, response.AddrType)

Thanks
sscholl

badauth when trying to use DynDNS API

Hi There,

The update via Web is working - but actually only over the

http(s)//example.com/update?secret=[SHARED_SECRED]&domain=[HOSTNAME]&addr=[IP] url.

When using /v2/update I'm getting a badauth back in the browser, even if i use the following auth method.

http(s)://fakeUser:[SHARED_SECRED]@example.com/v2/update?hostname=[HOSTNAME]&myip=[IP]

in the Log:
2020/07/24 19:07:14 Invalid shared secret:

Am I doing something wrong, or is this basic-auth feature which the Dyn-compatible url uses not working anymore??
Sadly I think I will need this working, if I want to use it with some zywall device....

Cheers, Rainer

Sub-domains are not-able to ping from same server and external network

Hi,
I was trying to use your solution for my testing purpose but in that i'm facing an issue.
The issue was

  1. I can't see the list of domains added to the server
  2. The domain registered through the rest API is not able to ping
    please help me to sort out this issue

Thanks & Regards
Tamilvalavan shanmugam

help with docker stack and dns record setup

Hello, I'm pretty new with docker and I'm trying to create a stack, this is what i have in my .yml

version: '3.8'

services:

        ddns:
                image: davd/docker-ddns:latest
                environment:
                        - "RECORD_TTL: 60"
                        - "ZONE: domain.com"
                        - "SHARED_SECRET: secret"
                ports:
                        - "80:8080"
                        - "53:53"
                        - "53:53/udp"

the service error is telling me that the SHARED_SECRET isn't set, this is the error message:
| SHARED_SECRET not set
| Starting domain name service...: bind9.
| panic: open /etc/dyndns.json: no such file or directory

(I'm guessing its looking for that directory in the container?)

anyway, other than this, I was reading some other issues on this github and I'm guessing im supposed to create an A record called ns.domain.com and also a NS record that points to this container at ddns.domain.com?

I'm using namecheap so would this be right?
image

If so I'm a little confused as to how namecheap would know what ddns.domain.com is, would i also have to create an A record saying that ddns.domain.com is the same host as ns.domain.com???

Reverse search

I can't reverse search on the server :/
Is it normal? I'm using a VPN and all IP addresses on the DNS are from the VPN.

Commands:
nslookup

server 127.0.0.1
host 192.168.255.18

can i set up forwarders?

I want to use this as a full lab DNS server but I need to be able to use forwarders as well. Can this work?

Can't get it to work

I hope someone has an Idea what is going wrong here:

I have the following dns setup at my hoster:

dyndns.domain.de | NS | ns.dyndns.domain.de
dyndns.domain.de | A | 175.241.32.73
ns.dyndns.domain.de | A | 175.241.32.73

this call works:

http://ns.domain.de:8080/update?secret=password&domain=home&addr=1.2.3.4

Docker logs this:
A record update request: home -> 1.2.3.4

But:
I can't ping dyndns.domain.de.
when I check dns with mxtoolbox i get this:

_NS | localhost | 127.0.0.1 | 24 hrs |   |   |   |   |  
NS | ns.dyndns.domain.de | 175.241.32.73

Local NS list does not match Parent NS list
175.241.32.73 was reported by the parent, but not locally
127.0.0.1 was reported locally, but not by the parent_

When I dig:
dig home.dyndns.domain.de @175.241.32.73:

; <<>> DiG 9.10.6 <<>> home.dyndns.domain.de @175.241.32.73
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5159
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;home.dyndns.domain.de. IN A

;; ANSWER SECTION:
home.dyndns.domain.de. 3600 IN A 1.2.3.4

;; AUTHORITY SECTION:
dyndns.domain.de. 86400 IN NS localhost.

;; ADDITIONAL SECTION:
localhost. 604800 IN A 127.0.0.1
localhost. 604800 IN AAAA ::1

;; Query time: 37 msec
;; SERVER: 175.241.32.73#53(175.241.32.73)
;; WHEN: Fri Jul 06 17:32:48 CEST 2018
;; MSG SIZE rcvd: 133

And I can't ping home.dyndns.domain.de.
What is missing here?

[Feature Request] Per Subdomain Secret

Please add the ability to specify a dedicated secret for a given subdomain.

E.g. via environment variable

docker run -it -d \
    -p 8080:8080 \
    -p 53:53 \
    -p 53:53/udp \
    -e SHARED_SECRET=changeme \
    -e SECRET_mysubdomain1=changeme1 \
    -e SECRET_mysubdomain2=changeme2 \
    -e ZONE=example.org \
    -e RECORD_TTL=3600 \
    --name=dyndns \
    davd/docker-ddns:latest

new REST api port and curl feature

I tried this server running on a droplet and with this command

http://<mydomain>:8080/update?secret=hellotest&domain=node1

on my local machine's browser it returns

{"Success":true,"Message":"Updated A record for node1 to IP address 157.40.255.20","Domain":"node1","Domains":["node1"],"Address":"157.40.255.20","AddrType":"A"}

but by using curl on another droplet it returns

{"Success":false,"Message":"Domain not set","Domain":"","Domains":[""],"Address":"","AddrType":""}

what could be the problem?

and also please guide me on how to change the default port 8080 to something like 9010 if possibe.

Could not resolve hostname : Name or service not known

i have done setup. and also update ddclient.
and no any error.

but after that i am ping mine created subdomain that is not ping or ssh.
i have also done port forwarding in my router port 80 and 22.
getting below error.

Could not resolve hostname : Name or service not known
i have setup my ddns server on cloud with static ip with hostname .

Alpine docker, domain updates for x-hosts, SmartDNS, port change

Hi from Toronto !

Exactly what I was looking for...just read the article.

Newbie here so bear with me 👺👺👺

  1. Can this be run in an Alpine base Docker, x86 or aarch64?

How would a router with hosts behind connect to the Docker dynDNS server?

  1. How many hosts behind multiple routers in different homes can this support?

Are domain hoster mymachine.dyndns.mydomain.net updates for adding each host machine automatic?
Can updates be automated?

  1. If I want to use SmartDNS Proxy services (for multiple sites geo unlocking without encryption for good speeds) with this DIY dynDNS , how would I ?

Do I just have to use DNS addresses provided by SmartDNS Proxy provider plugged into my home router?

  1. On above note, any links to DIY SmartDNS Proxy server, possibly a combo DIY dynDNS+ SmartDNS Proxy server?

  2. As you know the standard port 53 is prone to ISP DNS hijacking, so many external DNS providers recommend you change the port to say 54 in your router configuration.

Can we do the port change here?

Unable to run if systemd-resolved claims port 53

Hi,
thank you for putting this together.

Running the make deploy part of the install instructions gave me an error that something is blocking port 53.

sudo lsof -Pnl +M -i4 | grep 53 lead to systemd-resolved.service occupying port 53.

I was able to fix the problem by adding the line DNSStubListener=no to /etc/systemd/resolved.conf followed by sudo systemctl restart systemd-resolved.service.

Maybe this could be added to a troubleshooting section, as I think this problem could be rather present these days.

Suggestion: add A record in zone

Hello,
thanks for your project! I have adapt it to a kvm VM and it works smoothly there. In your example the zone was example.org but for me it had to be dyndns.example.org - that is a bit confusing.

Anyway now it works but I could still not ping dyndns.example.org, for this I had to add a A record in my zone file, like:

$ORIGIN .
$TTL 86400      ; 1 day
dyndns.example.org         IN SOA  localhost. root.localhost. (
                                76         ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      localhost.
                        A       1.2.3.4 
...

1.2.3.4 should be the world IP, not from the container.

Maybe you want to add this to your setup?

Wildcard subdomains and dnsmasq on a local machine

As of now, the API allows the configuration of subdomains, i.e. foo.dyndns.domain.tld or bar.foo.dyndns.domain.tld.

Is it possible to configure a wildcard subdomain, like *.foo.dyndns.domain.tld and have a dnsmasq running on a local machine, which handles all the rest?

subdomain of mydomain can't work

hello,
It can work well, if use subdomain of subdomain of mydomain. such as: xxx.ddns.mydomain.com
in envfile,
ZONE=dyndns.mydomain.com

I chage envfile in it:
ZONE=mydomain.com
and I want to use subdomain of mydomain, xxx.mydomain.com, but It don't work.

Can this docker support subdomain of mydomain?

Publish on docker hub

Hi,
This project looks great!
Would you mind publish it on docker hub so that we can do docker pull dprandzioch/docker-ddns:latest and automatically get the updates?

Trouble trying to use FreeNAS with docker-ddns

OK so I appreciate this project and it fits a need I have to be able to give a FreeNAS server a resolved DNS name on my domain.

So I set up the docker instance and I can test it fine using the provided JSON string.

http://myhost.mydomain.tld:8080/update?secret=changeme&domain=foo&addr=1.2.3.4

That works and a DNS A record is created.

However when I try and set it up from FreeNAS it does not seem to work with the 3 revolvers mentions for standard DynDNS lookups. Namely.

/nic/update
/v2/update
/v3/update

FreeNAS uses inadyn and the config file is such.

    period = 300
    custom customProvider {
    ddns-server = "ns.mydomain.net:8080"
    ddns-path = "/v3/update/"
    ssl = false
    username = "randomuser"
    password = 'SuperSecret'
    hostname = { "myhostname" }
}

However when running the daemon in debug mode I am getting a 404 Error.

 inadyn[2178]: In-a-dyn version 2.5 -- Dynamic DNS update client.
 inadyn[2178]: Resolving hostname myhostname => IP# 127.0.0.1
 inadyn[2178]: Base64 encoded string: YWxsYXN2YXVsdDpMGpGeWxoVWdpSGI0
 inadyn[2178]: Get address for custom
 inadyn[2178]: Checking for IP# change, connecting to checkip.dyndns.org([131.186.161.70]:80)
 inadyn[2178]: Querying DDNS checkip server for my public IP#: GET / HTTP/1.0
 Host: checkip.dyndns.org
 User-Agent: inadyn/2.5 https://github.com/troglobit/inadyn/issues
 
 inadyn[2178]: Server response: HTTP/1.1 200 OK
 Content-Type: text/html
 Server: DynDNS-CheckIP/1.0.1
 Connection: close
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Length: 107
 
 <html><head><title>Current IP Check</title></head><body>Current IP Address: n.n.n.n</body></html>
 inadyn[2178]: Checked my IP, return code 0: OK
 inadyn[2178]: IP server response:
 inadyn[2178]: HTTP/1.1 200 OK
 Content-Type: text/html
 Server: DynDNS-CheckIP/1.0.1
 Connection: close
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Length: 107
 
 <html><head><title>Current IP Check</title></head><body>Current IP Address: n.n.n.n</body></html>
 inadyn[2178]: Checking IPv4 address n.n.n.n ...
 inadyn[2178]: IPv4 address n.n.n.n is valid.
 inadyn[2178]: Current IP# n.n.n.n at custom
 inadyn[2178]: Update forced for alias myhostname, new IP# n.n.n.n
 inadyn[2178]: Sending IP# update to DDNS server, connecting to ns.mydomain.net([y.y.y.y]:8080)
 inadyn[2178]: Sending alias table update to DDNS server: GET /v3/update/myhostname HTTP/1.0
 Host: ns.mydomain.net
 Authorization: Basic YWxsYXN2YXVsdDpMGpGeWxoVWdpSGI0
 User-Agent: inadyn/2.5 https://github.com/troglobit/inadyn/issues
 
 inadyn[2178]: DDNS server response: HTTP/1.0 404 Not Found
 Content-Type: text/plain; charset=utf-8
 X-Content-Type-Options: nosniff
 Date: Fri, 19 Jun 2020 09:44:20 GMT
 Content-Length: 19
 
 404 page not found
 inadyn[2178]: Fatal error in DDNS server response:
 inadyn[2178]: [404 Not Found] 404 page not found
 inadyn[2178]: Error response from DDNS server, exiting!
 inadyn[2178]: Error code 48: DDNS server response not OK

What is odd is I am not even getting any logging back from the server.

I am using docker logs --tail 100 -f dyndns and all I am getting is this:

creating zone...
creating zone file...
creating REST api config...
[ ok ] Starting domain name service...: bind9.
2020/06/18 17:01:26 Serving dyndns REST services on 0.0.0.0:8080...

As I say I have tried all 3 variants above but nothing seems to work? Am I missing something here?

Any insights would be appreciated.

[Question] Need help with configuration - Domain doesn't point to the correct IP from outside the server

First of all sorry for abusing the GitHub issues as a support board, but it's hard to find helpful ressources for this project elsewhere.

Let's assume the following values for better understanding the issue:

  • VPS with IP 100.100.100.100 and domain domain.com
  • Docker command on that server: # docker run -d -v /root/ddns/:/var/cache/bind/ -p 127.0.0.1:5353:8080 -p 53:53/udp -e SHARED_SECRET=changeme -e ZONE=domain.com -e RECORD_TTL=3600 --name=ddns davd/docker-ddns
  • Nginx reverse proxy pointing https://ddns.domain.com to 127.0.0.1:5353
  • Domain that should point to the dynamic IP: https://server.domain.com
  • Update URL: https://ddns.domain.com/update?secret=changeme&domain=server&addr=1.2.3.4
  • I added two entries to my DNS records in the hoster interface of domain.com (of which I honestly don't even know whether they are necessary, DNS is witchcraft to me):
    • * A 100.100.100.100
    • @ A 100.100.100.100
    • dyndns NS ns
    • ns A 100.100.100.100
  • By visiting the update URL I told docker-ddns to set the domain server.domain.com to 1.2.3.4, which results in a success message. docker logs -f ddns confirms this (2020/07/18 19:01:15 A record update request: server -> 1.2.3.4)

Now to the actual issue:
Using dig on the server hosting docker-ddns (100.100.100.100) is giving me the correct DNS entry:

# dig @127.0.0.1 +short server.domain.com
1.2.3.4
# dig @100.100.100.100 +short server.domain.com
1.2.3.4

However when quering from another machine it alway returns 100.100.100.100 instead of 1.2.3.4

$ dig @100.100.100.100 +short server.domain.com
100.100.100.100

Using my default DNS server results in the same thing:

$ dig +short server.domain.com
100.100.100.100

It's been more than 24h since I changed my DNS records, so I don't think it is a propagation issue, especially because it still returns 100.100.100.100 when queried directly (dig @100.100.100.100).

What am I doing wrong?

Edit: Redacted/modified screenshot of my hoster's interface for the DNS records (forgive my mad photoshop skillz):
customercontrolpanel.de

Linked guide in README is not accessible

The README links to a guide, however it fails with the following error:

This site can’t provide a secure connection
www.davd.eu sent an invalid response.
ERR_SSL_PROTOCOL_ERROR

Attempting to visit via HTTP instead results in:

404 Site www.davd.eu is not served on this interface

Update TXT record

Is there a way to update TXT record for the sake of Let's Encrypt dns-01 challenge?

Domain not set

Hey, probably I only configured or understood something wrong, but unfortunately I can't get any further, so I hope someone can help me.

If I run the following command (example.com is a place holder):
curl http://ns.example.com:8044/update?secret=testpw&domain=foo&addr=1.2.3.4
I get:
{"Success":false,"Message":"Domain not set","Domain":"","Domains":[""],"Address":"","AddrType":""}

I also tried to setup a reserve proxy with SSL (haproxy), but i just get 503 Error.
https://ns.example.com/update?secret=testpw&domain=foo&addr=1.2.3.4
503 Service Unavailable

Here is what I configured:
ddns_1
ddns_2

haproxy.cfg

backend dyndns_backend
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    #http-request set-header Host www.example.com
    hash-type consistent
    option forwardfor
    cookie SERVERID insert indirect nocache

    #<name> <adress>
    server is_dyndns ddns:8044 

docker-compose.yml

        ddns:
                image: davd/docker-ddns:latest
                ports:
                        - "53:53"
                        - "53:53/udp"
                        - "8044:8080"
                networks:
                        - gateway
                environment:
                        RECORD_TTL: 60
                        ZONE: dyndns.example.com
                        SHARED_SECRET: testpw
                restart: unless-stopped

Suggestion: Switch to coredns

Since the REST API is written in go, it seems natural to go for coredns as a more lightweight (?) dns server for this project. Can't think of any downsides right now.

filter for domains that use the fqdn (Zone) in the submit

The newer versions of the AVM fritz!box routers, now require the DDNS domain to be a FQDN, including the zone. This leads to entries in the zone file that are like this:

ZONE=example.com

request url:
https://ddns.example.com/v3/update?hostname=hostname.example.com&myip=<ipaddr>&password=<passwd>

Resulting entry in the zone file:
hostname.example.com.example.com

The obvious solution of not using the FQDN but only the hostname results in tons of error messages.

Request: would it be possible to add a filter to the go scripts that checks if the hostname string contains a substring that is equal to the zone string and remove .zone from the hostname? (or any other solution that would yield the same result).

PS: this seems like a little patch, but unfortunately I have very limited go skills.

Update Dockerhub Image frequently

Hi,
this Docker image in Dockerhub with the "latest" tag is now over 9 months old.

Please run your build process/pipeline regularly even without new commits in this repo to get regular security updates of the base images.

Thanks!

Create a separate repository for the go source

Maybe you should consider to move the go source to a separate repository and reference it in this repository as a submodule or pull it while building. Separating a folder can be done with git filter-branch. Don't execute this command before reading the manual.

Also the go program schuld be in its own container.

Therefore it would be a good idea to separate the repository into a "go program repository" and references the "go program repository" here.

DNS Setup

I can see that a couple people have [had] the same issue as I did starting, but with no clear resolution typed out. I've set up everything as per how-to.
I'm using GoDaddy as a hosting site for [myDomain.net], and have exported my DNS records. The ones in question look like this:
; A Records
ns 3600 IN A
; NS Records
dyndns 3600 IN NS ns

the envfile:
ZONE=myDomain.net

In the browser:
http://ns.myDomain.net:8080...
returns
{"Success":true,"Message":"Updated A record for googleTest to IP address 216.58.194.78"}

however,
In the browser
http://googletest.dyndns.my...
returns
This site can’t be reached
googletest.dyndns.myDomain.net’s server DNS address could not be found.

What am I missing and thank you for your time.

Auto start docker

I got your system up and running.

You need to update your tutorial to tell people to auto start their docker. After the system reboots all DynDNS resolution borked and I was scratching my head as to why.

From the command prompt:
docker update --restart unless-stopped dyndns

I also hate how I have to modify the /etc/systemd/resolved.conf > flip =no <-- to "yes" > reboot > apt update && apt upgrade -y <-- so my system can resolve DNS and update > go back into the file and flip it to "yes" > reboot again.

^^^^ is that necessary? It's terrible! We need a fix please! :-)

Thanks!

Update failed

Hi there,

I have a problem updating the dns record using the following url:
http://example.tld:8080/update?secret=changeme&domain=foo&addr=1.2.3.4

I only get the results:

HTTP-GET Response
{"Success":false,"Message":"exit status 2: update failed: NOTAUTH\n","Domain":"foo","Address":"1.2.3.4","AddrType":"A"}

Server-Log shows only (no following messages):
2018/02/19 17:08:07 A record update request: foo -> 1.2.3.4

Regards

A-record timestamp as TXT-record

I would love to have a way to query the age of a specific A-record. (Did this device register with us yesterday or three months ago?) . This way, I can monitor for hosts silently dropping off the LTE network.

A TXT record with a timestamp for the latest A-record update is an indirect way of resolving this, which is useable with regular DNS query tools.

Caddy as reverse proxy returns Docker net IP

I have placed docker-ddns behind a Caddy reverse proxy, but it appears any requests are showing from the docker container IP. Examples:

ddns-sweet | 2019/12/23 20:04:39 A record update request: bar -> 172.18.0.3 caddy-gen | caddy.1 | <public_ip> - - [23/Dec/2019:20:04:39 +0000] "GET /update?secret=<secret_key>&domain=bar&addr= HTTP/2.0" 200 144

I'm not sure exactly how to pass the correct public IP through Caddy to docker-ddns. It seems Caddy is seeing the correct IP, but the actualy GET is coming into docker-ddns from Caddy, so this is the IP it's taking.

Persist state using docker volumes

Can I persist current state (dyndns hostnames and ip data) using docker volumes? Currently, I'm loosing this information when I restart the container.

I need help setting up my domain entries.

Hello,

I neet help setting up my domain entries.

Docker Container is running on 213.109.160.XX.

$ nslookup garrit.dyndns.XX.de 213.109.160.XX
Server: 213.109.160.XX
Address: 213.109.160.XX#53

Name: XX.dyndns.XX.de
Address: 1.2.3.5 (correct IP)

But if i dont specifiy the NS Server IP:

$ nslookup garrit.dyndns.XX.de
;; Got SERVFAIL reply from 80.237.128.56, trying next server
Server: 80.237.128.57
Address: 80.237.128.57#53

** server can't find garrit.dyndns.XX.de: SERVFAIL

Can you help me please and figure out what the problem is?

(IPs are masked)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.