netcup-dns/README.md

87 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2023-06-28 19:52:08 +02:00
# netcup-dns
2023-03-27 21:29:52 +02:00
Update DNS A/AAAA records with your current external IP address using the netcup DNS API.
2023-03-27 21:29:52 +02:00
## Installation
2023-09-28 17:12:10 +02:00
Install release from PyPI (https://pypi.org/project/netcup-dns/):
```shell
pip install netcup-dns
```
Install release from TestPyPI (https://test.pypi.org/project/netcup-dns/):
```shell
pip install -i https://test.pypi.org/simple/ netcup-dns
```
Build and install on Arch Linux:
```shell
make
```
2023-09-28 17:12:10 +02:00
Build and install with `pip`:
```shell
make install-pip
```
2023-03-28 17:16:11 +02:00
## Configuration
For each netcup customer, create a `.json` configuration file inside `/etc/netcup-dpns`.
2023-03-28 17:16:11 +02:00
There is an [example configuration](cfg/example.json).
2023-03-28 17:16:11 +02:00
2023-06-28 19:51:09 +02:00
## Usage
```
usage: netcup-dns [-h] [--config-directory CFG_DIR]
[--cache-directory CACHE_DIR]
[--cache-validity-seconds CACHE_VALIDITY_SECONDS]
Update DNS A/AAAA records with your current external IP address using the
netcup DNS API.
options:
-h, --help show this help message and exit
--config-directory CFG_DIR
Path to directory where `.json` config files reside.
--cache-directory CACHE_DIR
Path to cache directory. Retrieved and updated DNS
records are cached there.
--cache-validity-seconds CACHE_VALIDITY_SECONDS
Value in seconds for how long cached DNS records are
valid. Set to `0` to disable caching.
```
2023-03-27 21:29:52 +02:00
## TODOs
2023-08-13 17:42:26 +02:00
API backend:
- Currently: nc-dnsapi
2024-12-09 11:19:51 +01:00
- https://pypi.org/project/nc-dnsapi/
- https://github.com/nbuchwitz/nc_dnsapi
2023-08-13 17:42:26 +02:00
- Alternatives:
- https://github.com/johndoe31415/dnssync_nc
2023-03-27 21:29:52 +02:00
Alternative external IP detection:
```python
def external_ip_upnp():
"""
https://stackoverflow.com/a/41385033
Didn't work for me. Even after double checking fritz.box settings:
fritz.box > Heimnetz > Netzwerk > Statusinformationen über UPnP übertragen
"""
import miniupnpc
u = miniupnpc.UPnP()
u.discoverdelay = 1000
u.discover()
u.selectigd()
print('external ip address: {}'.format(u.externalipaddress()))
```