mirror of
https://github.com/juanfont/headscale.git
synced 2025-04-30 01:19:47 +02:00
Merge 20e2f7806d
into 109989005d
This commit is contained in:
commit
06e94b9a58
@ -2,27 +2,31 @@
|
|||||||
|
|
||||||
Headscale aims to implement a self-hosted, open source alternative to the Tailscale control server. Headscale's goal is
|
Headscale aims to implement a self-hosted, open source alternative to the Tailscale control server. Headscale's goal is
|
||||||
to provide self-hosters and hobbyists with an open-source server they can use for their projects and labs. This page
|
to provide self-hosters and hobbyists with an open-source server they can use for their projects and labs. This page
|
||||||
provides on overview of headscale's feature and compatibility with the Tailscale control server:
|
provides on overview of Headscale's feature and compatibility with the Tailscale control server:
|
||||||
|
|
||||||
- [x] Full "base" support of Tailscale's features
|
- [x] Full "base" support of Tailscale's features
|
||||||
- [x] Node registration
|
- [x] Node registration
|
||||||
- [x] Interactive
|
- [x] Interactive
|
||||||
- [x] Pre authenticated key
|
- [x] Pre authenticated key
|
||||||
- [x] [DNS](https://tailscale.com/kb/1054/dns)
|
- [x] [DNS](../ref/dns.md)
|
||||||
- [x] [MagicDNS](https://tailscale.com/kb/1081/magicdns)
|
- [x] [MagicDNS](https://tailscale.com/kb/1081/magicdns)
|
||||||
- [x] [Global and restricted nameservers (split DNS)](https://tailscale.com/kb/1054/dns#nameservers)
|
- [x] [Global and restricted nameservers (split DNS)](https://tailscale.com/kb/1054/dns#nameservers)
|
||||||
- [x] [search domains](https://tailscale.com/kb/1054/dns#search-domains)
|
- [x] [search domains](https://tailscale.com/kb/1054/dns#search-domains)
|
||||||
- [x] [Extra DNS records (headscale only)](../ref/dns.md#setting-extra-dns-records)
|
- [x] [Extra DNS records (Headscale only)](../ref/dns.md#setting-extra-dns-records)
|
||||||
- [x] [Taildrop (File Sharing)](https://tailscale.com/kb/1106/taildrop)
|
- [x] [Taildrop (File Sharing)](https://tailscale.com/kb/1106/taildrop)
|
||||||
- [x] Routing advertising (including exit nodes)
|
- [x] [Routes](../ref/routes.md)
|
||||||
|
- [x] [Subnet routers](../ref/routes.md#subnet-router)
|
||||||
|
- [x] [Exit nodes](../ref/routes.md#exit-node)
|
||||||
- [x] Dual stack (IPv4 and IPv6)
|
- [x] Dual stack (IPv4 and IPv6)
|
||||||
- [x] Ephemeral nodes
|
- [x] Ephemeral nodes
|
||||||
- [x] Embedded [DERP server](https://tailscale.com/kb/1232/derp-servers)
|
- [x] Embedded [DERP server](https://tailscale.com/kb/1232/derp-servers)
|
||||||
- [x] Access control lists ([GitHub label "policy"](https://github.com/juanfont/headscale/labels/policy%20%F0%9F%93%9D))
|
- [x] Access control lists ([GitHub label "policy"](https://github.com/juanfont/headscale/labels/policy%20%F0%9F%93%9D))
|
||||||
- [x] ACL management via API
|
- [x] ACL management via API
|
||||||
- [x] `autogroup:internet`
|
- [x] Some [Autogroups](https://tailscale.com/kb/1396/targets#autogroups), currently: `autogroup:internet`,
|
||||||
- [ ] `autogroup:self`
|
`autogroup:nonroot`
|
||||||
- [ ] `autogroup:member`
|
- [x] [Auto approvers](https://tailscale.com/kb/1337/acl-syntax#auto-approvers) for [subnet
|
||||||
|
routers](../ref/routes.md#automatically-approve-routes-of-a-subnet-router) and [exit
|
||||||
|
nodes](../ref/routes.md#automatically-approve-an-exit-node-with-auto-approvers)
|
||||||
* [ ] Node registration using Single-Sign-On (OpenID Connect) ([GitHub label "OIDC"](https://github.com/juanfont/headscale/labels/OIDC))
|
* [ ] Node registration using Single-Sign-On (OpenID Connect) ([GitHub label "OIDC"](https://github.com/juanfont/headscale/labels/OIDC))
|
||||||
- [x] Basic registration
|
- [x] Basic registration
|
||||||
- [x] Update user profile from identity provider
|
- [x] Update user profile from identity provider
|
||||||
|
@ -76,14 +76,14 @@ hostname and port combination "http://hostname-in-magic-dns.myvpn.example.com:30
|
|||||||
|
|
||||||
=== "Query with dig"
|
=== "Query with dig"
|
||||||
|
|
||||||
```shell
|
```console
|
||||||
dig +short grafana.myvpn.example.com
|
dig +short grafana.myvpn.example.com
|
||||||
100.64.0.3
|
100.64.0.3
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Query with drill"
|
=== "Query with drill"
|
||||||
|
|
||||||
```shell
|
```console
|
||||||
drill -Q grafana.myvpn.example.com
|
drill -Q grafana.myvpn.example.com
|
||||||
100.64.0.3
|
100.64.0.3
|
||||||
```
|
```
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
# Exit Nodes
|
|
||||||
|
|
||||||
## On the node
|
|
||||||
|
|
||||||
Register the node and make it advertise itself as an exit node:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ sudo tailscale up --login-server https://headscale.example.com --advertise-exit-node
|
|
||||||
```
|
|
||||||
|
|
||||||
If the node is already registered, it can advertise exit capabilities like this:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ sudo tailscale set --advertise-exit-node
|
|
||||||
```
|
|
||||||
|
|
||||||
To use a node as an exit node, IP forwarding must be enabled on the node. Check the official [Tailscale documentation](https://tailscale.com/kb/1019/subnets/?tab=linux#enable-ip-forwarding) for how to enable IP forwarding.
|
|
||||||
|
|
||||||
## On the control server
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ headscale nodes list-routes
|
|
||||||
ID | Hostname | Approved | Available | Serving
|
|
||||||
1 | ts-head-ruqsg8 | | 0.0.0.0/0, ::/0 |
|
|
||||||
2 | ts-unstable-fq7ob4 | | 0.0.0.0/0, ::/0 |
|
|
||||||
|
|
||||||
# Note that for exit nodes, it is sufficient to approve either the IPv4 or IPv6 route. The other will be added automatically.
|
|
||||||
$ headscale nodes approve-routes --identifier 1 --routes 0.0.0.0/0
|
|
||||||
Node updated
|
|
||||||
|
|
||||||
$ headscale nodes list-routes
|
|
||||||
ID | Hostname | Approved | Available | Serving
|
|
||||||
1 | ts-head-ruqsg8 | 0.0.0.0/0, ::/0 | 0.0.0.0/0, ::/0 | 0.0.0.0/0, ::/0
|
|
||||||
2 | ts-unstable-fq7ob4 | | 0.0.0.0/0, ::/0 |
|
|
||||||
```
|
|
||||||
|
|
||||||
## On the client
|
|
||||||
|
|
||||||
The exit node can now be used with:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ sudo tailscale set --exit-node phobos
|
|
||||||
```
|
|
||||||
|
|
||||||
Check the official [Tailscale documentation](https://tailscale.com/kb/1103/exit-nodes#use-the-exit-node) for how to do it on your device.
|
|
287
docs/ref/routes.md
Normal file
287
docs/ref/routes.md
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
# Routes
|
||||||
|
Headscale supports route advertising and can be used to manage [subnet routers](https://tailscale.com/kb/1019/subnets)
|
||||||
|
and [exit nodes](https://tailscale.com/kb/1103/exit-nodes) for a tailnet.
|
||||||
|
|
||||||
|
- [Subnet routers](#subnet-router) may be used to connect an existing network such as a virtual
|
||||||
|
private cloud or an on-premise network with your tailnet. Use a subnet router to access devices where Tailscale can't
|
||||||
|
be installed or to gradually rollout Tailscale.
|
||||||
|
- [Exit nodes](#exit-node) can be used to route all Internet traffic for another Tailscale
|
||||||
|
node. Use it to securely access the Internet on an untrusted Wi-Fi or to access online services that expect traffic
|
||||||
|
from a specific IP address.
|
||||||
|
|
||||||
|
## Subnet router
|
||||||
|
The setup of a subnet router requires double opt-in, once from a subnet router and once on the control server to allow
|
||||||
|
its use within the tailnet. Optionally, use [`autoApprovers` to automatically approve routes from a subnet
|
||||||
|
router](#automatically-approve-routes-of-a-subnet-router).
|
||||||
|
|
||||||
|
### Setup a subnet router
|
||||||
|
#### Configure a node as subnet router
|
||||||
|
|
||||||
|
Register a node and advertise the routes it should handle as comma separated list:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale up --login-server <YOUR_HEADSCALE_URL> --advertise-routes=10.0.0.0/8,192.168.0.0/24
|
||||||
|
```
|
||||||
|
|
||||||
|
If the node is already registered, it can advertise new routes or update previously announced routes with:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale set --advertise-routes=10.0.0.0/8,192.168.0.0/24
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, [enable IP forwarding](#enable-ip-forwarding) to route traffic.
|
||||||
|
|
||||||
|
|
||||||
|
#### Enable the subnet router on the control server
|
||||||
|
|
||||||
|
The routes of a tailnet can be displayed with the `headscale nodes list-routes` command. A subnet router with the
|
||||||
|
hostname `myrouter` announced the IPv4 networks `10.0.0.0/8` and `192.168.0.0/24`. Those need to be approved before they
|
||||||
|
can be used.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes list-routes
|
||||||
|
ID | Hostname | Approved | Available | Serving
|
||||||
|
1 | myrouter | | 10.0.0.0/8, 192.168.0.0/24 |
|
||||||
|
```
|
||||||
|
|
||||||
|
Approve all desired routes of a subnet router by specifying them as comma separated list:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes approve-routes --identifier 1 --routes 10.0.0.0/8,192.168.0.0/24
|
||||||
|
Node updated
|
||||||
|
```
|
||||||
|
|
||||||
|
The node `myrouter` can now route the IPv4 networks `10.0.0.0/8` and `192.168.0.0/24` for the tailnet.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes list-routes
|
||||||
|
ID | Hostname | Approved | Available | Serving
|
||||||
|
1 | myrouter | 10.0.0.0/8, 192.168.0.0/24 | 10.0.0.0/8, 192.168.0.0/24 | 10.0.0.0/8, 192.168.0.0/24
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Use the subnet router
|
||||||
|
|
||||||
|
To accept routes advertised by a subnet router on a node:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale set --accept-routes
|
||||||
|
```
|
||||||
|
|
||||||
|
Please refer to the official [Tailscale
|
||||||
|
documentation](https://tailscale.com/kb/1019/subnets#use-your-subnet-routes-from-other-devices) for how to use a subnet
|
||||||
|
router on different operating systems.
|
||||||
|
|
||||||
|
### Restrict the use of a subnet router with ACL
|
||||||
|
The routes announced by subnet routers are available to the nodes in a tailnet. By default, without an ACL enabled, all
|
||||||
|
nodes can accept and use such routes. Configure an ACL to explicitly manage who can use routes.
|
||||||
|
|
||||||
|
The ACL snippet below defines three hosts, a subnet router `router`, a regular node `node` and `service.example.net` as
|
||||||
|
internal service that can be reached via a route on the subnet router `router`. The first ACL rule allows anyone to see
|
||||||
|
the subnet router `router` without allowing access to any service of the subnet router itself. The second ACL rule
|
||||||
|
allows the node `node` to access `service.example.net` on port 80 and 443 which is reachable via the subnet router.
|
||||||
|
|
||||||
|
```json title="Access the routes of a subnet router without the subnet router itself"
|
||||||
|
{
|
||||||
|
"hosts": {
|
||||||
|
"router": "100.64.0.1/32",
|
||||||
|
"node": "100.64.0.2/32",
|
||||||
|
"service.example.net": "192.168.0.1/32"
|
||||||
|
},
|
||||||
|
"acls": [
|
||||||
|
{
|
||||||
|
"action": "accept",
|
||||||
|
"src": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"dst": [
|
||||||
|
"router:0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "accept",
|
||||||
|
"src": [
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
"dst": [
|
||||||
|
"service.example.net:80,443"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Automatically approve routes of a subnet router
|
||||||
|
The initial setup of a subnet router usually requires manual approval of their announced routes on the control server
|
||||||
|
before they can be used by a node in a tailnet. Headscale supports the `autoApprovers` section of an ACL to automate the
|
||||||
|
approval of routes served with a subnet router.
|
||||||
|
|
||||||
|
The ACL snippet below defines the tag `tag:router` owned by the user `alice`. This tag is used for `routes` in the
|
||||||
|
`autoApprovers` section. The IPv4 route `192.168.0.0/24` is automatically approved when announced by a new subnet router
|
||||||
|
owned by the user `alice` and that also advertises the tag `tag:router`.
|
||||||
|
|
||||||
|
```json title="Subnet routers owned by alice and tagged with tag:router are automatically approved"
|
||||||
|
{
|
||||||
|
"tagOwners": {
|
||||||
|
"tag:router": [
|
||||||
|
"alice@"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"autoApprovers": {
|
||||||
|
"routes": {
|
||||||
|
"192.168.0.0/24": [
|
||||||
|
"tag:router"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"acls": [
|
||||||
|
// more rules
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Advertise the route `192.168.0.0/24` from a subnet router that also advertises the tag `tag:router` when joining the tailnet:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale up --login-server <YOUR_HEADSCALE_URL> --advertise-tags tag:router --advertise-routes 192.168.0.0/24
|
||||||
|
```
|
||||||
|
|
||||||
|
Please see the [official Tailscale documentation](https://tailscale.com/kb/1337/acl-syntax#autoapprovers) for more
|
||||||
|
information on auto approvers.
|
||||||
|
|
||||||
|
## Exit node
|
||||||
|
The setup of an exit node requires double opt-in, once from an exit node and once on the control server to allow its use
|
||||||
|
within the tailnet. Optionally, use [`autoApprovers` to automatically approve an exit
|
||||||
|
node](#automatically-approve-an-exit-node-with-auto-approvers).
|
||||||
|
|
||||||
|
### Setup an exit node
|
||||||
|
#### Configure a node as exit node
|
||||||
|
|
||||||
|
Register a node and make it advertise itself as an exit node:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale up --login-server <YOUR_HEADSCALE_URL> --advertise-exit-node
|
||||||
|
```
|
||||||
|
|
||||||
|
If the node is already registered, it can advertise exit capabilities like this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale set --advertise-exit-node
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, [enable IP forwarding](#enable-ip-forwarding) to route traffic.
|
||||||
|
|
||||||
|
|
||||||
|
#### Enable the exit node on the control server
|
||||||
|
|
||||||
|
The routes of a tailnet can be displayed with the `headscale nodes list-routes` command. An exit node can be recognized
|
||||||
|
by its announced routes: `0.0.0.0/0` for IPv4 and `::/0` for IPv6. The exit node with the hostname `myexit` is already
|
||||||
|
available, but needs to be approved:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes list-routes
|
||||||
|
ID | Hostname | Approved | Available | Serving
|
||||||
|
1 | myexit | | 0.0.0.0/0, ::/0 |
|
||||||
|
```
|
||||||
|
|
||||||
|
For exit nodes, it is sufficient to approve either the IPv4 or IPv6 route. The other will be approved automatically.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes approve-routes --identifier 1 --routes 0.0.0.0/0
|
||||||
|
Node updated
|
||||||
|
```
|
||||||
|
|
||||||
|
The node `myexit` is now approved as exit node for the tailnet:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ headscale nodes list-routes
|
||||||
|
ID | Hostname | Approved | Available | Serving
|
||||||
|
1 | myexit | 0.0.0.0/0, ::/0 | 0.0.0.0/0, ::/0 | 0.0.0.0/0, ::/0
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Use the exit node
|
||||||
|
|
||||||
|
The exit node can now be used on a node with:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale set --exit-node myexit
|
||||||
|
```
|
||||||
|
|
||||||
|
Please refer to the official [Tailscale documentation](https://tailscale.com/kb/1103/exit-nodes#use-the-exit-node) for
|
||||||
|
how to use an exit node on different operating systems.
|
||||||
|
|
||||||
|
### Restrict the use of an exit node with ACL
|
||||||
|
An exit node is offered to all nodes in a tailnet. By default, without an ACL enabled, all nodes in a tailnet can select
|
||||||
|
and use an exit node. Configure `autogroup:internet` in an ACL rule to restrict who can use *any* of the available exit
|
||||||
|
nodes.
|
||||||
|
|
||||||
|
```json title="Example use of autogroup:internet"
|
||||||
|
{
|
||||||
|
"acls": [
|
||||||
|
{
|
||||||
|
"action": "accept",
|
||||||
|
"src": [
|
||||||
|
"..."
|
||||||
|
],
|
||||||
|
"dst": [
|
||||||
|
"autogroup:internet:*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Automatically approve an exit node with auto approvers
|
||||||
|
The initial setup of an exit node usually requires manual approval on the control server before it can be used by a node
|
||||||
|
in a tailnet. Headscale supports the `autoApprovers` section of an ACL to automate the approval of a new exit node as
|
||||||
|
soon as it joins the tailnet.
|
||||||
|
|
||||||
|
The ACL snippet below defines the tag `tag:exit` owned by the user `alice`. This tag is used for `exitNode` in the
|
||||||
|
`autoApprovers` section. A new exit node which is owned by the user `alice` and that also advertises the tag `tag:exit`
|
||||||
|
is automatically approved:
|
||||||
|
|
||||||
|
```json title="Exit nodes owned by alice and tagged with tag:exit are automatically approved"
|
||||||
|
{
|
||||||
|
"tagOwners": {
|
||||||
|
"tag:exit": [
|
||||||
|
"alice@"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"autoApprovers": {
|
||||||
|
"exitNode": [
|
||||||
|
"tag:exit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"acls": [
|
||||||
|
// more rules
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Advertise a node as exit node and also advertise the tag `tag:exit` when joining the tailnet:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo tailscale up --login-server <YOUR_HEADSCALE_URL> --advertise-tags tag:exit --advertise-exit-node
|
||||||
|
```
|
||||||
|
|
||||||
|
Please see the [official Tailscale documentation](https://tailscale.com/kb/1337/acl-syntax#autoapprovers) for more
|
||||||
|
information on auto approvers.
|
||||||
|
|
||||||
|
## High availability
|
||||||
|
|
||||||
|
Headscale has limited support for high availability routing. Multiple subnet routers with overlapping routes or multiple
|
||||||
|
exit nodes can be used to provide high availability for users. If one router node goes offline, another one can serve
|
||||||
|
the same routes to clients. Please see the official [Tailscale documentation on high
|
||||||
|
availability](https://tailscale.com/kb/1115/high-availability#subnet-router-high-availability) for details.
|
||||||
|
|
||||||
|
!!! bug
|
||||||
|
|
||||||
|
In certain situations it might take up to 16 minutes for Headscale to detect a node as offline. A failover node
|
||||||
|
might not be selected fast enough, if such a node is used as subnet router or exit node causing service
|
||||||
|
interruptions for clients. See [issue 2129](https://github.com/juanfont/headscale/issues/2129) for more information.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
### Enable IP forwarding
|
||||||
|
|
||||||
|
A subnet router or exit node is routing traffic on behalf of other nodes and thus requires IP forwarding. Check the
|
||||||
|
official [Tailscale documentation](https://tailscale.com/kb/1019/subnets/?tab=linux#enable-ip-forwarding) for how to
|
||||||
|
enable IP forwarding.
|
@ -52,7 +52,7 @@ If you want to validate that certificate renewal completed successfully, this ca
|
|||||||
1. Open the URL for your headscale server in your browser of choice, and manually inspecting the expiry date of the certificate you receive.
|
1. Open the URL for your headscale server in your browser of choice, and manually inspecting the expiry date of the certificate you receive.
|
||||||
2. Or, check remotely from CLI using `openssl`:
|
2. Or, check remotely from CLI using `openssl`:
|
||||||
|
|
||||||
```bash
|
```console
|
||||||
$ openssl s_client -servername [hostname] -connect [hostname]:443 | openssl x509 -noout -dates
|
$ openssl s_client -servername [hostname] -connect [hostname]:443 | openssl x509 -noout -dates
|
||||||
(...)
|
(...)
|
||||||
notBefore=Feb 8 09:48:26 2024 GMT
|
notBefore=Feb 8 09:48:26 2024 GMT
|
||||||
|
@ -140,13 +140,13 @@ Additionally, the debug container includes a minimalist Busybox shell.
|
|||||||
|
|
||||||
To launch a shell in the container, use:
|
To launch a shell in the container, use:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
docker run -it headscale/headscale:x.x.x-debug sh
|
docker run -it headscale/headscale:x.x.x-debug sh
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also execute commands directly, such as `ls /ko-app` in this example:
|
You can also execute commands directly, such as `ls /ko-app` in this example:
|
||||||
|
|
||||||
```
|
```shell
|
||||||
docker run headscale/headscale:x.x.x-debug ls /ko-app
|
docker run headscale/headscale:x.x.x-debug ls /ko-app
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ type ACLTest struct {
|
|||||||
Deny []string `json:"deny,omitempty"`
|
Deny []string `json:"deny,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// AutoApprovers specify which users (users?), groups or tags have their advertised routes
|
// AutoApprovers specify which users, groups or tags have their advertised routes
|
||||||
// or exit node status automatically enabled.
|
// or exit node status automatically enabled.
|
||||||
type AutoApprovers struct {
|
type AutoApprovers struct {
|
||||||
Routes map[string][]string `json:"routes"`
|
Routes map[string][]string `json:"routes"`
|
||||||
|
@ -79,7 +79,8 @@ plugins:
|
|||||||
android-client.md: usage/connect/android.md
|
android-client.md: usage/connect/android.md
|
||||||
apple-client.md: usage/connect/apple.md
|
apple-client.md: usage/connect/apple.md
|
||||||
dns-records.md: ref/dns.md
|
dns-records.md: ref/dns.md
|
||||||
exit-node.md: ref/exit-node.md
|
exit-node.md: ref/routes.md
|
||||||
|
ref/exit-node.md: ref/routes.md
|
||||||
faq.md: about/faq.md
|
faq.md: about/faq.md
|
||||||
iOS-client.md: usage/connect/apple.md#ios
|
iOS-client.md: usage/connect/apple.md#ios
|
||||||
oidc.md: ref/oidc.md
|
oidc.md: ref/oidc.md
|
||||||
@ -179,7 +180,7 @@ nav:
|
|||||||
- Reference:
|
- Reference:
|
||||||
- Configuration: ref/configuration.md
|
- Configuration: ref/configuration.md
|
||||||
- OIDC authentication: ref/oidc.md
|
- OIDC authentication: ref/oidc.md
|
||||||
- Exit node: ref/exit-node.md
|
- Routes: ref/routes.md
|
||||||
- TLS: ref/tls.md
|
- TLS: ref/tls.md
|
||||||
- ACLs: ref/acls.md
|
- ACLs: ref/acls.md
|
||||||
- DNS: ref/dns.md
|
- DNS: ref/dns.md
|
||||||
|
Loading…
Reference in New Issue
Block a user