Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1f314d8c1 | ||
|
|
7d8892b8c4 |
No files matched your search
@@ -114,7 +114,7 @@ must have the type shown below; an unknown section or setting is an error.
|
|||||||
| `p2s` | `enabled` | boolean | `false` | Road-warrior access |
|
| `p2s` | `enabled` | boolean | `false` | Road-warrior access |
|
||||||
| `p2s` | `address_pool` | string | | CIDR assigned to road-warrior clients |
|
| `p2s` | `address_pool` | string | | CIDR assigned to road-warrior clients |
|
||||||
| `wireguard` | `enabled` | boolean | `false` | WireGuard endpoint |
|
| `wireguard` | `enabled` | boolean | `false` | WireGuard endpoint |
|
||||||
| `wireguard` | `address` | string | | Address and prefix for `wg0`, for example `192.168.200.1/24` |
|
| `wireguard` | `address` | string | | The router's own address on `wg0` with the prefix of the peers' network, for example `192.168.200.1/24`; the network and the broadcast address of a network larger than /31 are refused |
|
||||||
| `wireguard` | `listen_port` | integer | `51820` | UDP port |
|
| `wireguard` | `listen_port` | integer | `51820` | UDP port |
|
||||||
| `openvpn` | `enabled` | boolean | `false` | OpenVPN access for users |
|
| `openvpn` | `enabled` | boolean | `false` | OpenVPN access for users |
|
||||||
| `openvpn` | `address_pool` | string | | IPv4 CIDR assigned to OpenVPN clients |
|
| `openvpn` | `address_pool` | string | | IPv4 CIDR assigned to OpenVPN clients |
|
||||||
@@ -1006,7 +1006,7 @@ when it ended and why, and each refused ticket or shell with the reason.
|
|||||||
| `wireguard` | The public key and port of `wg0`, and each peer's public key, endpoint, allowed IPs, handshake age and traffic; no private or preshared key |
|
| `wireguard` | The public key and port of `wg0`, and each peer's public key, endpoint, allowed IPs, handshake age and traffic; no private or preshared key |
|
||||||
| `docker` | `docker.exposed_ports` and the rules of the `VPN-ROUTER-DOCKER` chain |
|
| `docker` | `docker.exposed_ports` and the rules of the `VPN-ROUTER-DOCKER` chain |
|
||||||
| `postgresql` | `clusters`: each PostgreSQL cluster of `pg_lsclusters` with its version, name, port, status and data directory, and for one that is online its `settings`: `server_version`, `listen_addresses`, `port`, `max_connections`, `shared_buffers`, `effective_cache_size`, `work_mem`, `password_encryption`, `ssl` and `timezone`; `null` when `pg_lsclusters` fails |
|
| `postgresql` | `clusters`: each PostgreSQL cluster of `pg_lsclusters` with its version, name, port, status and data directory, and for one that is online its `settings`: `server_version`, `listen_addresses`, `port`, `max_connections`, `shared_buffers`, `effective_cache_size`, `work_mem`, `password_encryption`, `ssl` and `timezone`; `null` when `pg_lsclusters` fails |
|
||||||
| `caddy` | The installed Caddy: `version`, and `source`, `upstream` once Caddy's repository is configured and `ubuntu` otherwise; `null` when Caddy is not installed |
|
| `caddy` | The installed Caddy: `version`, `source`, `upstream` once Caddy's repository is configured and `ubuntu` otherwise, and `service`, the state of `caddy.service`; `null` when Caddy is not installed |
|
||||||
|
|
||||||
### The /postgresql page
|
### The /postgresql page
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,21 @@
|
|||||||
|
vpn-router (0.25.3-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
fix: /config gives the state of caddy.service with the installed Caddy, for the Router Manager's Web page.
|
||||||
|
|
||||||
|
* caddy of /config is {"version", "source", "service"}.
|
||||||
|
|
||||||
|
-- Slawomir Koszewski <slawek@koszewscy.waw.pl> Tue, 03 Nov 2026 05:00:00 +0100
|
||||||
|
|
||||||
|
vpn-router (0.25.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
fix: wireguard.address must be the router's own address in its network, not the network or broadcast address, from which the peers' addresses are told apart.
|
||||||
|
|
||||||
|
* A wireguard.address that is the network or the broadcast address of a
|
||||||
|
network larger than /31, such as 192.168.232.0/24, is refused with the
|
||||||
|
first address of the network as the example.
|
||||||
|
|
||||||
|
-- Slawomir Koszewski <slawek@koszewscy.waw.pl> Tue, 03 Nov 2026 02:30:00 +0100
|
||||||
|
|
||||||
vpn-router (0.25.1-1) unstable; urgency=medium
|
vpn-router (0.25.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
fix: /remote-access gives the router's WireGuard public key, endpoint and allowed IPs, which a peer's configuration needs.
|
fix: /remote-access gives the router's WireGuard public key, endpoint and allowed IPs, which a peer's configuration needs.
|
||||||
|
|||||||
@@ -458,10 +458,16 @@ def validate(cfg):
|
|||||||
wg_address = _get(cfg, 'wireguard', 'address')
|
wg_address = _get(cfg, 'wireguard', 'address')
|
||||||
if wg_address:
|
if wg_address:
|
||||||
try:
|
try:
|
||||||
ipaddress.ip_interface(wg_address)
|
interface = ipaddress.ip_interface(wg_address)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ConfigError(
|
raise ConfigError(
|
||||||
f'wireguard.address: {wg_address!r} is not an address with prefix')
|
f'wireguard.address: {wg_address!r} is not an address with prefix')
|
||||||
|
# The router's own address on wg0, from which the peers' addresses of the same network are told apart.
|
||||||
|
network = interface.network
|
||||||
|
if network.num_addresses > 2 and interface.ip in (network.network_address, network.broadcast_address):
|
||||||
|
raise ConfigError(
|
||||||
|
f'wireguard.address: {wg_address} is the network or broadcast address of {network}; give the '
|
||||||
|
f'router\'s own address in it, such as {next(network.hosts())}/{network.prefixlen}')
|
||||||
|
|
||||||
port = _get(cfg, 'wireguard', 'listen_port')
|
port = _get(cfg, 'wireguard', 'listen_port')
|
||||||
if not 1 <= port <= 65535:
|
if not 1 <= port <= 65535:
|
||||||
|
|||||||
@@ -403,7 +403,7 @@ def postgresql_databases():
|
|||||||
|
|
||||||
def details(state):
|
def details(state):
|
||||||
"""What /config shows: the configuration without its secrets, and what the router resolved and runs; caddy is the
|
"""What /config shows: the configuration without its secrets, and what the router resolved and runs; caddy is the
|
||||||
installed Caddy, {version, source}, null when it is not installed."""
|
installed Caddy, {version, source, service}, service the state of caddy.service, null when it is not installed."""
|
||||||
configuration = state.get('configuration', {})
|
configuration = state.get('configuration', {})
|
||||||
caddy = package_version('caddy')
|
caddy = package_version('caddy')
|
||||||
return {
|
return {
|
||||||
@@ -420,8 +420,8 @@ def details(state):
|
|||||||
},
|
},
|
||||||
'postgresql': postgresql_configuration(),
|
'postgresql': postgresql_configuration(),
|
||||||
# Caddy is upstream's once its repository is configured (vpn-router-caddy).
|
# Caddy is upstream's once its repository is configured (vpn-router-caddy).
|
||||||
'caddy': {'version': caddy, 'source': 'upstream' if vpnrouter.CADDY_APT_SOURCE.is_file() else 'ubuntu'}
|
'caddy': {'version': caddy, 'source': 'upstream' if vpnrouter.CADDY_APT_SOURCE.is_file() else 'ubuntu',
|
||||||
if caddy else None,
|
'service': unit_state('caddy.service')} if caddy else None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user