diff --git a/res/res_pjsip_endpoint_identifier_ip.c b/res/res_pjsip_endpoint_identifier_ip.c
index 34c8f2c393f6278ec2065eb884026371c840d4b1..d71345b199313b1ee3fd90b9c7ae46e0a33e3280 100644
--- a/res/res_pjsip_endpoint_identifier_ip.c
+++ b/res/res_pjsip_endpoint_identifier_ip.c
@@ -156,13 +156,30 @@ static struct ast_sip_endpoint_identifier ip_identifier = {
 static int ip_identify_match_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
 {
 	struct ip_identify_match *identify = obj;
-	int error = 0;
+	int num_addrs = 0, error = 0, i;
+	struct ast_sockaddr *addrs;
 
-	/* We deny what we actually want to match because there is an implicit permit all rule for ACLs */
-	if (!(identify->matches = ast_append_ha("d", var->value, identify->matches, &error))) {
+	num_addrs = ast_sockaddr_resolve(&addrs, var->value, PARSE_PORT_FORBID, AST_AF_UNSPEC);
+	if (!num_addrs) {
+		ast_log(LOG_ERROR, "Address '%s' provided on ip endpoint identifier '%s' did not resolve to any address\n",
+			var->value, ast_sorcery_object_get_id(obj));
 		return -1;
 	}
 
+	for (i = 0; i < num_addrs; ++i) {
+		/* We deny what we actually want to match because there is an implicit permit all rule for ACLs */
+		identify->matches = ast_append_ha("d", ast_sockaddr_stringify_addr(&addrs[i]), identify->matches, &error);
+
+		if (!identify->matches || error) {
+			ast_log(LOG_ERROR, "Failed to add address '%s' to ip endpoint identifier '%s'\n",
+				ast_sockaddr_stringify_addr(&addrs[i]), ast_sorcery_object_get_id(obj));
+			error = -1;
+			break;
+		}
+	}
+
+	ast_free(addrs);
+
 	return error;
 }