2021-10-19 20:59:33 +02:00
|
|
|
# Running headscale
|
|
|
|
|
2021-10-21 20:54:29 +02:00
|
|
|
1. Download the headscale binary https://github.com/juanfont/headscale/releases, and place it somewhere in your $PATH or use the docker container
|
2021-10-19 20:59:33 +02:00
|
|
|
|
|
|
|
```shell
|
|
|
|
docker pull headscale/headscale:x.x.x
|
|
|
|
```
|
|
|
|
|
|
|
|
<!--
|
|
|
|
or
|
|
|
|
```shell
|
|
|
|
docker pull ghrc.io/juanfont/headscale:x.x.x
|
|
|
|
``` -->
|
|
|
|
|
|
|
|
2. (Optional, you can also use SQLite) Get yourself a PostgreSQL DB running
|
|
|
|
|
|
|
|
```shell
|
2021-10-21 20:57:18 +02:00
|
|
|
docker run --name headscale \
|
2021-10-21 21:01:52 +02:00
|
|
|
-e POSTGRES_DB=headscale
|
2021-10-21 20:57:18 +02:00
|
|
|
-e POSTGRES_USER=foo \
|
|
|
|
-e POSTGRES_PASSWORD=bar \
|
|
|
|
-p 5432:5432 \
|
|
|
|
-d postgres
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
|
2021-10-21 20:54:29 +02:00
|
|
|
3. Create a WireGuard private key and headscale configuration
|
2021-10-19 20:59:33 +02:00
|
|
|
|
|
|
|
```shell
|
|
|
|
wg genkey > private.key
|
|
|
|
|
2021-10-20 00:17:47 +02:00
|
|
|
cp config.yaml.example config.yaml
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
|
2021-10-19 23:41:08 +02:00
|
|
|
4. Create a namespace
|
2021-10-19 20:59:33 +02:00
|
|
|
|
|
|
|
```shell
|
|
|
|
headscale namespaces create myfirstnamespace
|
|
|
|
```
|
|
|
|
|
|
|
|
or docker:
|
|
|
|
|
|
|
|
the db.sqlite mount is only needed if you use sqlite
|
|
|
|
|
|
|
|
```shell
|
|
|
|
touch db.sqlite
|
2021-10-19 23:22:56 +02:00
|
|
|
docker run \
|
|
|
|
-v $(pwd)/private.key:/private.key \
|
|
|
|
-v $(pwd)/config.json:/config.json \
|
|
|
|
-v $(pwd)/derp.yaml:/derp.yaml \
|
|
|
|
-v $(pwd)/db.sqlite:/db.sqlite \
|
|
|
|
-p 127.0.0.1:8080:8080 \
|
|
|
|
headscale/headscale:x.x.x \
|
|
|
|
headscale namespaces create myfirstnamespace
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
or if your server is already running in docker:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
docker exec <container_name> headscale create myfirstnamespace
|
|
|
|
```
|
|
|
|
|
|
|
|
5. Run the server
|
|
|
|
|
|
|
|
```shell
|
|
|
|
headscale serve
|
|
|
|
```
|
|
|
|
|
|
|
|
or docker:
|
|
|
|
|
|
|
|
the db.sqlite mount is only needed if you use sqlite
|
|
|
|
|
|
|
|
```shell
|
2021-10-19 23:22:56 +02:00
|
|
|
docker run \
|
|
|
|
-v $(pwd)/private.key:/private.key \
|
|
|
|
-v $(pwd)/config.json:/config.json \
|
|
|
|
-v $(pwd)/derp.yaml:/derp.yaml \
|
|
|
|
-v $(pwd)/db.sqlite:/db.sqlite \
|
|
|
|
-p 127.0.0.1:8080:8080 \
|
|
|
|
headscale/headscale:x.x.x headscale serve
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
|
2021-10-21 20:54:29 +02:00
|
|
|
6. If you used tailscale.com before in your nodes, make sure you clear the tailscaled data folder
|
2021-10-19 20:59:33 +02:00
|
|
|
|
|
|
|
```shell
|
|
|
|
systemctl stop tailscaled
|
|
|
|
rm -fr /var/lib/tailscale
|
|
|
|
systemctl start tailscaled
|
|
|
|
```
|
|
|
|
|
|
|
|
7. Add your first machine
|
|
|
|
|
|
|
|
```shell
|
|
|
|
tailscale up --login-server YOUR_HEADSCALE_URL
|
|
|
|
```
|
|
|
|
|
|
|
|
8. Navigate to the URL you will get with `tailscale up`, where you'll find your machine key.
|
|
|
|
|
|
|
|
9. In the server, register your machine to a namespace with the CLI
|
|
|
|
```shell
|
|
|
|
headscale -n myfirstnamespace nodes register YOURMACHINEKEY
|
|
|
|
```
|
|
|
|
or docker:
|
|
|
|
```shell
|
2021-10-19 23:22:56 +02:00
|
|
|
docker run \
|
|
|
|
-v $(pwd)/private.key:/private.key \
|
|
|
|
-v $(pwd)/config.json:/config.json \
|
|
|
|
-v $(pwd)/derp.yaml:/derp.yaml \
|
|
|
|
headscale/headscale:x.x.x \
|
|
|
|
headscale -n myfirstnamespace nodes register YOURMACHINEKEY
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
or if your server is already running in docker:
|
|
|
|
```shell
|
|
|
|
docker exec <container_name> headscale -n myfirstnamespace nodes register YOURMACHINEKEY
|
|
|
|
```
|
|
|
|
|
|
|
|
Alternatively, you can use Auth Keys to register your machines:
|
|
|
|
|
|
|
|
1. Create an authkey
|
|
|
|
|
|
|
|
```shell
|
|
|
|
headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h
|
|
|
|
```
|
|
|
|
|
|
|
|
or docker:
|
|
|
|
|
|
|
|
```shell
|
2021-10-19 23:22:56 +02:00
|
|
|
docker run \
|
|
|
|
-v $(pwd)/private.key:/private.key \
|
|
|
|
-v $(pwd)/config.json:/config.json \
|
|
|
|
-v$(pwd)/derp.yaml:/derp.yaml \
|
|
|
|
-v $(pwd)/db.sqlite:/db.sqlite \
|
|
|
|
headscale/headscale:x.x.x \
|
|
|
|
headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h
|
2021-10-19 20:59:33 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
or if your server is already running in docker:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
docker exec <container_name> headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Use the authkey from your machine to register it
|
|
|
|
```shell
|
|
|
|
tailscale up --login-server YOUR_HEADSCALE_URL --authkey YOURAUTHKEY
|
|
|
|
```
|
|
|
|
|
|
|
|
If you create an authkey with the `--ephemeral` flag, that key will create ephemeral nodes. This implies that `--reusable` is true.
|
|
|
|
|
2021-10-21 21:01:52 +02:00
|
|
|
Please bear in mind that all headscale commands support adding `-o json` or `-o json-line` to get nicely JSON-formatted output.
|