Merge pull request #61 from p0lycarpio/features/ipv6

Add IPv6 support
This commit is contained in:
Eric Nemchik 2023-10-24 18:48:40 -05:00 committed by GitHub
commit e07309e5cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 4 deletions

View File

@ -12,6 +12,7 @@ LABEL maintainer="aptalca"
RUN \
echo "**** install packages ****" && \
apk add --no-cache \
bind-tools \
logrotate
# add local files

View File

@ -12,6 +12,7 @@ LABEL maintainer="aptalca"
RUN \
echo "**** install packages ****" && \
apk add --no-cache \
bind-tools \
logrotate
# add local files

View File

@ -19,9 +19,9 @@ development_versions_items: ""
# container parameters
common_param_env_vars_enabled: 'optional' #PGID, PUID, etc, you can set it to 'optional'
param_container_name: "{{ project_name }}"
param_usage_include_net: false #you can set it to 'optional'
param_net: ""
param_net_desc: ""
param_usage_include_net: 'optional' #you can set it to 'optional'
param_net: "host"
param_net_desc: "Use host networking for IPv6 detection"
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London"}
@ -39,6 +39,7 @@ cap_add_param_vars: ""
# optional container parameters
opt_param_usage_include_env: true
opt_param_env_vars:
- { env_var: "UPDATE_IP", env_value: "ipv4", desc: "Set to `ipv6` or `ipv4` to update **only** your public IPv4/6 address. Set to `both` to update IPv6 and IPv4 address. This variable makes use of a [third-party service](#notice-regarding-automatic-detection). Omitting this variable uses DuckDNS for detection and only supports IPv4. `both` and `ipv6` modes needs [host networking](#networking-net)."}
- { env_var: "LOG_FILE", env_value: "false", desc: "Set to `true` to log to file (also need to map /config)."}
opt_param_usage_include_vols: true
opt_param_volumes:
@ -61,9 +62,17 @@ app_setup_block: |
- Create a container with your subdomain(s) and token. If you own user.duckdns.org, you put `SUBDOMAINS=user` you would NOT put a sub subdomain like overseerr from overseerr.user.ducksdns.org
- It will update your IP with the DuckDNS service every 5 minutes (with a random jitter)
## Notice regarding automatic detection
Using the `UPDATE_IP` variable whatever its value (`ipv4`, `ipv6` or `both`) uses external *Cloudflare whoami* service to detect public IP addresses.
**Be aware that using this variable will query a third-party service other than DuckDNS.**
Omitting the `UPDATE_IP` variable uses DuckDNS for detection and only supports IPv4.
# changelog
changelogs:
- { date: "14.10.23:", desc: "Rework shell script for case insensitivity and update readme to be more clear." }
- { date: "13.10.23:", desc: "Add support for public IPv6 address update using Cloudflare." }
- { date: "25.05.23:", desc: "Rebase to Alpine 3.18, deprecate armhf." }
- { date: "02.03.23:", desc: "Rework shell scripts and cron logic." }
- { date: "13.02.23:", desc: "Rebase to alpine 3.17." }

View File

@ -11,7 +11,26 @@ else
fi
{
RESPONSE=$(curl -sS --max-time 60 "https://www.duckdns.org/update?domains=${SUBDOMAINS}&token=${TOKEN}&ip=")
# Use cloudflare to autodetect IP if UPDATE_IP is set
if [ "${UPDATE_IP}" = "ipv4" ]; then
echo "Detecting IPv4 via CloudFlare"
IPV4=$(dig +short ch txt whoami.cloudflare -4 @1.1.1.1 | sed 's/"//g')
RESPONSE=$(curl -sS --max-time 60 "https://www.duckdns.org/update?domains=${SUBDOMAINS}&token=${TOKEN}&ip=${IPV4}")
elif [ "${UPDATE_IP}" = "ipv6" ]; then
echo "Detecting IPv6 via CloudFlare"
IPV6=$(dig +short ch txt whoami.cloudflare -6 @2606:4700:4700::1111 | sed 's/"//g')
RESPONSE=$(curl -sS --max-time 60 "https://www.duckdns.org/update?domains=${SUBDOMAINS}&token=${TOKEN}&ipv6=${IPV6}")
elif [ "${UPDATE_IP}" = "both" ]; then
echo "Detecting IPv4 and IPv6 via CloudFlare"
IPV4=$(dig +short ch txt whoami.cloudflare -4 @1.1.1.1 | sed 's/"//g')
IPV6=$(dig +short ch txt whoami.cloudflare -6 @2606:4700:4700::1111 | sed 's/"//g')
RESPONSE=$(curl -sS --max-time 60 "https://www.duckdns.org/update?domains=${SUBDOMAINS}&token=${TOKEN}&ip=${IPV4}&ipv6=${IPV6}")
else
# Use DuckDns to autodetect IPv4 (default behaviour)
echo "Detecting IPv4 via DuckDNS"
RESPONSE=$(curl -sS --max-time 60 "https://www.duckdns.org/update?domains=${SUBDOMAINS}&token=${TOKEN}&ip=")
fi
if [ "${RESPONSE}" = "OK" ]; then
echo "Your IP was updated at $(date)"
else