Skip to main content

VyOS Edge Router — Configuration Documentation

Hostname: vyos-edge Timezone: Europe/Berlin VyOS Release: 2025.11


Table of Contents

  1. Network Overview
  2. Physical Interfaces
  3. IP Addressing
  4. Firewall — Groups
  5. Firewall — Global Input Filter
  6. Firewall — Global Forward Filter
  7. NAT
  8. Routing
  9. VPN — IPsec Site-to-Site
  10. Services
  11. System

Network Overview

Internet

│ eth0 — 159.195.87.143/22 (primary WAN)
│ 152.53.173.192/32 (secondary public IP)
│ GW: 159.195.84.1
┌───┴──────────────────────────────────────────┐
│ vyos-edge (VPS) │
│ │
│ vti0 (10.255.255.1/30) — IPsec to Home │
└──────────────────────────────────────────────┘

IPsec VPN

vyos-fw (Home)
10.255.255.2/30
10.69.0.0/16

This is a cloud-hosted VPS router that acts as a public-facing gateway for services running in the home network. It:

  • Terminates a site-to-site IPsec VPN back to the home router
  • Port-forwards public traffic to home network services via the tunnel
  • Uses a secondary public IP (152.53.173.192/32) dedicated to specific home-hosted services
  • Enforces a strict stateful firewall permitting only VPN, SSH, and explicitly forwarded ports

Physical Interfaces

InterfaceDescriptionAddress(es)
eth0WAN — Public Internet159.195.87.143/22, 152.53.173.192/32
loLoopback
vti0IPsec tunnel to Home10.255.255.1/30

IP Addressing

Interface / PurposeIP / SubnetNotes
WAN primary159.195.87.143/22Main public IP, default gateway 159.195.84.1
WAN secondary152.53.173.192/32Dedicated IP for Mumble, Minecraft, Home Traefik ACME
VTI tunnel local10.255.255.1/30VPS end of IPsec VTI tunnel
VTI tunnel remote10.255.255.2/30Home router end
Home network10.69.0.0/16Reachable via vti0
Home DMZ10.69.70.0/24Reachable via vti0 (explicit route)

Firewall — Groups

Network Groups

GroupNetworkPurpose
BLOCKLIST0.0.0.0/32 (placeholder)Aggregated IP blocklist (auto-updated daily)

Firewall — Global Input Filter

Controls traffic destined for the router itself (all interfaces). Default action: drop (implicit — only explicitly accepted traffic is allowed).

RuleActionDescription
1acceptAllow established/related
2dropDrop invalid state
5dropDrop blocklisted sources (BLOCKLIST)
8acceptAllow ICMP (ping)
9acceptAllow SSH from WAN (TCP port 22)
10acceptAllow IKE key exchange (UDP port 500)
20acceptAllow NAT-T (UDP port 4500)
30acceptAllow ESP protocol (IPsec data)
40acceptAllow all traffic inbound from vti0

Note: There is also a legacy named rule WAN-LOCAL (rule 5) that drops blocklisted IPs with logging. This predates the global input filter and provides an additional logged drop for blocklisted sources.


Firewall — Global Forward Filter

Controls traffic transiting through the router. Default action: drop (rule 999).

RuleActionDescription
1acceptAllow established/related
5drop (log)Drop blocklisted source IPs (BLOCKLIST)
10acceptForward all traffic inbound from vti0
15accept + setMSS clamp TCP SYN outbound on vti0 to 1360 bytes (MTU compensation for VPN)
20acceptForward all traffic outbound to vti0
999dropDrop everything else

The forward policy effectively allows only VPN tunnel traffic to pass through — all other forwarding is dropped. Inbound port-forwarded connections (via DNAT) are also subject to this filter; they survive because they traverse vti0 after translation.


NAT

Destination NAT (Port Forwarding)

Inbound connections on eth0 are forwarded to home network services over the VPN tunnel.

RuleDestination AddressPortProtocolTranslated ToService
20152.53.173.192443TCP10.69.20.40HTTPS → Home Traefik (matrix, openclaw, …; SNI-routed)
21152.53.173.1928448TCP10.69.20.40Matrix Federation → Home Traefik
80152.53.173.19280TCP10.69.20.40HTTP → Home Traefik (redirect to HTTPS)
100152.53.173.19264738TCP10.69.70.10Mumble
101152.53.173.19264738UDP10.69.70.10Mumble
110152.53.173.19225565TCP10.69.70.20Minecraft

