mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-01 16:03:55 +08:00
79562c4aaf
* Refactor `enroll-resources/agents` Give the section a more reasonable information architecture. The section includes two children, one of which is a subsection (Joining Services) and another is an introductory overview. Move `agents/introduction.mdx` to make it the new `agents/agents.mdx` section index page. This page is a high-level introduction, so it makes more sense as the section index. Also edit the page to: - Remove an unnecessary list of links to sections for each agent service. - Condense the architecture overview H2 to pave the way for making this page more of a section intro and less of an intro/conceptual hybrid guide. Move "Join services" guides to make them direct descendents of the `agents` directory. This way, the substantial content of the section can have a higher directory level. Extract the information on adding a service to an existing agent into a full how-to guide. This makes the instructions more visible. Also include example snippets within the guide. * Respond to mmcallister feedback - Fix spelling. - Soften the language about recommending the Terraform provider and Kubernetes operator so we don't need to justify a recommendation. Instead, let readers decide for themselves. * Respond to stevenGravy feedback Clarify the need to create a token for an additional service you want to run. * Fix redirects
263 lines
10 KiB
Plaintext
263 lines
10 KiB
Plaintext
---
|
|
title: Networking
|
|
description: This reference explains the networking requirements of a Teleport cluster, including its public address, ports, and support for HTTP CONNECT proxies.
|
|
---
|
|
|
|
A Teleport cluster is a distributed system that may comprise a number of
|
|
networks. On Teleport Enterprise (Cloud), for example, the Auth Service and
|
|
Proxy Service run in Teleport-managed infrastructure, while Teleport users
|
|
manage Agents and `tbot` instances.
|
|
|
|
This reference guide describes the networking requirements of a Teleport
|
|
cluster.
|
|
|
|
## Public address
|
|
|
|
<Tabs>
|
|
<TabItem scope={["oss", "enterprise"]} label="Self-Hosted">
|
|
|
|
All Teleport services (e.g., the Proxy Service, Auth Service, and agents) have an
|
|
optional `public_addr` property that you can modify in each service's
|
|
configuration file. The public address can take an IP or a DNS name. It can also
|
|
be a list of values:
|
|
|
|
```yaml
|
|
public_addr: ["service1.example.com", "service2.example.com"]
|
|
```
|
|
|
|
<Admonition
|
|
type="warning"
|
|
title="Note"
|
|
>
|
|
Only a single Proxy Service `public_addr` should be configured. Attempting
|
|
to have multiple addresses can result in redirects to the first listed address
|
|
that may not be available to the client.
|
|
</Admonition>
|
|
|
|
Specifying a public address for a Teleport service may be useful in the
|
|
following use cases:
|
|
|
|
- You have multiple identical services, e.g., Proxy Service instances, behind a
|
|
load balancer.
|
|
- You want Teleport to issue an SSH certificate for the service with additional
|
|
principals, e.g., host names.
|
|
</TabItem>
|
|
<TabItem scope={["cloud", "team"]} label="Cloud-Hosted">
|
|
|
|
On Teleport Enterprise (Cloud) the Teleport Agent services always
|
|
connect using reverse tunnels so there is no need to set a public address for an Agent.
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
## HTTP CONNECT proxies
|
|
|
|
Some networks funnel all connections through a proxy server where they can be
|
|
audited and access control rules can be applied. For these scenarios, Teleport
|
|
supports HTTP CONNECT tunneling. HTTP CONNECT applies to:
|
|
|
|
- `tsh` in all cases.
|
|
- Teleport services, such as the SSH Service and Database Service, that dial back to the Teleport Proxy Service.
|
|
|
|
To use HTTP CONNECT tunneling, set the `HTTPS_PROXY` and `HTTP_PROXY`
|
|
environment variables when running Teleport. You can also optionally set the
|
|
`NO_PROXY` environment variable to avoid use of the proxy when accessing
|
|
specified hosts/netmasks/ports.
|
|
|
|
By default, Teleport installations based on package managers (such as `apt` and
|
|
`yum`) configure the `teleport` systemd unit to read environment variables from
|
|
the file `/etc/default/teleport` by using the `EnvironmentFile` field:
|
|
|
|
```ini
|
|
(!/examples/systemd/teleport.service!)
|
|
```
|
|
|
|
To configure HTTP CONNECT tunneling, you can assign these environment variables
|
|
within `/etc/default/teleport` on machines that run Teleport binaries. Use the
|
|
following example, replacing `proxy.example.com` with the address of your proxy:
|
|
|
|
```
|
|
HTTP_PROXY=http://proxy.example.com:8080/
|
|
HTTPS_PROXY=http://proxy.example.com:8080/
|
|
NO_PROXY=localhost,127.0.0.1,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8
|
|
```
|
|
|
|
When Teleport builds and establishes the reverse tunnel to the main cluster, it will funnel all traffic through the proxy. Specifically, if using the default configuration, Teleport will tunnel ports `3024` (SSH, reverse tunnel) and `3080` (HTTPS, establishing trust) through the proxy.
|
|
If you don't want to proxy some of this traffic (for example, proxying HTTPS but not SSH), assign `NO_PROXY` to the address of the Teleport Proxy Service endpoint you want to exclude from HTTP_CONNECT tunneling in `host:port` format.
|
|
|
|
For example, you can modify the environment file at `/etc/default/teleport` on
|
|
each machine that runs a Teleport binary to resemble the following:
|
|
|
|
```
|
|
HTTP_PROXY=http://httpproxy.example.com:8080/
|
|
HTTPS_PROXY=http://httpproxy.example.com:8080/
|
|
NO_PROXY=teleportproxy.example.com:3024
|
|
```
|
|
|
|
The value of `HTTPS_PROXY` or `HTTP_PROXY` should be in the format
|
|
`scheme://[user[:password]@]host:port` where scheme is either `https` or `http` . If the value is
|
|
`host:port` , Teleport will prepend `http` .
|
|
|
|
<Admonition
|
|
type="warning"
|
|
title="Note"
|
|
>
|
|
`localhost` and `127.0.0.1` are invalid values for the proxy host. If for some reason your proxy runs locally, you'll need to provide some other DNS name or a private IP address for it.
|
|
</Admonition>
|
|
|
|
<Admonition
|
|
type="warning"
|
|
title="Note"
|
|
>
|
|
The Proxy Service also respects `HTTPS_PROXY` and `HTTP_PROXY` when connecting to a local Kubernetes cluster, which may not work. To fix this, add `kube.teleport.cluster.local` to `NO_PROXY`.
|
|
</Admonition>
|
|
|
|
## Ports
|
|
|
|
This section describes the ports you should open on your Teleport instances.
|
|
|
|
<Tabs>
|
|
<TabItem scope={["oss", "enterprise"]} label="Self-Hosted">
|
|
|
|
### Proxy Service ports
|
|
|
|
<Admonition
|
|
type="tip"
|
|
title="Note"
|
|
>
|
|
|
|
To get a listing of the assigned ports for an instance of the Teleport Proxy
|
|
Service, use the following command:
|
|
|
|
```code
|
|
$ curl https://teleport.example.com:443/webapi/ping | jq
|
|
```
|
|
|
|
Note that if `auth_service.proxy_listener_mode` is set to `multiplex` in your
|
|
Teleport configuration, that means only a single port is used for
|
|
multiple services through the Proxy.
|
|
|
|
</Admonition>
|
|
|
|
#### Ports with TLS routing
|
|
|
|
TLS routing is enabled by default. In this mode, all connections to a Teleport
|
|
service (e.g., the Teleport SSH Service or Kubernetes) are routed through the
|
|
Proxy Service's public web address.
|
|
|
|
Read more in our [TLS Routing](architecture/tls-routing.mdx) guide.
|
|
|
|
| Port | Downstream Service | Description |
|
|
| - | - | - |
|
|
| 443 | Proxy Service | In TLS Routing mode, the Proxy handles all protocols, including Web UI, HTTPS, Kubernetes, SSH, and all databases on a single port. |
|
|
| 3021 | Proxy Service | Port used by Teleport Proxy Service instances to dial agents in Proxy Peering mode. |
|
|
|
|
#### Ports without TLS routing
|
|
|
|
In some cases, administrators may want to use separate ports for different services.
|
|
In those cases, they can set up separate listeners in the config file.
|
|
|
|
| Port | Downstream Service | Description |
|
|
| - | - | - |
|
|
| 3021 | Proxy Service | Port used by Teleport Proxy Service instances to dial agents in Proxy Peering mode. |
|
|
| 3023 | All clients | SSH port clients connect to. The Proxy Service will forward this connection to port `3022` on the destination service or use a reverse tunnel connection. |
|
|
| 3024 | Auth Service | SSH port used to create reverse SSH tunnels from behind-firewall environments into a trusted Proxy Service instance. All Teleport services (e.g., the SSH Service and Database Service) connecting through the Proxy Service will use this port to form their reverse tunnel connections.|
|
|
| 3080 or 443 | Proxy Service | HTTPS connection to authenticate `tsh` users into the cluster. The same connection is used to serve a Web UI. |
|
|
| 3036 | Database Service | Traffic to MySQL databases.|
|
|
| 5432 | Database Service | Traffic to Postgres databases.|
|
|
| 27017 | Database Service | Traffic to MongoDB instances.|
|
|
| 6379 | Database Service | Traffic to Redis instances.|
|
|
|
|
### Auth Service ports
|
|
|
|
| Port | Downstream Service | Description |
|
|
| - | - | - |
|
|
| 3025 | All Teleport services | TLS port used by the Auth Service to serve its gRPC API to other Teleport services in a cluster.|
|
|
|
|
</TabItem>
|
|
<TabItem scope={["cloud", "team"]} label="Cloud-Hosted">
|
|
|
|
### Proxy Service ports
|
|
|
|
Cloud-hosted Teleport deployments allocate a different set of ports to each
|
|
tenant's Proxy Service. To see which ports are available for your Teleport
|
|
tenant, run a command similar to the following, replacing `example.teleport.sh`
|
|
with your tenant domain:
|
|
|
|
```code
|
|
$ curl https://example.teleport.sh/webapi/ping | jq '.proxy'
|
|
```
|
|
|
|
The output should resemble the following, including the unique ports assigned to
|
|
your tenant:
|
|
|
|
```json
|
|
{
|
|
"kube": {
|
|
"enabled": true,
|
|
"listen_addr": "0.0.0.0:3080"
|
|
},
|
|
"ssh": {
|
|
"listen_addr": "0.0.0.0:3080",
|
|
"tunnel_listen_addr": "0.0.0.0:3080",
|
|
"web_listen_addr": "0.0.0.0:3080",
|
|
"public_addr": "example.teleport.sh:443",
|
|
"dial_timeout": 30000000000
|
|
},
|
|
"db": {
|
|
"postgres_listen_addr": "0.0.0.0:3080",
|
|
"mysql_listen_addr": "0.0.0.0:3080"
|
|
},
|
|
"tls_routing_enabled": true
|
|
}
|
|
```
|
|
|
|
This output also indicates whether TLS routing is enabled for your tenant. When
|
|
TLS routing is enabled, connections to a Teleport service (e.g., the Teleport
|
|
SSH Service) are routed through the Proxy Service's public web address, rather
|
|
than through a port allocated to that service.
|
|
|
|
In this case, you can see that TLS routing is enabled, and that the Proxy
|
|
Service's public web address (`ssh.public_addr`) is `mytenant.teleport.sh:443`.
|
|
|
|
Read more in our [TLS Routing](architecture/tls-routing.mdx) guide.
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
### Agent ports
|
|
|
|
Teleport Agents dial the Teleport Proxy Service to establish a reverse tunnel.
|
|
Client traffic flows via the Proxy Service to the agent, and the agent forwards
|
|
traffic to resources in your infrastructure.
|
|
|
|
As a result, for Teleport processes running agents, e.g., instances of the SSH
|
|
Service, Kubernetes Service, and other services that protect resources in your
|
|
infrastructure, there is no need to open ports on the machines running the
|
|
agents to the public internet.
|
|
|
|
### Direct connections to agents
|
|
|
|
If you run a self-hosted Teleport cluster, you can join an agent [directly to
|
|
the Teleport Auth Service](../enroll-resources/agents/join-token.mdx).
|
|
In this setup, certain Teleport services open their own listeners rather than
|
|
accepting connections via reverse tunnel. The Proxy Service connects to these
|
|
agent services by dialing them directly.
|
|
|
|
The table below describes the ports that each Teleport service opens for proxied
|
|
traffic:
|
|
|
|
| Port | Service | Traffic Type |
|
|
| - | - | - |
|
|
| 3022 | SSH Service | Incoming SSH connections.|
|
|
| 3026 | Kubernetes Service | HTTPS traffic to a Kubernetes API server.|
|
|
| 3028 | Windows Desktop Service | Teleport Desktop Protocol traffic from Teleport clients.|
|
|
|
|
You can only access enrolled applications and desktops through the Teleport
|
|
Proxy Service. The Teleport Application Service and Teleport Database Service
|
|
use reverse tunnel connections through the Teleport Proxy Service and cannot
|
|
expose ports directly.
|
|
|
|
<Admonition type="important">
|
|
Direct auth joining is only supported for ssh and kube agents. Application, database, and other discovery-based features are not supported when joining auth directly.
|
|
</Admonition> |