![]() ![]() If your server addresses change frequently, it would be easier to say to HAProxy “I want to access the server named. Setting the destination address dynamically is handy, although in some contexts it is not enough. Route the connections to a specific server by using its internal DNS name The destination IP address is in the IP network 10.0.12.0/24.The destination IP address is 192.168.0.202.The destination IP address is 192.168.0.201.Here we ask to HAProxy to accept the connection only when one of the following is true: Set an ACL that controls which address can be reached, like this: This kind of setup could drive your security officer a little bit crazy. Setting the destination address dynamically is handy, but it allows your clients to reach any server behind your HAProxy server, including your HAProxy server itself. Notice that the servername switch is no longer set to a server name, but to the destination IP address. From your clients, you can reach your SSH servers with these commands: We use the SNI content saved earlier for this purpose. The tcp-request content set-dst action allows you to dynamically set the destination server IP address. Replace the use_backend directive with a default_backend directive that points to a single backend: Before we had set the backend dynamically by using the use_backend directive with the fetch method ssl_fc_sni. This time we use only one backend and we set the destination address dynamically. Instead we could say “Hey HAProxy, the server I want to reach is located here!” Route the connections to a specific serverĪlthough the previous method works well, the list of available servers is static and in some contexts this can be annoying. To make this command shorter, consider creating a bash alias or a script. The servername switch lets you set the SNI field content. We set it to dummyName because we’re specifying the server name using the Prox圜ommand field instead. Note that the ssh command requires you to send the name of the server that you wish to connect to. Each backend name is the server name to expect in the SNI:įrom your clients, you can reach your SSH servers with these commands: The use_backend directive uses the ssl_fc_sni fetch to extract the SNI for choosing the correct backend.The tcp-request content set-var rules save the SNI field content in in-memory variables, which are logged by the log-format line.The log-format line sets a specific log format with additional information like the payload validity and the SNI field content, which we’ll use as the destination hint.We chose 2222 instead of the standard SSH port 22 because port 22 is likely already used to host SSH connections to the HAProxy server itself. The bind line says the frontend listens on TCP port 2222 and expects TLS connections.Let’s say you have an HAProxy server (IP address 172.16.0.10) between your clients and the following three servers: Route the connections to a predefined list of backend servers We will make no use of TLS’s cryptographic features. Or, said another way, we will wrap our connections with TLS, but we do so simply to leverage SNI so that the client can tell us which server they want to connect to. ![]() We’ll use the TLS protocol and its SNI extension together with the SSH Prox圜ommand feature. So, we have to wrap the connections inside another protocol that will help on that point. As said previously, HAProxy doesn’t analyze the SSH protocol and, anyway, this protocol doesn’t provide any hint about the destination. In order to route the SSH connections to different servers, you have to know which server the user wants to access.
0 Comments
Leave a Reply. |