Bug #3858
closedDynDNS errno 47: Address family not supported by protocol family
0%
Description
I'm on pfSense 2.1.3-RELEASE amd64 (seems to be missing from affected version). Upon configuring the custom (v4, not v6, although v6 had the same issue) DynDNS service, I was met with the following in my logs (when verbose logging was enabled, and yes, I masked the full script URL and my IP address):
Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDns: updatedns() starting Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDns (): XX.XXX.XX.XXX extracted from local system. Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDNS (): running get_failover_interface for wan. found em1 Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDNS (): DynDns _update() starting. Sep 10 23:14:41 php: /services_dyndns_edit.php: Custom DDNS (): DNS update() starting. Sep 10 23:14:41 php: /services_dyndns_edit.php: Sending request to: http://myhost.example.com/dyndns/index.php?type=v4&ip=67.169.59.123 Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDNS (): DynDns _checkStatus() starting. Sep 10 23:14:41 php: /services_dyndns_edit.php: DynDNS (): Current Service: custom Sep 10 23:14:41 php: /services_dyndns_edit.php: Curl error occurred: bind failed with errno 47: Address family not supported by protocol family
and the request would fail to complete. I started digging around, and found that if I commented line 277 (https://github.com/pfsense/pfsense/blob/master/etc/inc/dyndns.class#L277) of /etc/inc/dyndns.class
, the request would complete. I checked the output of $this->_dnsRequestIfIP
and found that it correctly output the IPv4 address assigned to my em1
interface (I only have a simple single WAN/single LAN setup). I checked the PHP Curl documentation, which stated that CURLOPT_INTERFACE
will accept an IP address or interface name. I tried giving it em1
instead of the IP address provided in $this->_dnsRequestIfIP
but that hung the webconfigurator.
So, current easiest fix is commenting line 277, because PHP is unable to send the request if bound to a specific interface.