btcpayserver / btcpayserver-docker

Docker resources for hosting BTCPayServer easily
MIT License
578 stars 355 forks source link

Issue with externalip and externalhosts configuration in LND #927

Open damanic opened 2 weeks ago

damanic commented 2 weeks ago

There is currently no way to set externalip to an IP address through btcpay vars.

Btcpay will use the value of BTCPAY_HOST for externalip= which is the primary DOMAIN name for the site.

If you set the var BTCPAY_ANNOUNCEABLE_HOST to an IP address it will be overridden by btcpay-setup.sh and reset to the BTCPAY_HOST domain.

This can cause issues when migrating to new IP or if serving the btcpay webservice behind a DNS proxy like cloudflare which will resolve the domain to cloudflares IP address instead of the LND nodes public IP address.

The assignment of a domain to externalip also seems to not be best practice when there is a configuration variable called externalhosts that is intended for DNS resolution.

; A list of domains for lnd to periodically resolve, and advertise the resolved
; IPs for the backing node. This is useful for users that only have a dynamic IP,
; or want to expose the node at a domain.
; Default:
;   externalhosts=
; Example (option can be specified multiple times):
;   externalhosts=my-node-domain.com
;   externalhosts=my-second-domain.com

Shouldn't BTCPAY allow for the externalip in LND conf to be set as an IP address through ENV vars for servers that have a static IP, and have the option to add BTCPAY_HOST / BTCPAY_ADDITIONAL_HOSTS as externalhosts entries for those that have a dynamic IP?

dennisreimann commented 2 weeks ago

@rockstardev I'm not sure why we are using the externalip with hostnames, but I assume it might be a remainder from back in the days where there wasn't an externalhosts option.

The docker entrypoint has two lines where it sets externalip= in the lnd.conf file:

For the latter I haven't found any hints regarding why even use the externalip/externalhosts with a Tor address. Maybe this isn't necessary anymore.

For the former it would always be a hostname rather than an IP address. Imho it would be good to clarify that in the variable name and set externalhosts rather than externalip.

What are your thoughts?