210 lines
5.9 KiB
Markdown
210 lines
5.9 KiB
Markdown
|
Getting Started
|
|||
|
===============
|
|||
|
|
|||
|
## Configuration
|
|||
|
|
|||
|
```shell
|
|||
|
# base configuration
|
|||
|
BOLTDB_PATH=/routed/route.db
|
|||
|
WEB_ADDR=:80
|
|||
|
SSL_ADDR=:443
|
|||
|
BACKEND_TCP_ADDR=:8757
|
|||
|
BACKEND_KCP_ADDR=:8804
|
|||
|
GRPC_ADDR=:7268
|
|||
|
DOMAIN_SUFFIX=
|
|||
|
ACME_EMAIL=
|
|||
|
SSL_CERT_KEY=
|
|||
|
```
|
|||
|
|
|||
|
Fill out the missing parts of this and save it as `.env` somewhere.
|
|||
|
|
|||
|
### `DOMAIN_SUFFIX`
|
|||
|
|
|||
|
type: string
|
|||
|
|
|||
|
When a domain is not supplied for a newly created route, domains will be a random
|
|||
|
string prepended to this setting. Set up a wildcard DNS entry for this prefix pointed
|
|||
|
to the server running routed.
|
|||
|
|
|||
|
Example: `.route.xeserv.us`
|
|||
|
|
|||
|
### `ACME_EMAIL`
|
|||
|
|
|||
|
type: string, email address
|
|||
|
|
|||
|
This email address will be used to establish an account with Let's Encrypt. By
|
|||
|
using the ACME support route has you agree to follow all of the Let's Encrypt
|
|||
|
terms and conditions [here][letoc].
|
|||
|
|
|||
|
### `SSL_CERT_KEY`
|
|||
|
|
|||
|
type: string, encryption key
|
|||
|
|
|||
|
This will be used to encrypt and decrypt all SSL certificates on the disk.
|
|||
|
New keys can be generated by running `route generate-key`.
|
|||
|
|
|||
|
## Node Setup
|
|||
|
|
|||
|
The target node must have a direct route from the internet to TCP ports
|
|||
|
`80`, `443`, `7268`, and `8757` and UDP port `8804`. In order they are used
|
|||
|
for:
|
|||
|
|
|||
|
| kind | port | usage |
|
|||
|
|:-- |:-- |:-- |
|
|||
|
| tcp | `80` | plain http traffic to backends |
|
|||
|
| tcp | `443` | https (and http/2) traffic to backends |
|
|||
|
| tcp | `7268` | grpc interface for management |
|
|||
|
| tcp | `8757` | backend connections |
|
|||
|
| udp | `8804` | backend connections |
|
|||
|
|
|||
|
### Docker Volume Creation
|
|||
|
|
|||
|
```console
|
|||
|
$ docker volume create routed
|
|||
|
```
|
|||
|
|
|||
|
### Initial Setup
|
|||
|
|
|||
|
```console
|
|||
|
$ docker run --rm -it -v routed:/routed xena/route:latest sh
|
|||
|
(ctr)$ cd /routed
|
|||
|
(ctr)$ route-cli token generate-root --key=<ssl cert key from above> --username=<username> --db=./route.db
|
|||
|
Your token is e73831bc-f40a-4cd4-84a6-b6b1e4529fa2
|
|||
|
(ctr)$ exit
|
|||
|
```
|
|||
|
|
|||
|
Save this username and token as they will be very important.
|
|||
|
|
|||
|
### Persistent setup with runit
|
|||
|
|
|||
|
- Create a folder in `/etc/system` named `routed`
|
|||
|
`# mkdir -p /etc/system/routed`
|
|||
|
- Copy the `.env` file created above into `etc/system/routed`
|
|||
|
- Create a file named `run` with the following contents:
|
|||
|
|
|||
|
```sh
|
|||
|
#!/bin/sh
|
|||
|
|
|||
|
routeVer='latest'
|
|||
|
|
|||
|
docker rm -f routed
|
|||
|
sleep 2
|
|||
|
docker run --net host --name routed --rm -it --env-file .env -v routed:/routed -e BOLTDB_PATH=/routed/route.db xena/route:$routeVer
|
|||
|
```
|
|||
|
|
|||
|
```console
|
|||
|
# chmod +X /etc/system/routed/run
|
|||
|
```
|
|||
|
|
|||
|
### Usage
|
|||
|
|
|||
|
Change the definition of this variable as is needed for your setup. For now this must
|
|||
|
be publicly facing but later versions of `route` will not require this. Set this in
|
|||
|
a variable named `ROUTED_GRPC_ADDR`:
|
|||
|
|
|||
|
```console
|
|||
|
$ export ROUTED_GRPC_ADDR=h.routed.xeserv.us:7268
|
|||
|
```
|
|||
|
|
|||
|
Similarly, point this to the TCP backend connections port:
|
|||
|
|
|||
|
```console
|
|||
|
$ export ROUTED_TCP_BACKEND_ADDR=h.routed.xeserv.us:8757
|
|||
|
```
|
|||
|
|
|||
|
Next, open `~/.netrc` in your favorite editor and add the following to the end of it:
|
|||
|
|
|||
|
```
|
|||
|
machine h.routed.xeserv.us:7268
|
|||
|
login usename
|
|||
|
password token
|
|||
|
```
|
|||
|
|
|||
|
#### Create a route
|
|||
|
|
|||
|
```
|
|||
|
$ route-cli --routed-addr=$ROUTED_GRPC_ADDR route create --help
|
|||
|
‹master*!+1› »»»» ./route route create --help 0|12:57:46
|
|||
|
usage: route route create [<flags>]
|
|||
|
|
|||
|
create a new route
|
|||
|
|
|||
|
Flags:
|
|||
|
--help Show context-sensitive help (also try
|
|||
|
--help-long and --help-man).
|
|||
|
--routed-addr="127.0.0.1:7268"
|
|||
|
routed grpc address
|
|||
|
--netrc="/Users/xena/.netrc" netrc path
|
|||
|
--domain=DOMAIN domain for the route (if not given one will be
|
|||
|
generated for you)
|
|||
|
|
|||
|
$ route-cli --routed-addr=$ROUTED_GRPC_ADDR route create
|
|||
|
86d50f43-221d-4a57-99c9-8056dea0f12c
|
|||
|
$ route-cli --routed-addr=$ROUTED_GRPC_ADDR route list
|
|||
|
+--------------------------------------|--------------------------------+
|
|||
|
| ID | HOST |
|
|||
|
+--------------------------------------|--------------------------------+
|
|||
|
| 86d50f43-221d-4a57-99c9-8056dea0f12c | wfall-hu-crow.routed.xeserv.us |
|
|||
|
+--------------------------------------|--------------------------------+
|
|||
|
$ curl -v https://wfall-hu-crow.routed.xeserv.us
|
|||
|
> GET / HTTP/2
|
|||
|
> Host: wfall-hu-crow.routed.xeserv.us
|
|||
|
> User-Agent: curl/7.54.0
|
|||
|
> Accept: */*
|
|||
|
>
|
|||
|
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
|
|||
|
< HTTP/2 502
|
|||
|
< accept: */*
|
|||
|
< content-type: text/html; charset=utf-8
|
|||
|
< user-agent: curl/7.54.0
|
|||
|
< x-clacks-overhead: GNU Ashlynn
|
|||
|
< x-forwarded-for: 24.17.183.23
|
|||
|
< x-remote-ip: 24.17.183.23
|
|||
|
< x-request-id: 01BVA69BJJKNSX05W4NS0PHECY
|
|||
|
< x-request-ingress: 2017-09-30T22:05:21+02:00
|
|||
|
< content-length: 228
|
|||
|
< date: Sat, 30 Sep 2017 20:05:21 GMT
|
|||
|
<
|
|||
|
* Connection #0 to host wfall-hu-crow.routed.xeserv.us left intact
|
|||
|
<html><head><title>no backends connected</title></head><body><h1>no backends connected</h1><p>Please ensure a backend is running for wfall-hu-crow.routed.xeserv.us. This is request ID 01BVA69BJJKNSX05W4NS0PHECY.</p></body></html>
|
|||
|
```
|
|||
|
|
|||
|
#### Connect a backend
|
|||
|
|
|||
|
In another terminal window:
|
|||
|
```console
|
|||
|
$ route-cli test-server
|
|||
|
```
|
|||
|
|
|||
|
In yet another terminal window:
|
|||
|
```conosle
|
|||
|
$ route-httpagent -token=<token from above> -domain=<domain from above> -server=$ROUTED_TCP_BACKEND_ADDR
|
|||
|
```
|
|||
|
|
|||
|
Now to your main terminal window:
|
|||
|
```console
|
|||
|
$ curl -v https://wfall-hu-crow.routed.xeserv.us
|
|||
|
> GET / HTTP/2
|
|||
|
> Host: wfall-hu-crow.route.xeserv.us
|
|||
|
> User-Agent: curl/7.54.0
|
|||
|
> Accept: */*
|
|||
|
>
|
|||
|
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
|
|||
|
< HTTP/2 200
|
|||
|
< content-type: text/plain; charset=utf-8
|
|||
|
< date: Sat, 30 Sep 2017 20:15:59 GMT
|
|||
|
< x-clacks-overhead: GNU Ashlynn
|
|||
|
< x-request-id: 01BVA6WT90M20ZH6NVSKYT68SS
|
|||
|
< content-length: 298
|
|||
|
<
|
|||
|
Route is go!
|
|||
|
map[X-Forwarded-For:[24.17.183.23, 193.164.132.229] X-Request-Id:[01BVA6WT90M20ZH6NVSKYT68SS] Accept-Encoding:[gzip] User-Agent:[curl/7.54.0] Accept:[*/*] X-Remote-Ip:[24.17.183.23] X-Request-Ingress:[2017-09-30T22:15:59+02:00]]
|
|||
|
Served by cadance-3.local running darwin
|
|||
|
* Connection #0 to host wfall-hu-crow.routed.xeserv.us left intact
|
|||
|
Hit count: 1617
|
|||
|
```
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
[letoc]: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
|