diff --git a/synapse/app/federation_reader.py b/synapse/app/federation_reader.py
index b5f59a9931..321dfc7cd5 100644
--- a/synapse/app/federation_reader.py
+++ b/synapse/app/federation_reader.py
@@ -86,7 +86,8 @@ class FederationReaderServer(HomeServer):
def _listen_http(self, listener_config):
port = listener_config["port"]
- bind_address = listener_config.get("bind_address", "")
+ bind_address = listener_config.get("bind_address", None)
+ bind_addresses = listener_config.get("bind_addresses", [])
site_tag = listener_config.get("tag", port)
resources = {}
for res in listener_config["resources"]:
@@ -99,16 +100,22 @@ class FederationReaderServer(HomeServer):
})
root_resource = create_resource_tree(resources, Resource())
- reactor.listenTCP(
- port,
- SynapseSite(
- "synapse.access.http.%s" % (site_tag,),
- site_tag,
- listener_config,
- root_resource,
- ),
- interface=bind_address
- )
+
+ if bind_address:
+ bind_addresses.append(bind_address)
+
+ for address in bind_addresses:
+ reactor.listenTCP(
+ port,
+ SynapseSite(
+ "synapse.access.http.%s" % (site_tag,),
+ site_tag,
+ listener_config,
+ root_resource,
+ ),
+ interface=address
+ )
+
logger.info("Synapse federation reader now listening on port %d", port)
def start_listening(self, listeners):
@@ -116,15 +123,22 @@ class FederationReaderServer(HomeServer):
if listener["type"] == "http":
self._listen_http(listener)
elif listener["type"] == "manhole":
- reactor.listenTCP(
- listener["port"],
- manhole(
- username="matrix",
- password="rabbithole",
- globals={"hs": self},
- ),
- interface=listener.get("bind_address", '127.0.0.1')
- )
+ bind_address = listener.get("bind_address", None)
+ bind_addresses = listener.get("bind_addresses", [])
+
+ if bind_address:
+ bind_addresses.append(bind_address)
+
+ for address in bind_addresses:
+ reactor.listenTCP(
+ listener["port"],
+ manhole(
+ username="matrix",
+ password="rabbithole",
+ globals={"hs": self},
+ ),
+ interface=address
+ )
else:
logger.warn("Unrecognized listener type: %s", listener["type"])
|