hotio/cloudflareddns
Starting the container¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Possible values for DETECTION_MODE are dig-google.com, dig-opendns.com, dig-whoami.cloudflare, curl-icanhazip.com, curl-wtfismyip.com, curl-showmyip.ca, curl-da.gd, curl-seeip.org, curl-ifconfig.co and curl-ipw.cn. If you want to get the local ip from a network interface, use something like local:eth0 as DETECTION_MODE.
Notice that we give 3 values each time for CF_HOSTS, CF_ZONES and CF_RECORDTYPES. In our example, the domain test.foobar.com belonging to the zone foobar.com will have its A record updated with an ipv4 ip. If you use CF_APITOKEN, you can leave CF_USER and CF_APIKEY empty.
Important
All the domain names in CF_HOSTS should have properly configured DNS records on Cloudflare, they will not be created.
Tags¶
| Tags | Description | Last Updated | Age |
|---|
Zone ID¶
Instead of the zone_name, you can also fill in a zone_id in CF_ZONES. When using a zone_id, you can use a scoped token (CF_APITOKEN) that only needs the Zone - DNS - Edit permissions. This improves security. The configuration could look like the example below.
-e CF_APITOKEN="azkqvJ86wEScojvSJC8DyY67TwqNwZCtomEVrHwt"
-e CF_HOSTS="example.com;test.foobar.com"
-e CF_ZONES="zbpsi9ceikrdnnym27s2xnp6s5dvj6ep;dccbe6grakumohwwd4amh4o46yupepn8"
-e CF_RECORDTYPES="A;A"
Seperate API Tokens¶
If you do not prefer to use a zone_id, but prefer some more security, you can use 2 seperate tokens.
CF_APITOKEN configured with:
Permissions
Zone - DNS - Edit
Zone Resources
Include - Specific zone - example.com
Include - Specific zone - foobar.com
CF_APITOKEN_ZONE configured with:
Permissions
Zone - Zone - Read
Zone Resources
Include - All zones
Leaving CF_APITOKEN_ZONE blank would mean that only CF_APITOKEN will be used and thus that token should have all required permissions. Which usually means that the token could edit all zones or not be able to fetch the zone_id from the zone_name.
Configuration combination examples¶
Below are some example configuration combinations, ordered from most secure to least secure.
- We use a
zone_idso that our token only needs the permissionsZone - DNS - Edit.
-e CF_APITOKEN="azkqvJ86wEScojvSJC8DyY67TwqNwZCtomEVrHwt"
-e CF_HOSTS="vpn.example.com;test.foobar.com"
-e CF_ZONES="zbpsi9ceikrdnnym27s2xnp6s5dvj6ep;axozor886pyja7nmbcvu5kh7dp9557j4"
-e CF_RECORDTYPES="A;A"
- We use additionally a
CF_APITOKEN_ZONEwith the permissionsZone - Zone - Readto query the zones and getting thezone_id.
-e CF_APITOKEN="azkqvJ86wEScojvSJC8DyY67TwqNwZCtomEVrHwt"
-e CF_APITOKEN_ZONE="8m4TxzWb9QHXEpTwQDMugkKuHRavsxoK8qmJ4P7M"
-e CF_HOSTS="vpn.example.com;test.foobar.com"
-e CF_ZONES="example.com;axozor886pyja7nmbcvu5kh7dp9557j4"
-e CF_RECORDTYPES="A;A"
- We use only
CF_APITOKEN, but with the permissionsZone - DNS - EditandZone - Zone - Read.
-e CF_APITOKEN="azkqvJ86wEScojvSJC8DyY67TwqNwZCtomEVrHwt"
-e CF_HOSTS="vpn.example.com;test.foobar.com"
-e CF_ZONES="example.com;axozor886pyja7nmbcvu5kh7dp9557j4"
-e CF_RECORDTYPES="A;A"
- We use
CF_USERandCF_APIKEY, basically giving full control over our account.
-e CF_USER="your.cf.email@example.com"
-e CF_APIKEY="your.global.apikey"
-e CF_HOSTS="vpn.example.com;test.foobar.com"
-e CF_ZONES="example.com;axozor886pyja7nmbcvu5kh7dp9557j4"
-e CF_RECORDTYPES="A;A"
Example of the log output¶
2020-05-17 17:20:54 - INFO - IPv4 detected by [dig-whoami.cloudflare] is [1.1.1.1].
2020-05-17 17:20:54 - INFO - [1/1] [A] [vpn.example.com] Reading zone list from Cloudflare.
2020-05-17 17:20:54 - INFO - [1/1] [A] [vpn.example.com] Retrieved zone list from Cloudflare.
2020-05-17 17:20:54 - INFO - [1/1] [A] [vpn.example.com] Zone ID [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] found for zone [example.com].
2020-05-17 17:20:54 - INFO - [1/1] [A] [vpn.example.com] Reading DNS record from Cloudflare.
2020-05-17 17:20:55 - INFO - [1/1] [A] [vpn.example.com] Writing DNS record to cache file [/config/cf-ddns-A-vpn.example.com.cache].
2020-05-17 17:20:55 - INFO - [1/1] [A] [vpn.example.com] Checking if update is needed.
2020-05-17 17:20:55 - INFO - [1/1] [A] [vpn.example.com] No update needed.
2020-05-17 17:20:55 - INFO - Going to sleep for [300] seconds...
Log levels¶
For LOG_LEVEL you can pick 0, 1, 2 or 3.
-
0will give no log output. It's not recommended to use. -
1will give you the following output types. It's the recommended value when all things are configured and running as expected.
UPDATE, WARNING, ERROR
2will give you the following output types. Use this if you always wanna see what's going on, but3gives you too much output.
UPDATE, WARNING, ERROR, INFO
3will give you the following output types. This is the default.
UPDATE, WARNING, ERROR, INFO, DEBUG
JSON log¶
Every IP update is also logged to /config/cf-ddns-updates.json. This can be used with the Telegraf JSON parser and the tail input, to get your domain updates into InfluxDB. Example output below.
{"domain":"vpn.example.com","recordtype":"A","ip":"1.1.1.1","timestamp":"2020-05-17T20:27:14Z"}
{"domain":"vpn.example.com","recordtype":"A","ip":"1.1.1.1","timestamp":"2020-05-17T20:29:26Z"}
Cached results from Cloudflare¶
The returned results from Cloudflare are cached. This means minimal api calls to Cloudflare. If you have made any manual changes to the IP on the Cloudflare webinterface, for instance when wanting to test an update, a container restart is needed to clear the cache.
The proxy setting (orange cloud) and TTL is also cached and re-set based on the previous value, so if you made any modifications to these settings, you should restart the container so that the script is aware of the new settings.
Sending notifications¶
You can send notifications when a DNS record gets updated with a new IP using Apprise. Use the environment variable APPRISE to configure notifications, see below for some examples.
-e APPRISE="pover://user@token"
-e APPRISE="pover://user@token;discord://webhook_id/webhook_token"
WireGuard¶
Info
This image includes VPN support. The cli/compose examples below are environment variables and settings complementary to the app image examples, this means you'll have to add/merge the stuff below with the stuff above. In case you are still in need of a VPN, consider using my affiliate links for Proton VPN, Proton Unlimited or Private Internet Access.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
-
The environment variable
VPN_LAN_NETWORKcan be set to for example192.168.1.0/24,192.168.1.0/24,192.168.44.0/24or192.168.1.33, so you can get access to the webui or other additional ports (see below). If for example you were to pick192.168.0.0/24, every device with an ip in the range192.168.0.0 - 192.168.0.255on your LAN is allowed access to the webui. On MacOS set it to192.168.65.0/24(Verify with your settings [Resources > Network > Docker subnet]). -
If you need to expose ports on your LAN you can use
VPN_EXPOSE_PORTS_ON_LAN. For exampleVPN_EXPOSE_PORTS_ON_LAN=7878/tcp,9117/tcp, will block those ports on the vpn interface, so that there's no risk that they might be exposed to the world and allow access to them from your LAN. Some images also have aWEBUI_PORTSenvironment variable that does basically the same for the vpn part. For those apps that support it, it'll also change the port on which the app runs. -
With
net.ipv6.conf.all.disable_ipv6=1all ipv6 support is disabled. Leave ipv6 disabled and remove all references to it in yourwg0.conffile to keep things simple. If you need any sort of ipv6 support, enable it withnet.ipv6.conf.all.disable_ipv6=0. A WireGuard ipv6 endpoint is currently not supported. -
Possible values are
generic,protonandpia.
Affiliate links:
Proton VPN
Proton Unlimited
Private Internet Access -
There needs to be a file
wg0.conf(for PIA this is done automatically, seeVPN_PROVIDERvariable) located in/config/wireguardand you need to set the variableVPN_ENABLEDtotruefor the VPN to start. If you'd like to execute some of your own bash commands you can place two scripts alongside yourwg0.conf, calledwg0-pre.shandwg0-post.sh. These will execute right before the check for the existence of awg0.conffile and almost at the end, right before the internet connectivity test. -
Auto retrieve a forwarded port and configure the supported app if set to
trueor if you can manually request/set a forwarded port in the VPN provider's web interface, fill in the port number (just the number). Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
By default a random server is used, but if you prefer a certain region you can fill in the region id. A list of available regions can be found in
/config/wireguardafter the first start. If you're seeing an error messageshuf: getrandom: Function not implemented, you can't let it pick one randomly and are forced to fill in a region id. -
With
VPN_CONFyou can set the name used for your WireGuard config. This is an example of how yourwg0.conffile should look like. If there's a lot of extra stuff, remove it unless you know what it's there for. The WireGuard config is automatically modified to useAllowedIPs = 0.0.0.0/1,128.0.0.0/1for compatibility with Synology/QNAP/Asustor/WSL2 systems if you append-fix, soVPN_CONF=wg0-fix. WSL2 users can also compile their own kernel if they don't wanna use this workaround.[Interface] PrivateKey = supersecretprivatekey Address = xx.xx.xxx.xxx/32 # Yes, /32 in most cases DNS = x.x.x.x [Peer] PublicKey = publickey AllowedIPs = 0.0.0.0/0 Endpoint = xxx.x.xxx.x:51820 -
If the WireGuard kernel module is missing (most likely on Synology/QNAP/Asustor), you can run WireGuard in userspace thanks to
wireguard-go. For that you'll need to add the device/dev/net/tun. It's most likely that the device/dev/net/tundoes not exist however, have a read here for instructions on checking and adding the device. -
DANGEROUS! Don't enable unless you know what you are doing!
-
When using
VPN_PROVIDER=pia, fill in your username and password. Awg0.confwill be automatically downloaded. -
Required in most cases, on some systems that don't have
rp_filterset to strict, it's optional. -
Fill in your DIP token here, if you've bought the dedicated ip option.
-
If you'd like to keep using the same forwarded port until it expires, set this to
true. -
Adds a redirect for the forwarded port from your vpn provider to the internal port on which the app runs, ports in this list are also not blocked on the wireguard interface, so this var is also useful if you want to expose a port on both your LAN and VPN. Values like
32400/tcpwill use the port fromVPN_AUTO_PORT_FORWARDto create the redirect or if set totruethe forwarded port from pia/proton. Use3000@3001/tcp,3002@3003/tcpsyntax for extra static redirects. The only known usecase as of right now is Plex and exposing it on the VPN with a non configurable forwarded port, because it's not possible to run Plex on anything else but 32400. Useful website to check for open ports is YouGetSignal and ipleak.net to leak test with.torrentfile. -
Some of the possible values are for example
wg,8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The valuewgwill use the nameservers from thewg0.conffile. A value in the format8.8.8.8is to use a plain old nameserver. A value in the format1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode. -
Possible values are
auto,legacyornftables. The default isauto, this will try to use the most modern method available. If this doesn't work, you can try forcing it tolegacyornftables. -
If you want to use container hostnames to connect to other containers within a bridge network, you'll have to use
--hostnameand usecontainer-name.internalorcontainer-name.vpn. Currently.vpnis a non existing TLD, but that can change in the future. The TLD.internalshould become the standard for internal networks, so it's the safest choice. -
This will start Privoxy on the default port 8118 when set to
true. By default Privoxy is not exposed on the LAN, so if you need that, you'll have to addVPN_EXPOSE_PORTS_ON_LAN=8118/tcp,8118/udp. -
Enabling this will bring down the container if the connectivity tests fail at the end of the Wireguard init process or for an extended period during the container runtime.
-
Enable Unbound by setting to
truewhen VPN is not active. -
Possible values are
8.8.8.8or1.1.1.1@853#cloudflare-dns.comseperated by a,. The value8.8.8.8is to use a plain old nameserver. The value1.1.1.1@853#cloudflare-dns.comwill add aDNS over TLSnameserver, this will override all other regular nameservers. Leaving the variable empty will allow Unbound to work in recursive mode.