Converted router configuration file from .conf to JSON.
This commit is contained in:
1 parent
c423ea9347
commit
b18947ed9b
18 files changed
+285
-396
No files matched your search
@@ -24,7 +24,7 @@ supported equally, and both end up with the same two things: a configuration fil
|
||||
service that applies it.
|
||||
|
||||
```
|
||||
/etc/vpn-router/vpn-router.conf the configuration
|
||||
/etc/vpn-router/vpn-router.json the configuration
|
||||
systemctl restart vpn-router-setup apply it
|
||||
```
|
||||
|
||||
@@ -32,7 +32,7 @@ systemctl restart vpn-router-setup apply it
|
||||
|
||||
```sh
|
||||
apt-get install vpn-router # answer "none" to the platform question
|
||||
$EDITOR /etc/vpn-router/vpn-router.conf
|
||||
$EDITOR /etc/vpn-router/vpn-router.json
|
||||
systemctl restart vpn-router-setup
|
||||
```
|
||||
|
||||
@@ -65,10 +65,10 @@ EOF
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y vpn-router
|
||||
```
|
||||
|
||||
With `mode = interfaces` the `int_addr` and `int_gateway_ip` lines are dropped and read
|
||||
from the internal NIC instead; with `mode = auto` the interface names go too.
|
||||
With mode `interfaces` the `int_addr` and `int_gateway_ip` lines are dropped and read
|
||||
from the internal NIC instead; with mode `auto` the interface names go too.
|
||||
|
||||
Alternatively write `/etc/vpn-router/vpn-router.conf` directly before or after installing.
|
||||
Alternatively write `/etc/vpn-router/vpn-router.json` directly before or after installing.
|
||||
A configuration-management tool should do that and then restart `vpn-router-setup`.
|
||||
|
||||
See [examples/](examples/) for a cloud-init template and a shell installer, and
|
||||
@@ -77,47 +77,58 @@ that deploy a router on Azure or GCP.
|
||||
|
||||
## Configuration
|
||||
|
||||
`/etc/vpn-router/vpn-router.conf` is INI, mode 0600, and is created on first install. It
|
||||
`/etc/vpn-router/vpn-router.json` is JSON, mode 0600, and is created on first install. It
|
||||
is managed with `ucf`, so it is yours to edit: a later `dpkg-reconfigure` applies what
|
||||
changed and asks before touching anything you altered by hand. A fully commented
|
||||
reference is installed at `/usr/share/doc/vpn-router/vpn-router.conf.example`.
|
||||
changed and asks before touching anything you altered by hand. A complete example is
|
||||
installed at `/usr/share/doc/vpn-router/vpn-router.json.example`.
|
||||
|
||||
Lists are comma-separated, booleans are `true`/`false`, an empty value means unset, and a
|
||||
`_b64` suffix means the value is base64-encoded.
|
||||
The file is an object of sections, each an object of settings. A section or setting that
|
||||
is left out takes its default, and an empty string or empty list means unset. Every value
|
||||
must have the type shown below; an unknown section or setting is an error.
|
||||
|
||||
| Section | Setting | Meaning |
|
||||
|---|---|---|
|
||||
| `general` | `platform` | `none`, `generic`, `azure` or `gcp`. `none` defers configuration entirely |
|
||||
| `general` | `mode` | How much you supply: `manual`, `interfaces` or `auto` |
|
||||
| `interfaces` | `external` | Name of the NIC facing the untrusted network |
|
||||
| `interfaces` | `internal` | Name of the NIC facing the protected network |
|
||||
| `wan` | `local_fqdn` | This router's FQDN |
|
||||
| `wan` | `local_id_mode` | IKE identity source: `fqdn`, `public_ip` or `internal_ip` |
|
||||
| `local` | `cidrs` | Local subnets advertised into the tunnel |
|
||||
| `local` | `int_addr` | This host's address on the internal network |
|
||||
| `local` | `int_gateway_ip` | Next hop on the internal side |
|
||||
| `remote` | `addrs` | Remote gateway address(es) or FQDN |
|
||||
| `remote` | `id` | Remote IKE identity, without a leading `@` |
|
||||
| `remote` | `cidrs` | Remote subnets reachable through the tunnel |
|
||||
| `remote` | `psk_b64` | Pre-shared key, base64-encoded |
|
||||
| `remote` | `psk_file` | Path to a file holding the raw key; wins over `psk_b64` |
|
||||
| `p2s` | `enabled` | Road-warrior access |
|
||||
| `p2s` | `address_pool` | Pool assigned to road-warrior clients |
|
||||
| `p2s` | `ca_name` | Common name for a locally created CA |
|
||||
| `wireguard` | `enabled` | WireGuard endpoint |
|
||||
| `wireguard` | `address` | Address and prefix for `wg0` |
|
||||
| `wireguard` | `listen_port` | UDP port, default 51820 |
|
||||
| Section | Setting | Type | Default | Meaning |
|
||||
|---|---|---|---|---|
|
||||
| `general` | `platform` | string | `none` | `none`, `generic`, `azure` or `gcp`. `none` defers configuration entirely |
|
||||
| `general` | `mode` | string | `manual` | How much you supply: `manual`, `interfaces` or `auto` |
|
||||
| `interfaces` | `external` | string | | Name of the NIC facing the untrusted network |
|
||||
| `interfaces` | `internal` | string | | Name of the NIC facing the protected network |
|
||||
| `wan` | `local_fqdn` | string | | This router's FQDN |
|
||||
| `wan` | `local_id_mode` | string | `fqdn` | IKE identity source: `fqdn`, `public_ip` or `internal_ip` |
|
||||
| `local` | `cidrs` | list | | Local subnets advertised into the tunnel |
|
||||
| `local` | `int_addr` | string | | This host's address on the internal network |
|
||||
| `local` | `int_gateway_ip` | string | | Next hop on the internal side |
|
||||
| `remote` | `addrs` | list | | Remote gateway addresses or FQDNs |
|
||||
| `remote` | `id` | string | | Remote IKE identity, without a leading `@` |
|
||||
| `remote` | `cidrs` | list | | Remote subnets reachable through the tunnel |
|
||||
| `remote` | `psk` | string | | Pre-shared key |
|
||||
| `remote` | `psk_file` | string | | Path to a file holding the key; wins over `psk` |
|
||||
| `p2s` | `enabled` | boolean | `false` | Road-warrior access |
|
||||
| `p2s` | `address_pool` | string | | CIDR assigned to road-warrior clients |
|
||||
| `p2s` | `ca_name` | string | `VPN Router CA` | Common name for a locally created CA |
|
||||
| `wireguard` | `enabled` | boolean | `false` | WireGuard endpoint |
|
||||
| `wireguard` | `address` | string | | Address and prefix for `wg0`, for example `192.168.200.1/24` |
|
||||
| `wireguard` | `listen_port` | integer | `51820` | UDP port |
|
||||
|
||||
A minimal site-to-site configuration in `auto` mode:
|
||||
|
||||
```json
|
||||
{
|
||||
"general": { "platform": "generic", "mode": "auto" },
|
||||
"wan": { "local_fqdn": "router.example.com" },
|
||||
"local": { "cidrs": ["10.0.0.0/24"] },
|
||||
"remote": {
|
||||
"addrs": ["peer.example.net"],
|
||||
"id": "peer.example.net",
|
||||
"cidrs": ["192.168.0.0/24"],
|
||||
"psk": "s3cr3t"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
WireGuard peers are added by hand in `/etc/wireguard/wg0.conf`. The package owns the
|
||||
`[Interface]` section of that file and rewrites it when the settings above change, but it
|
||||
carries every `[Peer]` section across untouched.
|
||||
|
||||
Encode the pre-shared key with:
|
||||
|
||||
```sh
|
||||
printf %s 'the key' | base64 -w0
|
||||
```
|
||||
|
||||
Every feature is independent. Leaving a group empty simply means that feature is not
|
||||
configured, and its generated files are removed.
|
||||
|
||||
@@ -148,7 +159,7 @@ address of the connected subnet with a warning when the routing table has nothin
|
||||
systemctl restart vpn-router-setup
|
||||
```
|
||||
|
||||
The service also runs at boot. With `platform = none` it does nothing and says so.
|
||||
The service also runs at boot. With platform `none` it does nothing and says so.
|
||||
Otherwise it regenerates the configuration files, resolves the interfaces and their
|
||||
addresses as `mode` directs, applies routes, generates WireGuard keys and injects
|
||||
firewall rules. It then starts `strongswan` and `wg-quick@wg0` if the corresponding
|
||||
@@ -240,7 +251,7 @@ EXTRA_P2S_DNS = '192.0.2.53'
|
||||
EXTRA_LOCAL_TS = '192.0.2.53/32'
|
||||
```
|
||||
|
||||
Set `platform = example` and restart the service. The debconf question offers only the
|
||||
Set `general.platform` to `example` and restart the service. The debconf question offers only the
|
||||
modules shipped with the package; the configuration file accepts any module installed.
|
||||
|
||||
## Removal
|
||||
@@ -250,7 +261,7 @@ configuration in place. `strongswan` is left enabled, since it is a shared servi
|
||||
may be in use by something else.
|
||||
|
||||
`apt-get purge` additionally removes the generated files and the firewall rules, restoring
|
||||
`/etc/ufw/before.rules` to its original content, and hands `vpn-router.conf` back to `ucf`
|
||||
`/etc/ufw/before.rules` to its original content, and hands `vpn-router.json` back to `ucf`
|
||||
before deleting it so a later reinstall starts clean. Key material is never deleted:
|
||||
`/etc/vpn-router/pki`, the WireGuard key pair and everything under `/etc/swanctl` are left
|
||||
alone.
|
||||
|
||||
Reference in new issue
Block a user