-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hurricane: he.net responds with undocumented response code interval
#1415
Comments
he.net's Dynamic DNS endpoint responds with `interval` whenever a dynamic TXT record has been updated more than 10 times in 2 minutes; this is undocumented on https://dns.he.net, but the behaviour has been confirmed with he.net's DNS admin. Recognise `interval` as a potential response code in the `hurricane` DNS provider, and recommend that the user back off until the cooldown period has passed. Closes go-acme#1415.
Hello, If you are a HE customer, I invite you to contact HE to demand a real API and real API documentation. |
EDIT: I was hoping that the API returns the interval value, but based on your logs it's not the case. |
Sadly not - that's why I got in touch with their DNS Admin, who confirmed what the limit is. I agree that there's a lot of room for improvement in the documentation for their Dynamic DNS service. I'm still talking to them about the limits of what they consider acceptable use - when I know more, I'll submit another PR tweaking the default timeouts and intervals for |
@chrisnovakovic One question: the rate limit of 10 times in 2 minutes is by record or on the whole API? |
If it's per record, the fix is not good:
|
10 rqs / 2 minutes (120 seconds) The rate limiter expects a minimal frequency based on one second and a maximum burst size. The burst will consume requests so the frequency must be computed with a number of requests equals to
The base frequency is
What does this mean?
If you have 3 domains, and the rate limit is based on the API calls, lego will call 6 times the API:
If you have 10 domains, and the rate limit is based on the API calls, lego will call 20 times the API:
The max burst size is really important and must be defined with caution:
The current API rate limit is very very low, a min frequency of 1/12 (1 req every 12s) is really problematic for an API. In conclusion, it's really important to be sure if the rate limit is per record or for all the API calls. |
@chrisnovakovic Do you have more information? |
Thanks for the extra information, @ldez, that was very insightful. The rate limit that causes the issue raised here is definitely per-record - that's been confirmed privately by he.net's DNS Admin. I haven't yet heard back from them about adding the remaining cooldown time to the |
What did you expect to see?
When using the he.net Dynamic DNS provider (
hurricane
), a descriptive error message being shown when any type of error occurs.What did you see instead?
A nondescript error from he.net that isn't documented anywhere during the clean-up step:
Details
Excessively enthusiastic use of the he.net Dynamic DNS provider (
hurricane
), e.g. during testing, can lead to the service responding with the response codeinterval
. This isn't documented on https://dns.he.net, but after speaking to he.net's DNS Admin, I found that this response code is triggered whenever an update request is sent for a dynamic record more than 5 times in 5 minutes; this has now been increased to 10 times in 2 minutes. Since it's possible to hit these limits while testing lego with LE's staging endpoint, I think it makes sense to recognise this response code and warn users to back off for a minute or two if it is sent.In the case above, it was the clean-up step that failed with this error, which left the challenge token in the TXT record - @ldez, I'm not sure if there's anything that can or should be done if this happens (it seems like it could be a problem for all DNS providers, not just he.net, but then again I wouldn't expect to run into this problem during normal operation, only during testing).
The text was updated successfully, but these errors were encountered: