====== Dynamic DNS ======

The Synchronet Dynamic DNS module is used in combination with the Synchronet Dynamic Domain Name System (DynDNS) Service hosted on [[bbs:Vertrauen]] to provide free ''.synchro.net'' hostnames to Synchronet sysops.

===== yourbbs.synchro.net =====
If you'd like a ''synchro.net'' hostname, [[person:digital man|I]] offer a free, very easy-to-use
dynamic hostname service exclusively for Synchronet sysops. Your ''synchro.net''
hostname will always point to your current IP address, as long as your BBS
is running. Using this service requires Synchronet v3.10 or later.

===== Directions =====

1. If you don't already have the ''[[dir:exec]]/dyndns.js'' file, download [[https://gitlab.synchro.net/sbbs/sbbs/-/raw/master/exec/dyndns.js|the file]] into your Synchronet ''[[dir:exec]]'' directory.
   
2. If you haven't already, create a QWK networking account on [[bbs:Vertrauen]]
using your BBS's QWK-ID for the username (see [[howto:dove-net|this howto]] for more details).

Note: You do not have to actually join [[network:DOVE-Net]] to get a ''synchro.net'' hostname, if you do not wish.

3. If you don't already have one, setup a timed event (in [[util:SCFG]]->External Programs->Timed Events) to run the 
command-line ''?dyndns //yourpass//'' periodically, where //yourpass// is the
password you used when you created your QWK networking account on
Vertrauen. "DYNDNS" is the suggested internal code to use for this event.
   
If you have a frequently changing IP address (and Synchronet v3.11 or
later) set "Always Run After Init/Re-init" to "Yes". With this option set
to "Yes", frequent timed updates should not be necessary.

If you have a static IP address, one run (update) per month should be
sufficient.

:!: Make sure that "Enabled" is set to "Yes".

4. After saving your changes in [[util:SCFG]], and verifying that the Terminal Server
has recycled, check the event log window or console output to verify that
the "DYNDNS" event has executed. You can force the event to execute with
the (Win32) SBBSCTRL:BBS->Force Timed Event menu option, or by "touching"
(creating or modifying) the file ''[[dir:data]]/dyndns.now''.

5. Attempt to ping or connect to services at ''//your-id//.synchro.net'', where
//your-id// is your BBS's QWK-ID. It may take a few minutes for a new hostname
to become active or for an existing hostname to resolve to a newly changed
IP address. 

You're ready to go with your new ''synchro.net'' hostname :!:

===== Options =====

If you choose to include any ''dyndns.js'' command-line options, they must follow your password (and a space) on the configured command-line.

''-mx //[hostname]//''

DNS MX (mail exchange) resource records are used to designate a specific
hostname as the "mail exchange" (receiving SMTP server) for a specific
hostname. If there is no MX record, then the hostname itself is assumed to
perform the role of "mail exchange". Some receiving SMTP servers now require
that the *sending* SMTP server correspond to the MX record of the "from"
hostname. If you want to specify an MX record for your hostname, you can do
so by adding ''-mx'' (optionally followed by a hostname) to your ''?dyndns''
command-line (after the password). If no hostname is specified, then an MX
record pointing back to your hostname will be created. Example: ''?dyndns password -mx mail.someother.org''

''-hn //<base_hostname>//''

If you want to update a hostname that is **different** than your BBS's QWK-ID,
ou can specify that hostname (QWK-ID) on the ''?dyndns'' command-line
(after the password) by using the ''-hn'' option followed by the hostname
to use (not including ".synchro.net"). There must be a corresponding QWKnet
account on Vertrauen for the specified hostname and password.

''-ip6 //[ipv6_address]//''

If you have a public IPv6 address, you may create/update a ''AAAA'' record along with your IPv4
''A'' record by including the ''-ip6'' option followed by a space and your current public IPv6 address.
Vertrauen cannot at this time automatically detect your public IPv6 address, so if your
IPv6 address changes, you will need to change the command-line accordingly.

''//[ip_address]//''

If for some reason you want to specify a **different** IPv4 address than the one
that your BBS will be using to connect with [[bbs:Vertrauen]], you can include that IP
address on the "?dyndns" command-line (after the password). This is an
advanced feature that you should not need to use under normal conditions, even
if your BBS is behind a firewall/router using network address translation
(NAT) - the DynDNS server running on [[bbs:Vertrauen]] uses your correct [[faq:tcpip#public IP]]
address by default.

==== modopts.ini ====

Due to command-line length limits (63 characters), you may want to move one or more of the longer command-line options to the ''[dyndns]'' section of your ''[[dir:ctrl]]/[[config:modopts.ini]]'' file.

The following options/keys are supported:

^   Key       ^ Record ^ Description ^
| ''mx''      | MX     | Mail Exchange record (hostname)   |
| ''ip''      | A      | IP version 4 address (e.g. 172.217.4.174) |
| ''ip6''     | AAAA   | IP version 6 address (e.g. 2607:f8b0:4007:801::200e) |
| ''txt''     | TXT    | Text (default: BBS name) |
| ''loc''     | LOC    | Location coordinates (see [[http://dnsloc.net/]] for details) |
| ''wildcard'' | CNAME  | When set to ''true'', will create a wildcard record for "*.yourbbs.synchro.net" |
| ''password'' | N/A    | Over-ride the password (first argument) specified on command-line |

==== SPF ====

Some mail servers (e.g. ''gmail.com'') require that mail senders to conform with [[wp>Sender_Policy_Framework]].

If your sending mail server is also the mail exchange (receiving mail server) for your domain (e.g. you are [[howto:relay_smtp|relaying your outbound Internet email]] through [[bbs:Vertrauen]] **and** [[howto:vert_mx|using Vertrauen as your SMTP Mail Exchange]]), then you can create a valid SPF record for your //.synchro.net// hostname by creating the following key in the ''[dyndns]'' section of your ''[[dir:ctrl]]/[[config:modopts.ini]]'' file:

  txt = v=spf1 mx a -all
  
===== See Also =====
  * [[:module:|Modules]]
