Merge pull request #1709 from kyrias/bind_addresses
Add support for specifying multiple bind addresses
This commit is contained in:
commit
da2c8f3c94
|
@ -658,7 +658,7 @@ configuration might look like::
|
|||
}
|
||||
}
|
||||
|
||||
You will also want to set ``bind_address: 127.0.0.1`` and ``x_forwarded: true``
|
||||
You will also want to set ``bind_addresses: ['127.0.0.1']`` and ``x_forwarded: true``
|
||||
for port 8008 in ``homeserver.yaml`` to ensure that client IP addresses are
|
||||
recorded correctly.
|
||||
|
||||
|
|
|
@ -76,7 +76,8 @@ class AppserviceServer(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"]:
|
||||
|
@ -85,6 +86,11 @@ class AppserviceServer(HomeServer):
|
|||
resources[METRICS_PREFIX] = MetricsResource(self)
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -93,8 +99,9 @@ class AppserviceServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse appservice now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -102,6 +109,13 @@ class AppserviceServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -109,7 +123,7 @@ class AppserviceServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -90,7 +90,8 @@ class ClientReaderServer(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"]:
|
||||
|
@ -108,6 +109,11 @@ class ClientReaderServer(HomeServer):
|
|||
})
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -116,8 +122,9 @@ class ClientReaderServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse client reader now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -125,6 +132,13 @@ class ClientReaderServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -132,7 +146,7 @@ class ClientReaderServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -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,6 +100,11 @@ class FederationReaderServer(HomeServer):
|
|||
})
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -107,8 +113,9 @@ class FederationReaderServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse federation reader now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -116,6 +123,13 @@ class FederationReaderServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -123,7 +137,7 @@ class FederationReaderServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -82,7 +82,8 @@ class FederationSenderServer(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"]:
|
||||
|
@ -91,6 +92,11 @@ class FederationSenderServer(HomeServer):
|
|||
resources[METRICS_PREFIX] = MetricsResource(self)
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -99,8 +105,9 @@ class FederationSenderServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse federation_sender now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -108,6 +115,13 @@ class FederationSenderServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -115,7 +129,7 @@ class FederationSenderServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -107,7 +107,8 @@ def build_resource_for_web_client(hs):
|
|||
class SynapseHomeServer(HomeServer):
|
||||
def _listener_http(self, config, 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", [])
|
||||
tls = listener_config.get("tls", False)
|
||||
site_tag = listener_config.get("tag", port)
|
||||
|
||||
|
@ -173,7 +174,12 @@ class SynapseHomeServer(HomeServer):
|
|||
root_resource = Resource()
|
||||
|
||||
root_resource = create_resource_tree(resources, root_resource)
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
if tls:
|
||||
for address in bind_addresses:
|
||||
reactor.listenSSL(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -183,9 +189,10 @@ class SynapseHomeServer(HomeServer):
|
|||
root_resource,
|
||||
),
|
||||
self.tls_server_context_factory,
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -194,7 +201,7 @@ class SynapseHomeServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
logger.info("Synapse now listening on port %d", port)
|
||||
|
||||
|
@ -205,6 +212,13 @@ class SynapseHomeServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listener_http(config, listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -212,7 +226,7 @@ class SynapseHomeServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -87,7 +87,8 @@ class MediaRepositoryServer(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"]:
|
||||
|
@ -105,6 +106,11 @@ class MediaRepositoryServer(HomeServer):
|
|||
})
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -113,8 +119,9 @@ class MediaRepositoryServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse media repository now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -122,6 +129,13 @@ class MediaRepositoryServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -129,7 +143,7 @@ class MediaRepositoryServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -121,7 +121,8 @@ class PusherServer(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"]:
|
||||
|
@ -130,6 +131,22 @@ class PusherServer(HomeServer):
|
|||
resources[METRICS_PREFIX] = MetricsResource(self)
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
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
|
||||
)
|
||||
else:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -140,6 +157,7 @@ class PusherServer(HomeServer):
|
|||
),
|
||||
interface=bind_address
|
||||
)
|
||||
|
||||
logger.info("Synapse pusher now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -147,6 +165,13 @@ class PusherServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -154,7 +179,7 @@ class PusherServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -289,7 +289,8 @@ class SynchrotronServer(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"]:
|
||||
|
@ -310,6 +311,11 @@ class SynchrotronServer(HomeServer):
|
|||
})
|
||||
|
||||
root_resource = create_resource_tree(resources, Resource())
|
||||
|
||||
if bind_address:
|
||||
bind_addresses.append(bind_address)
|
||||
|
||||
for address in bind_addresses:
|
||||
reactor.listenTCP(
|
||||
port,
|
||||
SynapseSite(
|
||||
|
@ -318,8 +324,9 @@ class SynchrotronServer(HomeServer):
|
|||
listener_config,
|
||||
root_resource,
|
||||
),
|
||||
interface=bind_address
|
||||
interface=address
|
||||
)
|
||||
|
||||
logger.info("Synapse synchrotron now listening on port %d", port)
|
||||
|
||||
def start_listening(self, listeners):
|
||||
|
@ -327,6 +334,13 @@ class SynchrotronServer(HomeServer):
|
|||
if listener["type"] == "http":
|
||||
self._listen_http(listener)
|
||||
elif listener["type"] == "manhole":
|
||||
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(
|
||||
|
@ -334,7 +348,7 @@ class SynchrotronServer(HomeServer):
|
|||
password="rabbithole",
|
||||
globals={"hs": self},
|
||||
),
|
||||
interface=listener.get("bind_address", '127.0.0.1')
|
||||
interface=address
|
||||
)
|
||||
else:
|
||||
logger.warn("Unrecognized listener type: %s", listener["type"])
|
||||
|
|
|
@ -155,9 +155,14 @@ class ServerConfig(Config):
|
|||
# The port to listen for HTTPS requests on.
|
||||
port: %(bind_port)s
|
||||
|
||||
# Local interface to listen on.
|
||||
# The empty string will cause synapse to listen on all interfaces.
|
||||
bind_address: ''
|
||||
# Local addresses to listen on.
|
||||
# This will listen on all IPv4 addresses by default.
|
||||
bind_addresses:
|
||||
- '0.0.0.0'
|
||||
# Uncomment to listen on all IPv6 interfaces
|
||||
# N.B: On at least Linux this will also listen on all IPv4
|
||||
# addresses, so you will need to comment out the line above.
|
||||
# - '::'
|
||||
|
||||
# This is a 'http' listener, allows us to specify 'resources'.
|
||||
type: http
|
||||
|
@ -188,7 +193,7 @@ class ServerConfig(Config):
|
|||
# For when matrix traffic passes through loadbalancer that unwraps TLS.
|
||||
- port: %(unsecure_port)s
|
||||
tls: false
|
||||
bind_address: ''
|
||||
bind_addresses: ['0.0.0.0']
|
||||
type: http
|
||||
|
||||
x_forwarded: false
|
||||
|
|
Loading…
Reference in New Issue