All HTTP(S) traffic now lands on Home Traefik (10.69.20.40); Traefik does SNI-based virtual hosting for every public hostname (matrix.helix9.org, openclaw.helix9.org, …). DMZ services with their own ports (Mumble, Minecraft) still DNAT directly to the relevant DMZ host.

Removed in 2026-05 when Matrix TLS was consolidated onto Traefik:

  • Rule 22 (:80 → 10.69.70.30) — no longer needed; Traefik uses DNS-01 ACME (Cloudflare), so synapse does not need public :80
  • Rule 125 (:443 → 10.69.20.40, OpenClaw, disabled) — redundant with rule 20 now that rule 20 also targets Traefik

See Matrix Homeserver for the current Matrix path.

Source NAT (SNAT)

RuleOutbound InterfaceTranslationDescription
100vti010.255.255.1SNAT all traffic sent into the tunnel to the VTI local address

This ensures the home router sees the VPS tunnel endpoint as the source, enabling proper return routing.


Routing

DestinationNext-Hop / InterfaceDescription
0.0.0.0/0159.195.84.1Default route via WAN gateway
10.69.0.0/16vti0Home network via IPsec tunnel
10.69.70.0/24vti0Home DMZ (explicit, more-specific route)

VPN — IPsec Site-to-Site

Connects the VPS (vyos-edge) to the home router (vyos-fw) over IKEv2 using a Virtual Tunnel Interface.

ParameterVPS (Edge)Home
Local IDvps.helix9.orghome.helix9.org
Public IP159.195.87.143Dynamic (any)
Tunnel IP10.255.255.1/3010.255.255.2/30
VTI Interfacevti0vti0
MTU1400 bytes1400 bytes
Connection typerespondinitiate

The VPS always responds — it never initiates. The home router is the initiator.

IKE Profile (IKE-HOME)

SettingValue
VersionIKEv2
EncryptionAES-256
HashSHA-256
DH Group14 (2048-bit MODP)
Lifetime28800s (8h)
DPD actionrestart
DPD interval30s / timeout 120s
Close actionnone

ESP Profile (ESP-HOME)

SettingValue
EncryptionAES-256
HashSHA-256
PFSDH Group 14
Lifetime3600s (1h)

Authentication: Pre-shared key (PSK ID: helix9). Bound interface: eth0.


Services

SSH

  • Port: 22
  • Password authentication: disabled (key-only)
  • Auth method: Public key — sk-ssh-ed25519@openssh.com (YubiKey hardware-backed)

SSH is permitted from the WAN by the input filter (rule 9). No listen-address restriction — accessible on all interfaces.

NTP

The router serves as an NTP server for local and private-range clients.

Allowed clients:

RangeDescription
127.0.0.0/8Loopback
169.254.0.0/16Link-local
10.0.0.0/8RFC1918 Class A
172.16.0.0/12RFC1918 Class B
192.168.0.0/16RFC1918 Class C
::1/128IPv6 loopback
fe80::/10IPv6 link-local
fc00::/7IPv6 ULA

Upstream servers: 0.pool.ntp.org, time1.vyos.net, time2.vyos.net, time3.vyos.net

Blocklist Auto-Update

A scheduled task keeps the BLOCKLIST firewall group current:

  • Script: /opt/vyos-blocklist/update-blocklists.sh
  • Interval: 1 day
  • Effect: Dropped at both input (rule 5) and forward (rule 5) filters before traffic is processed

System

SettingValue
Hostnamevyos-edge
TimezoneEurope/Berlin
ConsolettyS0 at 115200 baud
Config revisions kept100
Reboot on upgrade failureafter 5 minutes
Upstream DNS (system)1.1.1.1, 8.8.8.8
Sysloglocal, all facilities at info; local7 at debug
Login bannerGit Backup Active

Login

Single user vyos with:

  • Password authentication (encrypted, stored)
  • YubiKey SSH public key (sk-ssh-ed25519@openssh.com)
  • Password login over SSH disabled (key-only)