Bug #12590
closedDynamic DNS custom IPv6 service fails on 6rd tunnels
0%
Description
I use a "Custom" DDNS service to register my dynamic home IP address as a subdomain of my dedicated server domain. Thus, I administer both ends of the DDNS system.
My dynamic home IP address supports both IPv4 and IPv6, so I have both "Custom" and "Custom-v6" services configured in pfSense. However, my dedicated server host only supports IPv4, so I have the "Force IPv4 DNS Resolution" option enabled (checked) in the "Custom-v6" service. (My remote DDNS web service supports setting both "A" and "AAAA" records over IPv4).
Unfortunately, "Custom-v6" DDNS service updates always fail. According to the pfSense logs, the remote web server does not respond (no header/data) (actually, the remote web server logs do not show any incoming requests):
Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic DNS custom-v6 (): 2602:xx:xxxx:xxxx:: extracted from local system. Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic DNS (): running get_failover_interface for wan_stf. found wan_stf Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic DNS custom-v6 (): 2602:xx:xxxx:xxxx:: extracted from local system. Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic Dns (): Current WAN IP: 2602:xx:xxxx:xxxx:: Cached IPv6: 2602:yy:yyyy:yyyy:: Dec 13 01:01:02 php 22089 rc.dyndns.update: DynDns (): Dynamic Dns: cacheIP != wan_ip. Updating. Cached IP: 2602:yy:yyyy:yyyy:: WAN IP: 2602:xx:xxxx:xxxx:: Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic DNS custom-v6 (): _update() starting. Dec 13 01:01:02 php 22089 rc.dyndns.update: Sending request to: https://example.com/ddns/update6.php?ip=2602:xx:xxxx:xxxx:: Dec 13 01:01:02 php 22089 rc.dyndns.update: Response Header: Dec 13 01:01:02 php 22089 rc.dyndns.update: Response Data: Dec 13 01:01:02 php 22089 rc.dyndns.update: Dynamic DNS custom-v6 (): _checkStatus() starting. Dec 13 01:01:02 php 22089 rc.dyndns.update: phpDynDNS (): (Error) Result did not match. []
Investigating, I found that pfSense is sending the update request in IPv4 protocol (as intended) on an IPv6 interface (oops). For reference, the DDNS protocol is overridden in /etc/inc/dyndns.class
:
case 'custom':
case 'custom-v6':
if ($this->_curlIpresolveV4) {
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
I have a workaround that forces the 'requestif' to retain the IPv4 interface name if the "Force IPv4 DNS Resolution" option is enabled:
--- services_dyndns_edit.php.old 2021-12-13 17:09:05.793154000 -0800
+++ services_dyndns_edit.php 2021-12-13 15:00:28.599731000 -0800
@@ -205,7 +205,7 @@
// Trim hard-to-type but sometimes returned characters
$dyndns['resultmatch'] = trim($_POST['resultmatch'], "\t\n\r");
($dyndns['type'] == "custom") ? $dyndns['requestif'] = $_POST['requestif'] : $dyndns['requestif'] = $_POST['interface'];
- if (($dyndns['type'] == "custom-v6") && is_stf_interface($_POST['requestif'])) {
+ if (($dyndns['type'] == "custom-v6") && !$dyndns['curl_ipresolve_v4'] && is_stf_interface($_POST['requestif'])) {
$dyndns['requestif'] = $_POST['requestif'] . '_stf';
} else {
$dyndns['requestif'] = $_POST['requestif'];
However, I am not sure this workaround is a complete fix, since there may be other WAN naming conventions besides mine.
Related issues
Updated by Viktor Gurov almost 3 years ago
- Related to Bug #9641: Dynamic DNS cannot update AAAA records on 6rd tunnel interfaces bound to PPPoE interfaces added
Updated by Viktor Gurov almost 3 years ago
Updated by Jim Pingle almost 3 years ago
- Status changed from New to Pull Request Review
- Assignee set to Viktor Gurov
- Target version set to CE-Next
- Plus Target Version set to 22.05
Updated by Jim Pingle over 2 years ago
- Target version changed from CE-Next to 2.7.0
Updated by Jim Pingle over 2 years ago
- Subject changed from DDNS custom IPv6 service fails on 6rd tunnel to Dynamic DNS custom IPv6 service fails on 6rd tunnels
Updating subject for release notes.