prosodyctl: check turn: compare correct addresses for relay mismatch detection (thanks Zash)
authorMatthew Wild <mwild1@gmail.com>
Sat, 05 Mar 2022 20:47:40 +0000
changeset 12389 92b35a41bb3c
parent 12388 53b4549c2209
child 12390 2d3080d02960
prosodyctl: check turn: compare correct addresses for relay mismatch detection (thanks Zash)
util/prosodyctl/check.lua
--- a/util/prosodyctl/check.lua	Sat Mar 05 20:34:58 2022 +0000
+++ b/util/prosodyctl/check.lua	Sat Mar 05 20:47:40 2022 +0000
@@ -62,8 +62,10 @@
 end
 
 local function check_turn_service(turn_service, ping_service)
+	local array = require "util.array";
+	local ip = require "util.ip";
+	local set = require "util.set";
 	local stun = require "net.stun";
-	local ip = require "util.ip";
 
 	-- Create UDP socket for communication with the server
 	local sock = assert(require "socket".udp());
@@ -249,7 +251,8 @@
 		return result;
 	end
 
-	if result.external_ip.address ~= result.external_ip_pong.address then
+	local relayed_address_set = set.new(array.pluck(result.relayed_addresses, "address"));
+	if not relayed_address_set:contains(result.external_ip_pong.address) then
 		table.insert(result.warnings, "TURN external IP vs relay address mismatch! Is the TURN server behind a NAT and misconfigured?");
 	end