summaryrefslogtreecommitdiff
path: root/docs/configuration/service
diff options
context:
space:
mode:
Diffstat (limited to 'docs/configuration/service')
-rw-r--r--docs/configuration/service/md-broadcast-relay.md70
-rw-r--r--docs/configuration/service/md-config-sync.md164
-rw-r--r--docs/configuration/service/md-conntrack-sync.md321
-rw-r--r--docs/configuration/service/md-console-server.md139
-rw-r--r--docs/configuration/service/md-dhcp-relay.md205
-rw-r--r--docs/configuration/service/md-dhcp-server.md1178
-rw-r--r--docs/configuration/service/md-dns.md582
-rw-r--r--docs/configuration/service/md-eventhandler.md130
-rw-r--r--docs/configuration/service/md-https.md138
-rw-r--r--docs/configuration/service/md-index.md29
-rw-r--r--docs/configuration/service/md-ipoe-server.md512
-rw-r--r--docs/configuration/service/md-lldp.md154
-rw-r--r--docs/configuration/service/md-mdns.md131
-rw-r--r--docs/configuration/service/md-monitoring.md334
-rw-r--r--docs/configuration/service/md-ntp.md202
-rw-r--r--docs/configuration/service/md-pppoe-server.md753
-rw-r--r--docs/configuration/service/md-router-advert.md121
-rw-r--r--docs/configuration/service/md-salt-minion.md51
-rw-r--r--docs/configuration/service/md-snmp.md258
-rw-r--r--docs/configuration/service/md-ssh.md366
-rw-r--r--docs/configuration/service/md-suricata.md93
-rw-r--r--docs/configuration/service/md-tftp-server.md78
-rw-r--r--docs/configuration/service/md-webproxy.md459
23 files changed, 0 insertions, 6468 deletions
diff --git a/docs/configuration/service/md-broadcast-relay.md b/docs/configuration/service/md-broadcast-relay.md
deleted file mode 100644
index 4202ad6b..00000000
--- a/docs/configuration/service/md-broadcast-relay.md
+++ /dev/null
@@ -1,70 +0,0 @@
-(udp-broadcast-relay)=
-
-# UDP Broadcast Relay
-
-Certain vendors use broadcasts to identify their equipment within one ethernet
-segment. Unfortunately if you split your network with multiple VLANs you loose
-the ability of identifying your equipment.
-
-This is where "UDP broadcast relay" comes into play! It will forward received
-broadcasts to other configured networks.
-
-Every UDP port which will be forward requires one unique ID. Currently we
-support 99 IDs!
-
-## Configuration
-
-```{cfgcmd} set service broadcast-relay id \<n\> description \<description\>
-
-A description can be added for each and every unique relay ID. This is
-useful to distinguish between multiple different ports/applications.
-```
-
-```{cfgcmd} set service broadcast-relay id \<n\> interface \<interface\>
-
-The interface used to receive and relay individual broadcast packets. If you
-want to receive/relay packets on both `eth1` and `eth2` both interfaces need
-to be added.
-```
-
-```{cfgcmd} set service broadcast-relay id \<n\> address \<ipv4-address\>
-
-Set the source IP of forwarded packets, otherwise original senders address
-is used.
-```
-
-```{cfgcmd} set service broadcast-relay id \<n\> port \<port\>
-
-The UDP port number used by your application. It is mandatory for this kind
-of operation.
-```
-
-```{cfgcmd} set service broadcast-relay id \<n\> disable
-
-Each broadcast relay instance can be individually disabled without deleting
-the configured node by using the following command:
-```
-
-```{cfgcmd} set service broadcast-relay disable
-
-In addition you can also disable the whole service without the need to remove
-it from the current configuration.
-```
-
-:::{note}
-You can run the UDP broadcast relay service on multiple routers
-connected to a subnet. There is **NO** UDP broadcast relay packet storm!
-:::
-
-## Example
-
-To forward all broadcast packets received on `UDP port 1900` on `eth3`, `eth4`
-or `eth5` to all other interfaces in this configuration.
-
-```none
-set service broadcast-relay id 1 description 'SONOS'
-set service broadcast-relay id 1 interface 'eth3'
-set service broadcast-relay id 1 interface 'eth4'
-set service broadcast-relay id 1 interface 'eth5'
-set service broadcast-relay id 1 port '1900'
-```
diff --git a/docs/configuration/service/md-config-sync.md b/docs/configuration/service/md-config-sync.md
deleted file mode 100644
index a575f947..00000000
--- a/docs/configuration/service/md-config-sync.md
+++ /dev/null
@@ -1,164 +0,0 @@
-(config-sync)=
-
-# Config Sync
-
-Configuration synchronization (config sync) is a feature of VyOS that
-permits synchronization of the configuration of one VyOS router to
-another in a network.
-
-The main benefit to configuration synchronization is that it eliminates having
-to manually replicate configuration changes made on the primary router to the
-secondary (replica) router.
-
-The writing of the configuration to the secondary router is performed through
-the VyOS HTTP API. The user can specify which portion(s) of the configuration will
-be synchronized and the mode to use - whether to replace or add.
-
-To prevent issues with divergent configurations between the pair of routers,
-synchronization is strictly unidirectional from primary to replica. Both
-routers should be online and run the same version of VyOS.
-
-## Configuration
-
-```{cfgcmd} set service config-sync secondary \<address|key|timeout|port\>
-
-Specify the address, API key, timeout and port of the secondary router.
-You need to enable and configure the HTTP API service on the secondary
-router for config sync to operate.
-```
-
-```{cfgcmd} set service config-sync section \<section\>
-
-Specify the section of the configuration to synchronize. If more than one
-section is to be synchronized, repeat the command to add additional
-sections as required.
-```
-
-```{cfgcmd} set service config-sync mode \<load|set\>
-
-Two options are available for *mode*: either *load* and replace or *set*
-the configuration section.
-```
-
-```none
-Supported options for <section> include:
- firewall
- interfaces <interface>
- nat
- nat66
- pki
- policy
- protocols <protocol>
- qos <interface|policy>
- service <service>
- system <conntrack|
- flow-accounting|option|sflow|static-host-mapping|sysctl|time-zone>
- vpn
- vrf
-```
-
-
-## Operational Commands
-
-````{opcmd} show configuration secondary sync [commands] [running | candidate | saved] [\<config-node-path\>]
-
-Display configuration differences between the local node and
-a config-sync secondary node.
-
-This command allows operators to compare configurations across nodes
-participating in configuration synchronization (e.g., primary and
-secondary routers). It helps detect configuration drift and validate
-intended changes before synchronization.
-
-**Parameters:**
-
-```{eval-rst}
-.. list-table::
- :widths: 30 70
- :header-rows: 0
-
- * - ``commands`` (optional)
- - Show output as a list of configuration commands instead of raw diff.
- * - ``running|candidate|saved`` (optional, mutually exclusive)
- - Select which configuration to compare:
- ``running`` (current active configuration, default),
- ``candidate`` (uncommitted changes), or
- ``saved`` (last saved configuration). Only one of these may be
- specified at a time; if omitted, ``running`` is used.
-```
-
-**Examples:**
-
-:::{code-block} none
-# compare full running configuration with a secondary node
-show configuration secondary sync
-
-# compare only interface configuration
-show configuration secondary sync running interfaces dummy
-
-# compare candidate configuration and display as a list of commands
-show configuration secondary sync commands candidate
-:::
-````
-
-Without a built-in cross-node diff, operators may unintentionally push
-changes that conflict with the remote configuration (e.g., mismatched
-interfaces, firewall policies, or protocol settings).
-
-
-## Example
-
-- Synchronize the time-zone and OSPF configuration from Router A to Router B
-- The address of Router B is 10.0.20.112 and the port used is 8443
-
-Configure the HTTP API service on Router B
-
-```none
-set service https listen-address '10.0.20.112'
-set service https port '8443'
-set service https api keys id KID key 'foo'
-set service https api rest
-```
-
-Configure the config-sync service on Router A
-
-```none
-set service config-sync mode 'load'
-set service config-sync secondary address '10.0.20.112'
-set service config-sync secondary port '8443'
-set service config-sync secondary key 'foo'
-set service config-sync section protocols 'ospf'
-set service config-sync section system 'time-zone'
-```
-
-Make config-sync relevant changes to Router A's configuration
-
-```none
-vyos@vyos-A# set system time-zone 'America/Los_Angeles'
-vyos@vyos-A# commit
-INFO:vyos_config_sync:Config synchronization: Mode=load,
-Secondary=10.0.20.112
-vyos@vyos-A# save
-
-vyos@vyos-A# set protocols ospf area 0 network '10.0.48.0/30'
-vyos@vyos-A# commit
-INFO:vyos_config_sync:Config synchronization: Mode=load,
-Secondary=10.0.20.112
-yos@vyos-A# save
-```
-
-Verify configuration changes have been replicated to Router B
-
-```none
-vyos@vyos-B:~$ show configuration commands | match time-zone
-set system time-zone 'America/Los_Angeles'
-
-vyos@vyos-B:~$ show configuration commands | match ospf
-set protocols ospf area 0 network '10.0.48.0/30'
-```
-
-
-## Known issues
-
-Configuration resynchronization. With the current implementation of *service
-config-sync*, the secondary node must be online.
diff --git a/docs/configuration/service/md-conntrack-sync.md b/docs/configuration/service/md-conntrack-sync.md
deleted file mode 100644
index 47a0ae2f..00000000
--- a/docs/configuration/service/md-conntrack-sync.md
+++ /dev/null
@@ -1,321 +0,0 @@
-(conntrack-sync)=
-
-# Conntrack Sync
-
-One of the important features built on top of the Netfilter framework is
-connection tracking. Connection tracking allows the kernel to keep track of all
-logical network connections or sessions, and thereby relate all of the packets
-which may make up that connection. NAT relies on this information to translate
-all related packets in the same way, and iptables can use this information to
-act as a stateful firewall.
-
-The connection state however is completely independent of any upper-level
-state, such as TCP's or SCTP's state. Part of the reason for this is that when
-merely forwarding packets, i.e. no local delivery, the TCP engine may not
-necessarily be invoked at all. Even connectionless-mode transmissions such as
-UDP, IPsec (AH/ESP), GRE and other tunneling protocols have, at least, a pseudo
-connection state. The heuristic for such protocols is often based upon a preset
-timeout value for inactivity, after whose expiration a Netfilter connection is
-dropped.
-
-Each Netfilter connection is uniquely identified by a (layer-3 protocol, source
-address, destination address, layer-4 protocol, layer-4 key) tuple. The layer-4
-key depends on the transport protocol; for TCP/UDP it is the port numbers, for
-tunnels it can be their tunnel ID, but otherwise is just zero, as if it were
-not part of the tuple. To be able to inspect the TCP port in all cases, packets
-will be mandatorily defragmented.
-
-It is possible to use either Multicast or Unicast to sync conntrack traffic.
-Most examples below show Multicast, but unicast can be specified by using the
-"peer" keywork after the specified interface, as in the following example:
-
-{cfgcmd}`set service conntrack-sync interface eth0 peer 192.168.0.250`
-
-## Configuration
-
-```{cfgcmd} set service conntrack-sync accept-protocol
-
-Accept only certain protocols: You may want to replicate the state of flows
-depending on their layer 4 protocol.
-
-Protocols are: tcp, sctp, dccp, udp, icmp and ipv6-icmp.
-```
-
-
-```{cfgcmd} set service conntrack-sync event-listen-queue-size \<size\>
-
-The daemon doubles the size of the netlink event socket buffer size if it
-detects netlink event message dropping. This clause sets the maximum buffer
-size growth that can be reached.
-
-Queue size for listening to local conntrack events in MB.
-```
-
-
-```{cfgcmd} set service conntrack-sync expect-sync \<all|ftp|h323|nfs|sip|sqlnet\>
-
-Protocol for which expect entries need to be synchronized.
-```
-
-
-```{cfgcmd} set service conntrack-sync failover-mechanism vrrp sync-group \<group\>
-
-Failover mechanism to use for conntrack-sync.
-
-Only VRRP is supported. Required option.
-```
-
-
-```{cfgcmd} set service conntrack-sync ignore-address \<x.x.x.x\>
-
-IP addresses or networks for which local conntrack entries will not be synced
-```
-
-
-```{cfgcmd} set service conntrack-sync interface \<name\>
-
-Interface to use for syncing conntrack entries.
-```
-
-
-```{cfgcmd} set service conntrack-sync interface \<name\> port \<port\>
-
-Port number used by connection.
-```
-
-
-```{cfgcmd} set service conntrack-sync listen-address \<ipv4address\>
-
-Local IPv4 addresses for service to listen on.
-```
-
-
-```{cfgcmd} set service conntrack-sync mcast-group \<x.x.x.x\>
-
-Multicast group to use for syncing conntrack entries.
-
-Defaults to 225.0.0.50.
-```
-
-
-```{cfgcmd} set service conntrack-sync interface \<name\> peer \<address\>
-
-Peer to send unicast UDP conntrack sync entires to, if not using Multicast
-configuration from above above.
-```
-
-
-```{cfgcmd} set service conntrack-sync sync-queue-size \<size\>
-
-Queue size for syncing conntrack entries in MB.
-```
-
-
-```{cfgcmd} set service conntrack-sync disable-external-cache
-
-This diable the external cache and directly injects the flow-states into the
-in-kernel Connection Tracking System of the backup firewall.
-```
-
-
-```{cfgcmd} set service conntrack-sync purge-timeout \<timeout\>
-
-Timeout (in seconds) for purging synchronized entries on handover events.
-
-On handover, ``conntrackd -t`` is invoked, which schedules a conntrack table
-flush after ``<timeout>`` seconds to purge stale (“zombie”) entries and
-reduce clashes when multiple handovers occur in a short period.
-The default is 60 seconds.
-```
-
-:::{note}
-In VRRP stateful firewall deployments, align VRRP timing with this
-behavior: because synchronized conntrack state is purged after the purge
-timeout, set **VRRP preempt-delay** to ≥ **purge-timeout** so mastership
-can be restored before conntrack state is purged.
-:::
-
-```{cfgcmd} set service conntrack-sync disable-syslog
-
-Disable connection logging via Syslog.
-```
-
-
-```{cfgcmd} set service conntrack-sync startup-resync
-
-Order conntrackd to request a complete conntrack table resync against
-the other node at startup.
-```
-
-## Operation
-
-```{opcmd} show conntrack table ipv4
-
-Make sure conntrack is enabled by running and show connection tracking table.
-
-:::{code-block} none
-vyos@vyos:~$ show conntrack table ipv4
-TCP state codes: SS - SYN SENT, SR - SYN RECEIVED, ES - ESTABLISHED,
-FW - FIN WAIT, CW - CLOSE WAIT, LA - LAST ACK,
-TW - TIME WAIT, CL - CLOSE, LI - LISTEN
-
-CONN ID Source Destination Protocol TIMEOUT
-1015736576 10.35.100.87:58172 172.31.20.12:22 tcp [6] ES 430279
-1006235648 10.35.101.221:57483 172.31.120.21:22 tcp [6] ES 413310
-1006237088 10.100.68.100 172.31.120.21 icmp [1] 29
-1015734848 10.35.100.87:56282 172.31.20.12:22 tcp [6] ES 300
-1015734272 172.31.20.12:60286 239.10.10.14:694 udp [17] 29
-1006239392 10.35.101.221 172.31.120.21 icmp [1] 29
-:::
-:::{note}
-If the table is empty and you have a warning message, it means
-conntrack is not enabled. To enable conntrack, just create a NAT or a firewall
-rule. {cfgcmd}`set firewall state-policy established action accept`
-:::
-```
-
-
-```{opcmd} show conntrack-sync cache external
-
-Show connection syncing external cache entries
-```
-
-
-```{opcmd} show conntrack-sync cache internal
-
-Show connection syncing internal cache entries
-```
-
-
-```{opcmd} show conntrack-sync statistics
-
-Retrieve current statistics of connection tracking subsystem.
-
-:::{code-block} none
-vyos@vyos:~$ show conntrack-sync statistics
-Main Table Statistics:
-
-cache internal:
-current active connections: 19606
-connections created: 6298470 failed: 0
-connections updated: 3786793 failed: 0
-connections destroyed: 6278864 failed: 0
-
-cache external:
-current active connections: 15771
-connections created: 1660193 failed: 0
-connections updated: 77204 failed: 0
-connections destroyed: 1644422 failed: 0
-
-traffic processed:
-0 Bytes 0 Pckts
-
-multicast traffic (active device=eth0.5):
-976826240 Bytes sent 212898000 Bytes recv
-8302333 Pckts sent 2009929 Pckts recv
-0 Error send 0 Error recv
-
-message tracking:
-0 Malformed msgs 263 Lost msgs
-:::
-```
-```{opcmd} show conntrack-sync status
-
-Retrieve current status of connection tracking subsystem.
-
-:::{code-block} none
-vyos@vyos:~$ show conntrack-sync status
-sync-interface : eth0.5
-failover-mechanism : vrrp [sync-group GEFOEKOM]
-last state transition : no transition yet!
-ExpectationSync : disabled
-:::
-```
-
-## Example
-
-The next example is a simple configuration of conntrack-sync.
-
-:::{figure} /_static/images/service_conntrack_sync-schema.webp
-:alt: Conntrack Sync Example
-:scale: 60 %
-:::
-
-Now configure conntrack-sync service on `router1` **and** `router2`
-
-```none
-set high-availability vrrp group internal virtual-address ... etc ...
-set high-availability vrrp sync-group syncgrp member 'internal'
-set service conntrack-sync accept-protocol 'tcp'
-set service conntrack-sync accept-protocol 'udp'
-set service conntrack-sync accept-protocol 'icmp'
-set service conntrack-sync failover-mechanism vrrp sync-group 'syncgrp'
-set service conntrack-sync interface 'eth0'
-set service conntrack-sync mcast-group '225.0.0.50'
-```
-
-On the active router, you should have information in the internal-cache of
-conntrack-sync. The same current active connections number should be shown in
-the external-cache of the standby router
-
-On active router run:
-
-```none
-$ show conntrack-sync statistics
-
-Main Table Statistics:
-
-cache internal:
-current active connections: 10
-connections created: 8517 failed: 0
-connections updated: 127 failed: 0
-connections destroyed: 8507 failed: 0
-
-cache external:
-current active connections: 0
-connections created: 0 failed: 0
-connections updated: 0 failed: 0
-connections destroyed: 0 failed: 0
-
-traffic processed:
- 0 Bytes 0 Pckts
-
-multicast traffic (active device=eth0):
- 868780 Bytes sent 224136 Bytes recv
- 20595 Pckts sent 14034 Pckts recv
- 0 Error send 0 Error recv
-
-message tracking:
- 0 Malformed msgs 0 Lost msgs
-```
-
-On standby router run:
-
-```none
-$ show conntrack-sync statistics
-
-Main Table Statistics:
-
-cache internal:
-current active connections: 0
-connections created: 0 failed: 0
-connections updated: 0 failed: 0
-connections destroyed: 0 failed: 0
-
-cache external:
-current active connections: 10
-connections created: 888 failed: 0
-connections updated: 134 failed: 0
-connections destroyed: 878 failed: 0
-
-traffic processed:
- 0 Bytes 0 Pckts
-
-multicast traffic (active device=eth0):
- 234184 Bytes sent 907504 Bytes recv
- 14663 Pckts sent 21495 Pckts recv
- 0 Error send 0 Error recv
-
-message tracking:
- 0 Malformed msgs 0 Lost msgs
-```
diff --git a/docs/configuration/service/md-console-server.md b/docs/configuration/service/md-console-server.md
deleted file mode 100644
index 9402e935..00000000
--- a/docs/configuration/service/md-console-server.md
+++ /dev/null
@@ -1,139 +0,0 @@
-(console-server)=
-
-# Console Server
-
-Starting of with VyOS 1.3 (equuleus) we added support for running VyOS as an
-Out-of-Band Management device which provides remote access by means of SSH to
-directly attached serial interfaces.
-
-Serial interfaces can be any interface which is directly connected to the CPU
-or chipset (mostly known as a ttyS interface in Linux) or any other USB to
-serial converter (Prolific PL2303 or FTDI FT232/FT4232 based chips).
-
-If you happened to use a Cisco NM-16A - Sixteen Port Async Network Module or
-NM-32A - Thirty-two Port Async Network Module - this is your VyOS replacement.
-
-For USB port information please refor to: {ref}`hardware_usb`.
-
-## Configuration
-
-Between computers, the most common configuration used was "8N1": eight bit
-characters, with one start bit, one stop bit, and no parity bit. Thus 10 Baud
-times are used to send a single character, and so dividing the signalling
-bit-rate by ten results in the overall transmission speed in characters per
-second. This is also the default setting if none of those options are defined.
-
-```{cfgcmd} set service console-server device \<device\> data-bits [7 | 8]
-
-Configure either seven or eight data bits. This defaults to eight data
-bits if left unconfigured.
-```
-
-
-```{cfgcmd} set service console-server device \<device\> description \<string\>
-
-A user friendly description identifying the connected peripheral.
-```
-
-
-```{cfgcmd} set service console-server device \<device\> alias \<string\>
-
-A user friendly alias for this connection. Can be used instead of the
-device name when connecting.
-```
-
-
-```{cfgcmd} set service console-server device \<device\> parity [even | odd | none]
-
-Set the parity option for the console. If unset this will default to none.
-```
-
-
-```{cfgcmd} set service console-server device \<device\> stop-bits [1 | 2]
-
-Configure either one or two stop bits. This defaults to one stop bits if
-left unconfigured.
-```
-
-
-```{cfgcmd} set service console-server device \<device\> speed [ 300 | 1200 | 2400 | 4800 | 9600 | 19200 | 38400 | 57600 | 115200 ]
-
-:::{note}
-USB to serial converters will handle most of their work in software
-so you should be carefull with the selected baudrate as some times they
-can't cope with the expected speed.
-:::
-```
-
-### Remote Access
-
-
-Each individual configured console-server device can be directly exposed to
-the outside world. A user can directly connect via SSH to the configured
-port.
-
-```{cfgcmd} set service console-server device \<device\> ssh port \<port\>
-
-Accept SSH connections for the given `<device>` on TCP port `<port>`.
-After successfull authentication the user will be directly dropped to
-the connected serial device.
-
-:::{hint}
-Multiple users can connect to the same serial device but only
-one is allowed to write to the console port.
-:::
-```
-
-## Operation
-
-```{opcmd} show console-server ports
-
-Show configured serial ports and their respective interface configuration.
-
-:::{code-block} none
-vyos@vyos:~$ show console-server ports
-usb0b2.4p1.0 on /dev/serial/by-bus/usb0b2.4p1.0@ at 9600n
-:::
-```
-
-
-```{opcmd} show console-server user
-
-Show currently connected users.
-
-:::{code-block} none
-vyos@vyos:~$ show console-server user
-usb0b2.4p1.0 up vyos@localhost
-:::
-```
-```{opcmd} connect console \<device\>
-
-Locally connect to serial port identified by `<device>`.
-
-:::{code-block} none
-vyos@vyos-r1:~$ connect console usb0b2.4p1.0
-[Enter `^Ec?' for help]
-[-- MOTD -- VyOS Console Server]
-
-vyos-r2 login:
-:::
-
-:::{hint}
-Multiple users can connect to the same serial device but only
-one is allowed to write to the console port.
-:::
-
-:::{hint}
-The sequence ``^Ec?`` translates to: ``Ctrl+E c ?``. To quit
-the session use: ``Ctrl+E c .``
-:::
-
-:::{hint}
-If ``alias`` is set, it can be used instead of the device when
-connecting.
-:::
-```
-```{opcmd} show log console-server
-
-Show the console server log.
-``` \ No newline at end of file
diff --git a/docs/configuration/service/md-dhcp-relay.md b/docs/configuration/service/md-dhcp-relay.md
deleted file mode 100644
index a4a10109..00000000
--- a/docs/configuration/service/md-dhcp-relay.md
+++ /dev/null
@@ -1,205 +0,0 @@
-(dhcp-relay)=
-
-# DHCP Relay
-
-If you want your router to forward DHCP requests to an external DHCP server
-you can configure the system to act as a DHCP relay agent. The DHCP relay
-agent works with IPv4 and IPv6 addresses.
-
-All interfaces used for the DHCP relay must be configured. This includes the
-uplink to the DHCP server.
-
-## IPv4 relay
-
-### Configuration
-
-```{cfgcmd} set service dhcp-relay interface \<interface\>
-
-Interfaces that participate in the DHCP relay process. If this command is
-used, at least two entries of it are required: one for the interface that
-captures the dhcp-requests, and one for the interface to forward such
-requests. A warning message will be shown if this command is used, since
-new implementations should use ``listen-interface`` and
-``upstream-interface``.
-```
-
-```{cfgcmd} set service dhcp-relay listen-interface \<interface\>
-
-Interface for DHCP Relay Agent to listen for requests.
-```
-
-```{cfgcmd} set service dhcp-relay upstream-interface \<interface\>
-
-Interface for DHCP Relay Agent to forward requests out.
-```
-
-```{cfgcmd} set service dhcp-relay server \<server\>
-
-Configure IP address of the DHCP `<server>` which will handle the relayed
-packets.
-```
-
-```{cfgcmd} set service dhcp-relay relay-options relay-agents-packets discard
-
-The router should discard DHCP packages already containing relay agent
-information to ensure that only requests from DHCP clients are forwarded.
-```
-
-```{cfgcmd} set service dhcp-relay disable
-
-Disable dhcp-relay service.
-```
-
-
-#### Options
-
-```{cfgcmd} set service dhcp-relay relay-options hop-count \<count\>
-
-Set the maximum hop `<count>` before packets are discarded. Range 0...255,
-default 10.
-```
-
-```{cfgcmd} set service dhcp-relay relay-options max-size \<size\>
-
-Set maximum `<size>` of DHCP packets including relay agent information. If a
-DHCP packet size surpasses this value it will be forwarded without appending
-relay agent information. Range 64...1400, default 576.
-```
-
-```{cfgcmd} set service dhcp-relay relay-options relay-agents-packets \<append | discard | forward | replace\>
-
-Four policies for reforwarding DHCP packets exist:
-* **append:** The relay agent is allowed to append its own relay information
-to a received DHCP packet, disregarding relay information already present
-in the packet.
-* **discard:** Received packets which already contain relay information will
-be discarded.
-* **forward:** All packets are forwarded, relay information already present
-will be ignored.
-* **replace:** Relay information already present in a packet is stripped and
-replaced with the router's own relay information set.
-```
-
-
-### Example
-
-- Listen for DHCP requests on interface `eth1`.
-- DHCP server is located at IPv4 address 10.0.1.4 on `eth2`.
-- Router receives DHCP client requests on `eth1` and relays them to the
- server at 10.0.1.4 on `eth2`.
-
-:::{figure} /_static/images/service_dhcp-relay01.webp
-:alt: DHCP relay example
-:scale: 80 %
-DHCP relay example
-:::
-
-The generated configuration will look like:
-
-```none
-show service dhcp-relay
- listen-interface eth1
- upstream-interface eth2
- server 10.0.1.4
- relay-options {
- relay-agents-packets discard
- }
-```
-
-Also, for backwards compatibility this configuration, which uses generic
-interface definition, is still valid:
-
-```none
-show service dhcp-relay
- interface eth1
- interface eth2
- server 10.0.1.4
- relay-options {
- relay-agents-packets discard
- }
-```
-
-
-### Operation
-
-```{opcmd} restart dhcp relay-agent
-
-Restart DHCP relay service
-```
-
-
-## IPv6 relay
-
-(dhcp-relay-ipv6-configuration)=
-
-### Configuration
-
-```{cfgcmd} set service dhcpv6-relay listen-interface \<interface\>
-
-Set eth1 to be the listening interface for the DHCPv6 relay.
-
-Multiple interfaces may be specified.
-```
-
-```{cfgcmd} set service dhcpv6-relay upstream-interface \<interface\> address \<server\>
-
-Specifies an upstream network `<interface>` from which replies from
-`<server>` and other relay agents will be accepted.
-```
-
-(dhcp-relay-ipv6-options)=
-
-```{cfgcmd} set service dhcpv6-relay disable
-
-Disable dhcpv6-relay service.
-```
-
-(dhcp-relay-v6-options)=
-
-#### Options
-
-```{cfgcmd} set service dhcpv6-relay max-hop-count \<count\>
-
-Set maximum hop count before packets are discarded, default: 10
-```
-
-```{cfgcmd} set service dhcpv6-relay use-interface-id-option
-
-If this is set the relay agent will insert the interface ID. This option is
-set automatically if more than one listening interfaces are in use.
-```
-
-(dhcp-relay-ipv6-example)=
-
-### Example
-
-- DHCPv6 requests are received by the router on `listening interface` `eth1`
-- Requests are forwarded through `eth2` as the `upstream interface`
-- External DHCPv6 server is at 2001:db8::4
-
-:::{figure} /_static/images/service_dhcpv6-relay01.webp
-:alt: DHCPv6 relay example
-:scale: 80 %
-DHCPv6 relay example
-:::
-
-The generated configuration will look like:
-
-```none
-commit
-show service dhcpv6-relay
- listen-interface eth1 {
- }
- upstream-interface eth2 {
- address 2001:db8::4
- }
-```
-
-(dhcp-relay-ipv6-op-cmd)=
-
-### Operation
-
-```{opcmd} restart dhcpv6 relay-agent
-
-Restart DHCPv6 relay agent immediately.
-``` \ No newline at end of file
diff --git a/docs/configuration/service/md-dhcp-server.md b/docs/configuration/service/md-dhcp-server.md
deleted file mode 100644
index 96c375da..00000000
--- a/docs/configuration/service/md-dhcp-server.md
+++ /dev/null
@@ -1,1178 +0,0 @@
-(dhcp-server)=
-
-# DHCP Server
-
-VyOS uses Kea DHCP server for both IPv4 and IPv6 address assignment.
-
-## IPv4 server
-
-The network topology is declared by shared-network-name and the subnet
-declarations. The DHCP service can serve multiple shared networks, with each
-shared network having 1 or more subnets. Each subnet must be present on an
-interface. A range can be declared inside a subnet to define a pool of dynamic
-addresses. Multiple ranges can be defined and can contain holes. Static
-mappings can be set to assign "static" addresses to clients based on their MAC
-address.
-
-### Configuration
-
-```{cfgcmd} set service dhcp-server hostfile-update
-
- Create DNS record per client lease, by adding clients to /etc/hosts file.
- Entry will have format: `<shared-network-name>_<hostname>.<domain-name>`
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> option domain-name \<domain-name\>
-
-The domain-name parameter should be the domain name that will be appended to
-the client's hostname to form a fully-qualified domain-name (FQDN) (DHCP
-Option 015).
-
-This is the configuration parameter for the entire shared network definition.
-All subnets will inherit this configuration item if not specified locally.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> option domain-search \<domain-name\>
-
-The domain-name parameter should be the domain name used when completing DNS
-request where no full FQDN is passed. This option can be given multiple times
-if you need multiple search domains (DHCP Option 119).
-
-This is the configuration parameter for the entire shared network definition.
-All subnets will inherit this configuration item if not specified locally.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> option name-server \<address\>
-
-Inform client that the DNS server can be found at `<address>`.
-
-This is the configuration parameter for the entire shared network definition.
-All subnets will inherit this configuration item if not specified locally.
-Multiple DNS servers can be defined.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> option vendor-option \<option-name\>
-
-This configuration parameter lets you specify a vendor-option for the
-entire shared network definition. All subnets will inherit this
-configuration item if not specified locally. An example for Ubiquiti is
-shown below:
-```
-
-**Example:**
-
-
-Pass address of Unifi controller at `172.16.100.1` to all clients of `NET1`
-
-```none
-set service dhcp-server shared-network-name 'NET1' option vendor-option
-ubiquiti '172.16.100.1'
-```
-
-
-```{cfgcmd} set service dhcp-server listen-address \<address\>
-
-This configuration parameter lets the DHCP server to listen for DHCP
-requests sent to the specified address, it is only realistically useful for
-a server whose only clients are reached via unicasts, such as via DHCP relay
-agents.
-```
-
-#### Individual Client Subnet
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> authoritative
-
-This says that this device is the only DHCP server for this network. If other
-devices are trying to offer DHCP leases, this machine will send 'DHCPNAK' to
-any device trying to request an IP address that is not valid for this
-network.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> subnet-id \<id\>
-
-This configuration parameter is required and must be unique to each subnet.
-It is required to map subnets to lease file entries.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> option default-router \<address\>
-
-This is a configuration parameter for the `<subnet>`, saying that as part of
-the response, tell the client that the default gateway can be reached at
-`<address>`.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> option name-server \<address\>
-
-This is a configuration parameter for the subnet, saying that as part of the
-response, tell the client that the DNS server can be found at `<address>`.
-
-Multiple DNS servers can be defined.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> lease \<time\>
-
-Assign the IP address to this machine for `<time>` seconds.
-
-The default value is 86400 seconds which corresponds to one day.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> range \<n\> start \<address\>
-
-Create DHCP address range with a range id of `<n>`. DHCP leases are taken
-from this pool. The pool starts at address `<address>`.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> range \<n\> stop \<address\>
-
-Create DHCP address range with a range id of `<n>`. DHCP leases are taken
-from this pool. The pool stops with address `<address>`.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> exclude \<address\>
-
-Always exclude this address from any defined range. This address will never
-be assigned by the DHCP server.
-
-This option can be specified multiple times.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> option domain-name \<domain-name\>
-
-The domain-name parameter should be the domain name that will be appended to
-the client's hostname to form a fully-qualified domain-name (FQDN) (DHCP
-Option 015).
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> option domain-search \<domain-name\>
-
-The domain-name parameter should be the domain name used when completing DNS
-request where no full FQDN is passed. This option can be given multiple times
-if you need multiple search domains (DHCP Option 119).
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> option vendor-option \<option-name\>
-
-This configuration parameter lets you specify a vendor-option for the
-subnet specified within the shared network definition. An example for
-Ubiquiti is shown below:
-```
-
-**Example:**
-
-
-Create `172.18.201.0/24` as a subnet within `NET1` and pass address of
-Unifi controller at `172.16.100.1` to clients of that subnet.
-
-```none
-set service dhcp-server shared-network-name 'NET1' subnet
-'172.18.201.0/24' option vendor-option ubiquiti '172.16.100.1'
-```
-
-#### Dynamic DNS Update (RFC 2136)
-
-
-VyOS DHCP service supports RFC-2136 DDNS protocol. Based on DHCP lease change
-events, DHCP server generates DDNS update requests (defines as NameChangeRequests
-or NCRs) and posts them to a compliant DNS server, that will update its name
-database accordingly.
-
-
-VyOS built-in DNS Forwarder does not support DDNS, you will need an external DNS
-server with RFC-2136 DDNS support.
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update
-
-Enables DDNS globally.
-```
-
-**Behavioral settings**
-
-
-These settings can be configured on the global level and overridden on the scope
-level, i.e. for individual shared networks or subnets. See examples below.
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update send-updates [ enable | disable ]
-
-If set to ``enable`` on global level, updates for all scopes will be enabled,
-except if explicitly set to ``disable`` on the scope level. If set to ``disable``,
-updates will only be sent for scopes, where ``send-updates`` is explicity
-set to ``enable``.
-
-This model is followed for a few behavioral settings below: if the option is
-not set, the setting is inherited from the parent scope. You can override the
-parent scope setting by setting the option explicitly.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update override-no-update [ enable | disable ]
-
-VyOS will ignore client request not to update DNS records and send DDNS
-update requests regardless.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update override-client-update [ enable | disable ]
-
-VyOS will override client DDNS request settings and always update both
-forward and reverse DNS records.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update update-on-renew [ enable | disable ]
-
-Issue DDNS update requests on DHCP lease renew. In busy networks this may
-generate a lot of traffic.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update conflict-resolution [ enable | disable ]
-
-Use RFC-4703 conflict resolution. This algorithm helps in situation when
-multiple clients reserve same IP addresses or advertise identical hostnames.
-Should be used in most situations.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update replace-client-name [ never | always | when-present | when-not-present ]
-
-* **never**: use the name sent by the client. If the client didn't provide any,
-do not generate one. This is the default behavior
-
-* **always**: always generate a name for the client
-
-* **when-present**: replace the name the client sent with a generated one, if
-the client didn't send any, do not generate one
-
-* **when-not-present**: use the name sent by the client. If the client didn't
-send any, generate one for the client
-
-The names are generated using ``generated-prefix``, ``qualifying-suffix`` and the
-client's IP address string.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update generated-prefix \<prefix\>
-
-Prefix used in client name generation.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update qualifying-suffix \<suffix\>
-
-DNS suffix used in client name generation.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update ttl-percent \<0-100\>
-
-TTL of the DNS record as a percentage of the DHCP lease time.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update hostname-char-set \<character string\>
-
-Characters, that are considered invalid in the client name. They will be replaced
-with ``hostname-char-replacement`` string.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update hostname-char-replacement \<character string\>
-
-Replacement string for the invalid characters defined by ``hostname-char-set``.
-```
-
-**TSIG keys definition**
-
-
-This is the global list of TSIG keys for DDNS updates. They need to be specified by
-the name in the DNS domain definitions.
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update tsig-key \<key-name\> algorithm \<algorithm\>
-
-Sets the algorithm for the TSIG key. Supported algorithms are ``hmac-md5``,
-``hmac-sha1``, ``hmac-sha224``, ``hmac-sha256``, ``hmac-sha384``, ``hmac-sha512``
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update tsig-key \<key-name\> secret \<key-secret\>
-
-base64-encoded TSIG key secret value
-```
-
-**DNS domains definition**
-
-
-This is global configuration of DNS servers for the updatable forward and reverse
-DNS domains. For every domain multiple DNS servers can be specified.
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update [forward|reverse]-domain \<domain-name\> key-name \<tsig-key-name\>
-
-TSIG key used for the domain.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update [forward|reverse]-domain \<domain-name\> dns-server \<number\> address \<ip-address\>
-
-IP address of the DNS server.
-```
-
-
-```{cfgcmd} set service dhcp-server dynamic-dns-update [forward|reverse]-domain \<domain-name\> dns-server \<number\> port \<port\>
-
-UDP port of the DNS server. ``53`` is the default.
-```
-
-**Example:**
-
-
-Global configuration you will most likely want:
-
-```none
-set service dhcp-server dynamic-dns-update send-updates enable
-set service dhcp-server dynamic-dns-update conflict-resolution enable
-```
-
-Override the above configuration for a shared network NET1:
-
-```none
-set service dhcp-server shared-network-name 'NET1' dynamic-dns-update replace-client-name when-not-present
-set service dhcp-server shared-network-name 'NET1' dynamic-dns-update generated-prefix ip
-set service dhcp-server shared-network-name 'NET1' dynamic-dns-update qualifying-suffix mybigdomain.net
-```
-
-And in a subnet within the same shared network:
-
-```none
-set service dhcp-server shared-network-name 'NET1' subnet '172.18.201.0/24' dynamic-dns-update qualifying-suffix mydomain.net
-```
-
-Configure TSIG keys:
-
-```none
-set service dhcp-server dynamic-dns-update tsig-key mydomain-net algorithm hmac-sha256
-set service dhcp-server dynamic-dns-update tsig-key mydomain-net secret eWF5YW15bGl0dGxla2V5IQ==
-set service dhcp-server dynamic-dns-update tsig-key reverse-172-18-201 algorithm hmac-sha256
-set service dhcp-server dynamic-dns-update tsig-key reverse-172-18-201 secret eWF5YW15YW5vdGhlcmxpdHRsZWtleSE=
-```
-
-Configure DDNS domains:
-
-```none
-set service dhcp-server dynamic-dns-update forward-domain mydomain.net key-name mydomain-net
-set service dhcp-server dynamic-dns-update forward-domain mydomain.net dns-server 1 address '172.18.0.254'
-set service dhcp-server dynamic-dns-update forward-domain mydomain.net dns-server 1 port 1053
-set service dhcp-server dynamic-dns-update forward-domain mydomain.net dns-server 2 address '192.168.124.254'
-set service dhcp-server dynamic-dns-update forward-domain mydomain.net dns-server 2 port 53
-set service dhcp-server dynamic-dns-update forward-domain 201.18.172.in-addr.arpa key-name reverse-172-18-201
-set service dhcp-server dynamic-dns-update reverse-domain 201.18.172.in-addr.arpa dns-server 1 address '172.18.0.254'
-set service dhcp-server dynamic-dns-update reverse-domain 201.18.172.in-addr.arpa dns-server 1 port 1053
-set service dhcp-server dynamic-dns-update reverse-domain 201.18.172.in-addr.arpa dns-server 2 address '192.168.124.254'
-set service dhcp-server dynamic-dns-update reverse-domain 201.18.172.in-addr.arpa dns-server 2 port 53
-```
-
-#### High Availability
-
-
-VyOS provides High Availability support for DHCP server. DHCP High
-Availability can act in two different modes:
-
-
-- **Active-active**: both DHCP servers will respond to DHCP requests. If
- `mode` is not defined, this is the default behavior.
-- **Active-passive**: only `primary` server will respond to DHCP requests.
- If this server goes offline, then `secondary` server will take place.
-
-
-DHCP High Availability must be configured explicitly by the following
-statements on both servers:
-
-```{cfgcmd} set service dhcp-server high-availability mode [active-active | active-passive]
-
-Define operation mode of High Availability feature. Default value if command
-is not specified is `active-active`
-```
-
-
-```{cfgcmd} set service dhcp-server high-availability source-address \<address\>
-
-Local IP `<address>` used when communicating to the HA peer.
-```
-
-
-```{cfgcmd} set service dhcp-server high-availability remote \<address\>
-
-Remote peer IP `<address>` of the second DHCP server in this HA
-cluster.
-```
-
-
-```{cfgcmd} set service dhcp-server high-availability name \<name\>
-
-Define the name of the peer server to establish and identify the HA (High Availability) connection.
-
-:::{note}
-Make sure the specified value does not conflict with the system host-name.
-:::
-```
-
-
-```{cfgcmd} set service dhcp-server high-availability status \<primary | secondary\>
-
-The primary and secondary statements determines whether the server is primary
-or secondary.
-
-:::{note}
-In order for the primary and the secondary DHCP server to keep
-their lease tables in sync, they must be able to reach each other on TCP
-port 647. If you have firewall rules in effect, adjust them accordingly.
-:::
-:::{hint}
-The dialogue between HA partners is neither encrypted nor
-authenticated. Since most DHCP servers exist within an organisation's own
-secure Intranet, this would be an unnecessary overhead. However, if you
-have DHCP HA peers whose communications traverse insecure networks,
-then we recommend that you consider the use of VPN tunneling between them
-to ensure that the HA partnership is immune to disruption
-(accidental or otherwise) via third parties.
-:::
-```
-
-#### Static mappings
-
-
-You can specify a static DHCP assignment on a per host basis. You will need the
-MAC address of the station and your desired IP address. The address must be
-inside the subnet definition but can be outside of the range statement.
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> static-mapping \<description\> mac \<address\>
-
-Create a new DHCP static mapping named `<description>` which is valid for
-the host identified by its MAC `<address>`.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> static-mapping \<description\> duid \<identifier\>
-
-Create a new DHCP static mapping named `<description>` which is valid for
-the host identified by its DHCP unique identifier (DUID) `<identifier>`.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<name\> subnet \<subnet\> static-mapping \<description\> ip-address \<address\>
-
-Static DHCP IP address assign to host identified by `<description>`. IP
-address must be inside the `<subnet>` which is defined but can be outside
-the dynamic range created with {cfgcmd}`set service dhcp-server
-shared-network-name <name> subnet <subnet> range <n>`. If no ip-address is
-specified, an IP from the dynamic pool is used.
-
-This is useful, for example, in combination with hostfile update.
-
-:::{hint}
-This is the equivalent of the host block in dhcpd.conf of
-isc-dhcpd.
-:::
-```
-
-**Example:**
-
-
-- IP address `192.168.1.100` shall be statically mapped to client named `client1`
-
-```none
-set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 subnet-id 1
-set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 ip-address 192.168.1.100
-set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 mac aa:bb:11:22:33:00
-```
-
-The configuration will look as follows:
-
-```none
-show service dhcp-server shared-network-name NET1
- subnet 192.168.1.0/24 {
- static-mapping client1 {
- ip-address 192.168.1.100
- mac aa:bb:11:22:33:00
- }
- subnet-id 1
- }
-```
-
-#### Relay agent information (Option 82)
-
-
-Some DHCP relays support the injection of information into a DHCP request, depending on
-where the request originated from. This is commonly used to determine the
-behaviour of the DHCP server, based on the port/switch combination where the
-request was first detected. I.e. the device plugged into a particular port (or
-set of ports) always gets the same IP address (or range of IP addresses). This
-information is usually included in the request using Option 82, hence this
-is what we call this part of the configuration.
-
-
-This behaviour is controlled in two parts. First, "client classes" are defined
-which determine which inputs match. Once a positive match has been found the
-request is "tagged" with this client class. Second, when the DHCP server
-processes the request it checks to see if the configuration has a client class
-defined. If it does then that part of the configuration will override the others
-
-
-Client classes can be applied at either the subnet or range level, depending on
-how you want the server to behave.
-
-
-**Client Class definition**
-
-```{cfgcmd} set service dhcp-server client-class \<name\> relay-agent-information circuit-id \<value\>
-
-Create a new client class (if not already defined) and set it to match on
-the "Circuit ID" part of the Option 82 field in the DHCP request. This is
-sub option "1" as specified by RFC 3046. The value specified here is either
-interpreted as a raw hex value, if it starts with the prefix 0x, or ASCII text
-otherwise. e.g. ``e1-5`` and ``0x65312d35`` are the same
-```
-
-
-```{cfgcmd} set service dhcp-server client-class \<name\> relay-agent-information remote-id \<value\>
-
-Create a new client class (if not already defined) and set it to match on
-the "Remote ID" part of the Option 82 field in the DHCP request. This is
-sub option "2" as specified by RFC 3046. The value specified here is either
-interpreted as a raw hex value, if it starts with the prefix 0x, or ASCII text
-otherwise. e.g. ``10.100.0.41`` and ``0x31302e3130302e302e3431`` are the
-same
-```
-
-**Client Class application**
-
-```{cfgcmd} set service dhcp-server shared-network-name \<subnet-name\> subnet \<CIDR\> client-class \<class-name\>
-
-Applies the Client Class with the name `<class-name>` to the subnet `<subnet-name>`.
-This means that whenever the client class matches a request it is always
-routed to this subnet definition first.
-```
-
-
-```{cfgcmd} set service dhcp-server shared-network-name \<subnet-name\> subnet \<CIDR\> range \<range-name\> client-class \<class-name\>
-
-Applies the Client Class with the name `<class-name>` to the range
-`<range-name>` which belongs to subnet `<subnet-name>`. This means that whenever the
-client class matches a request it is always routed to this range definition
-first.
-```
-
-NB: Kea (the DHCP server used by VyOS) is programmed to offer as many
-alternatives as it can to repeated DHCP Discover requests. Some operating
-systems (Notably Microsoft Windows) make multiple DHCP Discover requests before
-settling on an address. This particularly seems to happen when the DHCP server
-isn't set to authorative. This may explain why the address you espect isn't
-being chosen. Wireshark is helpful in these situations.
-
-
-**Example:**
-
-
-The following configuration example will classify requests coming in on port
-`e1-5` from DHCP Relay `192.0.2.1` and make sure that they are allocated the
-address `192.0.2.4`. Any requests which do not match the circuit and remote ID
-will, instead, be allocated from the range otherRange in the usual manner.
-
-
-NB: Both the Circuit ID and Remote ID fields are arbitrary free text. *Most*
-switches set the Remote ID to the IP address of the management interface but
-that should not be relied upon. Check the documentation of your DHCP Relay for
-more detail or, as a measure of last resort, inspect the DHCP requests in
-Wireshark.
-
-```none
-service {
- dhcp-server {
- client-class className {
- relay-agent-information {
- circuit-id e1-5
- remote-id 192.0.2.1
- }
- }
- shared-network-name test {
- subnet 192.0.2.0/24 {
- range classNameRange {
- client-class className
- start 192.0.2.4
- stop 192.0.2.4
- }
- range otherRange {
- start 192.0.2.5
- stop 192.0.2.100
- }
- subnet-id 1
- }
- }
- }
-}
-```
-
-### Options
-
-
-:::{list-table}
-:header-rows: 1
-:stub-columns: 0
-:widths: 12 7 23 40 20
-
-* - Setting name
- - Option number
- - ISC-DHCP Option name
- - Option description
- - Multi
-* - client-prefix-length
- - 1
- - subnet-mask
- - Specifies the clients subnet mask as per RFC 950. If unset,
- subnet declaration is used.
- - N
-* - time-offset
- - 2
- - time-offset
- - Offset of the client's subnet in seconds from Coordinated
- Universal Time (UTC)
- - N
-* - default-router
- - 3
- - routers
- - IPv4 address of router on the client's subnet
- - N
-* - time-server
- - 4
- - time-servers
- - RFC 868 time server IPv4 address
- - Y
-* - name-server
- - 6
- - domain-name-servers
- - DNS server IPv4 address
- - Y
-* - domain-name
- - 15
- - domain-name
- - Client domain name
- - Y
-* - ip-forwarding
- - 19
- - ip-forwarding
- - Enable IP forwarding on client
- - N
-* - ntp-server
- - 42
- - ntp-servers
- - IP address of NTP server
- - Y
-* - wins-server
- - 44
- - netbios-name-servers
- - NetBIOS over TCP/IP name server
- - Y
-* - server-identifier
- - 54
- - dhcp-server-identifier
- - IP address for DHCP server identifier
- - N
-* - bootfile-server
- - siaddr
- - next-server
- - IPv4 address of next bootstrap server
- - N
-* - tftp-server-name
- - 66
- - tftp-server-name
- - Name or IPv4 address of TFTP server
- - N
-* - bootfile-name
- - 67
- - bootfile-name, filename
- - Bootstrap file name
- - N
-* - bootfile-size
- - 13
- - boot-size
- - Boot image length in 512-octet blocks
- - N
-* - smtp-server
- - 69
- - smtp-server
- - IP address of SMTP server
- - Y
-* - pop-server
- - 70
- - pop-server
- - IP address of POP3 server
- - Y
-* - domain-search
- - 119
- - domain-search
- - Client domain search
- - Y
-* - static-route
- - 121, 249
- - rfc3442-static-route, windows-static-route
- - Classless static route
- - N
-* - wpad-url
- - 252
- - wpad-url, wpad-url code 252 = text
- - Web Proxy Autodiscovery (WPAD) URL
- - N
-* - lease
- -
- - default-lease-time, max-lease-time
- - Lease timeout in seconds (default: 86400)
- - N
-* - range
- -
- - range
- - DHCP lease range
- - Y
-* - exclude
- -
- -
- - IP address to exclude from DHCP lease range
- - Y
-* - failover
- -
- -
- - DHCP failover parameters
- -
-* - static-mapping
- -
- -
- - Name of static mapping
- - Y
-:::
-
-
-Multi: can be specified multiple times.
-
-
-### Example
-
-
-Please see the {ref}`dhcp-dns-quick-start` configuration.
-
-
-(dhcp-server-v4-example-failover)=
-
-
-#### High Availability
-
-
-Configuration of a DHCP HA pair:
-
-
-- Setup DHCP HA for network 192.0.2.0/24
-- Use active-active HA mode.
-- Default gateway and DNS server is at `192.0.2.254`
-- The primary DHCP server named dhcp-primary uses address `192.168.189.252`
-- The secondary DHCP server with named dhcp-secondary uses address `192.168.189.253`
-- DHCP range spans from `192.168.189.10` - `192.168.189.250`
-
-
-Common configuration, valid for both primary and secondary node.
-
-```none
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option default-router '192.0.2.254'
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option name-server '192.0.2.254'
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option domain-name 'vyos.net'
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 start '192.0.2.10'
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 stop '192.0.2.250'
-set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 subnet-id '1'
-```
-
-**Primary**
-
-```none
-set service dhcp-server high-availability mode 'active-active'
-set service dhcp-server high-availability source-address '192.168.189.252'
-set service dhcp-server high-availability name 'dhcp-secondary'
-set service dhcp-server high-availability remote '192.168.189.253'
-set service dhcp-server high-availability status 'primary'
-```
-
-**Secondary**
-
-```none
-set service dhcp-server high-availability mode 'active-active'
-set service dhcp-server high-availability source-address '192.168.189.253'
-set service dhcp-server high-availability name 'dhcp-primary'
-set service dhcp-server high-availability remote '192.168.189.252'
-set service dhcp-server high-availability status 'secondary'
-```
-
-(dhcp-server-v4-example-raw)=
-
-
-### Operation Mode
-
-```{opcmd} show log dhcp server
-
-Show DHCP server daemon log file
-```
-
-
-```{opcmd} show log dhcp client
-
-Show logs from all DHCP client processes.
-```
-
-
-```{opcmd} show log dhcp client interface \<interface\>
-
-Show logs from specific `interface` DHCP client process.
-```
-
-
-```{opcmd} restart dhcp server
-
-Restart the DHCP server
-```
-
-
-```{opcmd} show dhcp server statistics
-
-Show the DHCP server statistics:
-```
-
-
-```none
-vyos@vyos:~$ show dhcp server statistics
-Pool Size Leases Available Usage
------------ ------ -------- ----------- -------
-dhcpexample 99 2 97 2%
-```
-
-
-```{opcmd} show dhcp server statistics pool \<pool\>
-
-Show the DHCP server statistics for the specified pool.
-```
-
-
-```{opcmd} show dhcp server leases
-
-Show statuses of all active leases:
-```
-
-
-```none
-vyos@vyos:~$ show dhcp server leases
-IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin
--------------- ----------------- ------- ------------------- ------------------- ----------- -------- ---------- --------
-192.168.11.134 00:50:79:66:68:09 active 2023/11/29 09:51:05 2023/11/29 10:21:05 0:24:10 LAN VPCS1 local
-192.168.11.133 50:00:00:06:00:00 active 2023/11/29 09:51:38 2023/11/29 10:21:38 0:24:43 LAN VYOS-6 local
-10.11.11.108 50:00:00:05:00:00 active 2023/11/29 09:51:43 2023/11/29 10:21:43 0:24:48 VIF-1001 VYOS5 local
-192.168.11.135 00:50:79:66:68:07 active 2023/11/29 09:55:16 2023/11/29 09:59:16 0:02:21 remote
-vyos@vyos:~$
-```
-
-:::{hint}
-Static mappings aren't shown. To show all states, use
-`show dhcp server leases state all`.
-:::
-
-```{opcmd} show dhcp server leases origin [local | remote]
-
-Show statuses of all active leases granted by local (this server) or
-remote (failover server):
-```
-
-
-```none
-vyos@vyos:~$ show dhcp server leases origin remote
-IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin
--------------- ----------------- ------- ------------------- ------------------- ----------- -------- ---------- --------
-192.168.11.135 00:50:79:66:68:07 active 2023/11/29 09:55:16 2023/11/29 09:59:16 0:02:21 remote
-vyos@vyos:~$
-```
-
-
-```{opcmd} show dhcp server leases pool \<pool\>
-
-Show only leases in the specified pool.
-```
-
-
-```none
-vyos@vyos:~$ show dhcp server leases pool LAN
-IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin
--------------- ----------------- ------- ------------------- ------------------- ----------- ------ ---------- --------
-192.168.11.134 00:50:79:66:68:09 active 2023/11/29 09:51:05 2023/11/29 10:21:05 0:23:55 LAN VPCS1 local
-192.168.11.133 50:00:00:06:00:00 active 2023/11/29 09:51:38 2023/11/29 10:21:38 0:24:28 LAN VYOS-6 local
-vyos@vyos:~$
-```
-
-
-```{opcmd} show dhcp server leases sort \<key\>
-
-Sort the output by the specified key. Possible keys: ip, hardware_address,
-state, start, end, remaining, pool, hostname (default = ip)
-```
-
-
-```{opcmd} show dhcp server leases state \<state\>
-
-Show only leases with the specified state. Possible states: all, active,
-free, expired, released, abandoned, reset, backup (default = active)
-```
-
-## IPv6 server
-
-VyOS also provides DHCPv6 server functionality which is described in this
-section.
-(dhcp-server-v6-config)=
-
-### Configuration
-
-```{cfgcmd} set service dhcpv6-server preference \<preference value\>
-
- Clients receiving advertise messages from multiple servers choose the server
- with the highest preference value. The range for this value is ``0...255``.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<subnet\> subnet-id \<id\>
-
-This configuration parameter is required and must be unique to each subnet.
-It is required to map subnets to lease file entries.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> lease-time {default | maximum | minimum}
-
-The default lease time for DHCPv6 leases is 24 hours. This can be changed by
-supplying a ``default-time``, ``maximum-time`` and ``minimum-time``. All
-values need to be supplied in seconds.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option nis-domain \<domain-name\>
-
-A {abbr}`NIS (Network Information Service)` domain can be set to be used for
-DHCPv6 clients.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option nisplus-domain \<domain-name\>
-
-The procedure to specify a {abbr}`NIS+ (Network Information Service Plus)`
-domain is similar to the NIS domain one:
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option nis-server \<address\>
-
-Specify a NIS server address for DHCPv6 clients.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option nisplus-server \<address\>
-
-Specify a NIS+ server address for DHCPv6 clients.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option sip-server \<address | fqdn\>
-
-Specify a {abbr}`SIP (Session Initiation Protocol)` server by IPv6
-address of Fully Qualified Domain Name for all DHCPv6 clients.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> option sntp-server-address \<address\>
-
-A SNTP server address can be specified for DHCPv6 clients.
-```
-
-#### Prefix Delegation
-
-
-To hand out individual prefixes to your clients the following configuration is
-used:
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> prefix-delegation prefix \<pd-prefix\> prefix-length \<lenght\>
-
-Delegate prefixes from `<pd-prefix>` to clients in subnet `<prefix>`. Range
-is defined by `<lenght>` in bits, 32 to 64.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> prefix-delegation prefix \<pd-prefix\> delegated-length \<lenght\>
-
-Hand out prefixes of size `<length>` in bits from `<pd-prefix>` to clients
-in subnet `<prefix>` when the request for prefix delegation.
-```
-
-
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> prefix-delegation prefix \<pd-prefix\> excluded-prefix \<exclude-prefix\>
-
-Exclude `<exclude-prefix>` from `<pd-prefix>`.
-```
-```{cfgcmd} set service dhcpv6-server shared-network-name \<name\> subnet \<prefix\> prefix-delegation prefix \<pd-prefix\> excluded-prefix-length \<length\>
-
-Define lenght of exclude prefix in `<pd-prefix>`.
-```
-
-**Example:**
-- A shared network named `PD-NET` serves subnet `2001:db8::/64`.
-- It is connected to `eth1`.
-- Address pool shall be `2001:db8::100` through `2001:db8::199`.
-- It hands out prefixes `2001:db8:0:10::/64` through `2001:db8:0:1f::/64`.
-
-```none
-set service dhcpv6-server shared-network-name 'PD-NET' interface 'eth1'
-set service dhcpv6-server shared-network-name 'PD-NET' subnet 2001:db8::/64 range 1 start 2001:db8::100
-set service dhcpv6-server shared-network-name 'PD-NET' subnet 2001:db8::/64 range 1 stop 2001:db8::199
-set service dhcpv6-server shared-network-name 'PD-NET' subnet 2001:db8::/64 prefix-delegation prefix 2001:db8:0:10:: delegated-length '64'
-set service dhcpv6-server shared-network-name 'PD-NET' subnet 2001:db8::/64 prefix-delegation prefix 2001:db8:0:10:: prefix-length '60'
-set service dhcpv6-server shared-network-name 'PD-NET' subnet 2001:db8::/64 subnet-id 1
-```
-
-#### Address pools
-
-DHCPv6 address pools must be configured for the system to act as a DHCPv6
-server. The following example describes a common scenario.
-
-**Example:**
-- A shared network named `NET1` serves subnet `2001:db8::/64`
-- It is connected to `eth1`
-- DNS server is located at `2001:db8::ffff`
-- Address pool shall be `2001:db8::100` through `2001:db8::199`.
-- Lease time will be left at the default value which is 24 hours
-
-```none
-set service dhcpv6-server shared-network-name 'NET' interface 'eth1'
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 range 1 start 2001:db8::100
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 range 1 stop 2001:db8::199
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 option name-server 2001:db8::ffff
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 subnet-id 1
-```
-
-The configuration will look as follows:
-
-```none
-show service dhcpv6-server
- shared-network-name NET1 {
- subnet 2001:db8::/64 {
- range 1 {
- start 2001:db8::100
- stop 2001:db8::199
- }
- option {
- name-server 2001:db8::ffff
- }
- subnet-id 1
- }
- }
-```
-
-(dhcp-server-v6-static-mapping)=
-
-#### Static mappings
-
-In order to map specific IPv6 addresses to specific hosts static mappings can
-be created. The following example explains the process.
-
-**Example:**
-- IPv6 address `2001:db8::101` shall be statically mapped
-- IPv6 prefix `2001:db8:0:101::/64` shall be statically mapped
-- Host specific mapping shall be named `client1`
-
-:::{hint}
-The identifier is the device's DUID: colon-separated hex list (as
-used by isc-dhcp option dhcpv6.client-id). If the device already has a
-dynamic lease from the DHCPv6 server, its DUID can be found with `show
-service dhcpv6 server leases`. The DUID begins at the 5th octet (after the
-4th colon) of IAID_DUID.
-:::
-```none
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 ipv6-address 2001:db8::101
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 ipv6-prefix 2001:db8:0:101::/64
-set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 duid 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
-```
-
-The configuration will look as follows:
-
-```none
-show service dhcpv6-server shared-network-name NET1
- subnet 2001:db8::/64 {
- static-mapping client1 {
- duid 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
- ipv6-address 2001:db8::101
- ipv6-prefix 2001:db8:0:101::/64
- }
- }
-```
-
-(dhcp-server-v6-op-cmd)=
-
-### Operation Mode
-
-```{opcmd} show log dhcpv6 server
-
-Show DHCPv6 server daemon log file
-```
-```{opcmd} show log dhcpv6 client
-
-Show logs from all DHCPv6 client processes.
-```
-```{opcmd} show log dhcpv6 client interface \<interface\>
-
-Show logs from specific `interface` DHCPv6 client process.
-```
-```{opcmd} restart dhcpv6 server
-
-To restart the DHCPv6 server
-```
-```{opcmd} show dhcpv6 server leases
-
-Shows status of all assigned leases:
-```
-```none
-vyos@vyos:~$ show dhcpv6 server leases
-IPv6 address State Last communication Lease expiration Remaining Type Pool DUID
----------------- ------- -------------------- ------------------- ----------- ----- -------- --------------------------------------------
-2001:db8::101 active 2019/12/05 19:40:10 2019/12/06 07:40:10 11:45:21 IA_NA NET1 98:76:54:32:00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
-2001:db8::102 active 2019/12/05 14:01:23 2019/12/06 02:01:23 6:06:34 IA_NA NET1 87:65:43:21:00:01:00:01:11:22:33:44:fa:fb:fc:fd:fe:ff
-2001:db8:10::/64 active 2019/12/05 23:20:10 2019/12/06 11:40:10 11:45:21 IA_PD PD-NET1 98:76:54:32:00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
-```
-
-:::{hint}
-Static mappings aren't shown. To show all states, use `show dhcp
-server leases state all`.
-:::
-
-```{opcmd} show dhcpv6 server leases pool \<pool\>
-
-Show only leases in the specified pool.
-```
-```{opcmd} show dhcpv6 server leases sort \<key\>
-
-Sort the output by the specified key. Possible keys: expires, iaid_duid, ip,
-last_comm, pool, remaining, state, type (default = ip)
-```
-```{opcmd} show dhcpv6 server leases state \<state\>
-
-Show only leases with the specified state. Possible states: abandoned,
-active, all, backup, expired, free, released, reset (default = active)
-``` \ No newline at end of file
diff --git a/docs/configuration/service/md-dns.md b/docs/configuration/service/md-dns.md
deleted file mode 100644
index e7e9b457..00000000
--- a/docs/configuration/service/md-dns.md
+++ /dev/null
@@ -1,582 +0,0 @@
-(dns-forwarding)=
-
-# DNS Forwarding
-
-## Configuration
-
-VyOS provides DNS infrastructure for small networks. It is designed to be
-lightweight and have a small footprint, suitable for resource constrained
-routers and firewalls. For this we utilize PowerDNS recursor.
-
-The VyOS DNS forwarder does not require an upstream DNS server. It can serve as
-a full recursive DNS server - but it can also forward queries to configurable
-upstream DNS servers. By not configuring any upstream DNS servers you also
-avoid being tracked by the provider of your upstream DNS server.
-
-```{cfgcmd} set service dns forwarding system
-
- Forward incoming DNS queries to the DNS servers configured under the ``system
- name-server`` nodes.
-```
-
-
-```{cfgcmd} set service dns forwarding dhcp \<interface\>
-
-Interfaces whose DHCP client nameservers to forward requests to.
-```
-
-
-```{cfgcmd} set service dns forwarding name-server \<address\> port \<port\>
-
-Send all DNS queries to the IPv4/IPv6 DNS server specified under `<address>`
-on optional port specified under `<port>`. The port defaults to 53. You can
-configure multiple nameservers here.
-```
-
-
-```{cfgcmd} set service dns forwarding domain \<domain-name\> name-server \<address\>
-
-Forward received queries for a particular domain
-(specified via `domain-name`) to a given nameserver. Multiple nameservers
-can be specified. You can use this feature for a DNS split-horizon
-configuration.
-
-:::{note}
-This also works for reverse-lookup zones (``18.172.in-addr.arpa``).
-:::
-```
-
-
-```{cfgcmd} set service dns forwarding domain \<domain-name\> addnta
-
-Add NTA (negative trust anchor) for this domain. This must be set if the
-domain does not support DNSSEC.
-```
-
-
-```{cfgcmd} set service dns forwarding domain \<domain-name\> recursion-desired
-
-Set the "recursion desired" bit in requests to the upstream nameserver.
-```
-
-
-```{cfgcmd} set service dns forwarding allow-from \<network\>
-
-Given the fact that open DNS recursors could be used on DDoS amplification
-attacks, you must configure the networks which are allowed to use this
-recursor. A network of ``0.0.0.0/0`` or ``::/0`` would allow all IPv4 and
-IPv6 networks to query this server. This is generally a bad idea.
-```
-
-
-```{cfgcmd} set service dns forwarding dnssec \<off | process-no-validate | process | log-fail | validate\>
-
-The PowerDNS recursor has 5 different levels of DNSSEC processing, which can
-be set with the dnssec setting. In order from least to most processing, these
-are:
-
-* **off** In this mode, no DNSSEC processing takes place. The recursor will
-not set the DNSSEC OK (DO) bit in the outgoing queries and will ignore the
-DO and AD bits in queries.
-
-* **process-no-validate** In this mode the recursor acts as a "security
-aware, non-validating" nameserver, meaning it will set the DO-bit on
-outgoing queries and will provide DNSSEC related RRsets (NSEC, RRSIG) to
-clients that ask for them (by means of a DO-bit in the query), except for
-zones provided through the auth-zones setting. It will not do any
-validation in this mode, not even when requested by the client.
-
-* **process** When dnssec is set to process the behavior is similar to
-process-no-validate. However, the recursor will try to validate the data
-if at least one of the DO or AD bits is set in the query; in that case,
-it will set the AD-bit in the response when the data is validated
-successfully, or send SERVFAIL when the validation comes up bogus.
-
-* **log-fail** In this mode, the recursor will attempt to validate all data
-it retrieves from authoritative servers, regardless of the client's DNSSEC
-desires, and will log the validation result. This mode can be used to
-determine the extra load and amount of possibly bogus answers before
-turning on full-blown validation. Responses to client queries are the same
-as with process.
-
-* **validate** The highest mode of DNSSEC processing. In this mode, all
-queries will be validated and will be answered with a SERVFAIL in case of
-bogus data, regardless of the client's request.
-
-:::{note}
-The popular Unix/Linux ``dig`` tool sets the AD-bit in the query.
-This might lead to unexpected query results when testing. Set ``+noad``
-on the ``dig`` command line when this is the case.
-:::
-
-:::{note}
-The ``CD``-bit is honored correctly for process and validate. For
-log-fail, failures will be logged too.
-:::
-```
-
-
-```{cfgcmd} set service dns forwarding ignore-hosts-file
-
-Do not use the local ``/etc/hosts`` file in name resolution. VyOS DHCP
-server will use this file to add resolvers to assigned addresses.
-```
-
-
-```{cfgcmd} set service dns forwarding cache-size \<0-2147483647\>
-
-Maximum number of DNS cache entries. 1 million per CPU core will generally
-suffice for most installations.
-
-This defaults to 10000.
-```
-
-
-```{cfgcmd} set service dns forwarding negative-ttl \<0-7200\>
-
-A query for which there is authoritatively no answer is cached to quickly
-deny a record's existence later on, without putting a heavy load on the
-remote server. In practice, caches can become saturated with hundreds of
-thousands of hosts which are tried only once.
-
-This setting, which defaults to 3600 seconds, puts a maximum on the amount
-of time negative entries are cached.
-```
-
-
-```{cfgcmd} set service dns forwarding timeout \<10-60000\>
-
-The number of milliseconds to wait for a remote authoritative server to
-respond before timing out and responding with SERVFAIL.
-
-This setting defaults to 1500 and is valid between 10 and 60000.
-```
-
-
-```{cfgcmd} set service dns forwarding listen-address \<address\>
-
-The local IPv4 or IPv6 addresses to bind the DNS forwarder to. The forwarder
-will listen on this address for incoming connections.
-```
-
-
-```{cfgcmd} set service dns forwarding source-address \<address\>
-
-The local IPv4 or IPv6 addresses to use as a source address for sending queries.
-The forwarder will send forwarded outbound DNS requests from this address.
-```
-
-
-```{cfgcmd} set service dns forwarding no-serve-rfc1918
-
-This makes the server authoritatively not aware of: 10.in-addr.arpa,
-168.192.in-addr.arpa, 16-31.172.in-addr.arpa, which enabling upstream
-DNS server(s) to be used for reverse lookups of these zones.
-```
-
-### Authoritative zones
-
-
-The VyOS DNS forwarder can also be configured to host authoritative records for a domain.
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> disable
-
-Disable hosting authoritative zone for `<domain-name>` without deleting from
-configuration.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records \<type\> \<name\> disable
-
-Disable specific record without deleting it from configuration.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records \<type\> \<name\> ttl \<seconds\>
-
-Set the {abbr}`TTL (Time-to-live)` for the record in seconds. Default is 300 seconds.
-```
-
-#### Record types
-
-
-Below are a list of record types available to be configured within VyOS. Some records
-support special `<name>` keywords:
-
-
-- `@` Use @ as record name to set the record for the root domain.
-- `any` Use any as record name to configure the record as a wildcard.
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records a \<name\> address \<x.x.x.x\>
-
-Set an {abbr}`A (Address)` record. Supports ``@`` and ``any`` keywords.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records aaaa \<name\> address \<h:h:h:h:h:h:h:h\>
-
-Set an {abbr}`AAAA (IPv6 Address)` record. Supports ``@`` and ``any`` keywords.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records cname \<name\> target \<target-domain-name\>
-
-Set an {abbr}`CNAME (Canonical name)` record. Supports ``@`` keyword.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records naptr \<name\> rule \<rule-number\> \<option\> \<value\>
-
-Set an {abbr}`NAPTR (Naming authority pointer)` record. Supports ``@`` keyword.
-NAPTR records support the following options:
-
-* **lookup-a** A Flag.
-
-* **lookup-srv** S flag.
-
-* **order** Rule order. Requires `<value>`.
-
-* **preference** Rule preference. Requires `<value>`. Defaults to 0 if not set.
-
-* **protocol-specific** P flag.
-
-* **regexp** Regular expression. Requires `<value>`.
-
-* **replacement** Replacement DNS name.
-
-* **resolve-uri** U flag.
-
-* **service** Service type. Requires `<value>`.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records ns \<name\> target \<target-name\>
-
-Set an {abbr}`NS (Nameserver)` record.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records ptr \<name\> target \<target-name\>
-
-Set an {abbr}`PTR (Pointer record)` record. Supports ``@`` keyword.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records spf \<name\> value \<value\>
-
-Set an {abbr}`SPF (Sender policy framework)` record. Supports ``@`` keyword.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records srv \<name\> entry \<entry-number\> [hostname | port | priority | weight] \<value\>
-
-Set an {abbr}`SRV (Service)` record. Supports ``@`` keyword.
-```
-
-
-```{cfgcmd} set service dns forwarding authoritative-domain \<domain-name\> records txt \<name\> value \<value\>
-
-Set an {abbr}`TXT (Text)` record. Supports ``@`` keyword.
-```
-
-## Example
-
-
-A VyOS router with two interfaces - eth0 (WAN) and eth1 (LAN) - is required to
-implement a split-horizon DNS configuration for example.com.
-
-
-In this scenario:
-
-
-- All DNS requests for example.com must be forwarded to a DNS server
- at 192.0.2.254 and 2001:db8:cafe::1
-- All other DNS requests will be forwarded to a different set of DNS servers at
- 192.0.2.1, 192.0.2.2, 2001:db8::1:ffff and 2001:db8::2:ffff
-- The VyOS DNS forwarder will only listen for requests on the eth1 (LAN)
- interface addresses - 192.168.1.254 for IPv4 and 2001:db8::ffff for IPv6
-- The VyOS DNS forwarder will only accept lookup requests from the
- LAN subnets - 192.168.1.0/24 and 2001:db8::/64
-- The VyOS DNS forwarder will pass reverse lookups for 10.in-addr.arpa,
- 168.192.in-addr.arpa, 16-31.172.in-addr.arpa zones to upstream server.
-
-```none
-set service dns forwarding domain example.com name-server 192.0.2.254
-set service dns forwarding domain example.com name-server 2001:db8:cafe::1
-set service dns forwarding name-server 192.0.2.1
-set service dns forwarding name-server 192.0.2.2
-set service dns forwarding name-server 192.0.2.3 port 853
-set service dns forwarding name-server 2001:db8::1:ffff
-set service dns forwarding name-server 2001:db8::2:ffff
-set service dns forwarding name-server 2001:db8::3:ffff port 8053
-set service dns forwarding listen-address 192.168.1.254
-set service dns forwarding listen-address 2001:db8::ffff
-set service dns forwarding allow-from 192.168.1.0/24
-set service dns forwarding allow-from 2001:db8::/64
-set service dns forwarding no-serve-rfc1918
-```
-
-## Operation
-
-```{opcmd} reset dns forwarding \<all | domain\>
-
-Resets the local DNS forwarding cache database. You can reset the cache
-for all entries or only for entries to a specific domain.
-```
-
-
-```{opcmd} restart dns forwarding
-
-Restarts the DNS recursor process. This also invalidates the local DNS
-forwarding cache.
-```
-
-(dynamic-dns)=
-
-# Dynamic DNS
-
-VyOS is able to update a remote DNS record when an interface gets a new IP
-address. In order to do so, VyOS includes [ddclient], a Perl script written for
-this only one purpose.
-
-[ddclient] uses two methods to update a DNS record. The first one will send
-updates directly to the DNS daemon, in compliance with {rfc}`2136`. The second
-one involves a third party service, like DynDNS.com or any other such
-service provider. This method uses HTTP requests to transmit the new IP address.
-You can configure both in VyOS.
-(dns-dynamic-config)=
-
-## Configuration
-### {rfc}`2136` Based
-
-```{cfgcmd} set service dns dynamic name \<service-name\> address interface \<interface\>
-
- Create new dynamic DNS update configuration which will update the IP
- address assigned to `<interface>` on the service you configured under
- `<service-name>`.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> description \<text\>
-
-Set description `<text>` for dynamic DNS service being configured.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> key \<filename\>
-
-File identified by `<filename>` containing the TSIG authentication key for RFC2136
-nsupdate on remote DNS server.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> server \<server\>
-
-Configure the DNS `<server>` IP/FQDN used when updating this dynamic
-assignment.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> zone \<zone\>
-
-Configure DNS `<zone>` to be updated.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> host-name \<record\>
-
-Configure DNS `<record>` which should be updated. This can be set multiple times.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> ttl \<ttl\>
-
-Configure optional TTL value on the given resource record. This defaults to
-600 seconds.
-```
-
-
-```{cfgcmd} set service dns dynamic interval \<60-3600\>
-
-Specify interval in seconds to wait between Dynamic DNS updates.
-The default is 300 seconds.
-```
-
-(dns-dynamic-example)=
-
-
-#### Example
-
-
-- Register DNS record `example.vyos.io` on DNS server `ns1.vyos.io`
-- Use auth key file at `/config/auth/my.key`
-- Set TTL to 300 seconds
-
-```none
-# Configuration commands entered:
-#
-set service dns dynamic name 'VyOS-DNS' address interface 'eth0'
-set service dns dynamic name 'VyOS-DNS' description 'RFC 2136 dynamic dns service'
-set service dns dynamic name 'VyOS-DNS' key '/config/auth/my.key'
-set service dns dynamic name 'VyOS-DNS' server 'ns1.vyos.io'
-set service dns dynamic name 'VyOS-DNS' zone 'vyos.io'
-set service dns dynamic name 'VyOS-DNS' host-name 'example.vyos.io'
-set service dns dynamic name 'VyOS-DNS' protocol 'nsupdate'
-set service dns dynamic name 'VyOS-DNS' ttl '300'
-
-# Resulting config:
-#
-vyos@vyos# show service dns dynamic
- name VyOS-DNS {
- address {
- interface eth0
- }
- description "RFC 2136 dynamic dns service"
- host-name example.vyos.io
- key /config/auth/my.key
- protocol nsupdate
- server ns1.vyos.io
- ttl 300
- zone vyos.io
- }
-```
-
-This will render the following [ddclient] configuration entry:
-
-```none
-# ddclient configuration for interface "eth0":
-#
-
-# Web service dynamic DNS configuration for VyOS-DNS: [nsupdate, example.vyos.io]
-use=if, \
-if=eth0, \
-protocol=nsupdate, \
-server=ns1.vyos.io, \
-zone=vyos.io, \
-password='/config/auth/my.key', \
-ttl=300 \
-example.vyos.io
-```
-
-:::{note}
-You can also keep different DNS zone updated. Just create a new
-config node: `set service dns dynamic interface <interface> rfc2136
-<other-service-name>`
-:::
-
-
-### HTTP based services
-
-
-VyOS is also able to use any service relying on protocols supported by ddclient.
-
-
-To use such a service, one must define a login, password, one or multiple
-hostnames, protocol and server.
-
-```{cfgcmd} set service dns dynamic name \<service-name\> address interface \<interface\>
-
-Create new dynamic DNS update configuration which will update the IP
-address assigned to `<interface>` on the service you configured under
-`<service-name>`.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> description \<text\>
-
-Set description `<text>` for dynamic DNS service being configured.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> host-name \<hostname\>
-
-Setup the dynamic DNS hostname `<hostname>` associated with the DynDNS
-provider identified by `<service-name>`.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> username \<username\>
-
-Configure `<username>` used when authenticating the update request for
-DynDNS service identified by `<service-name>`.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> password \<password\>
-
-Configure `<password>` used when authenticating the update request for
-DynDNS service identified by `<service-name>`.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> protocol \<protocol\>
-
-When a ``custom`` DynDNS provider is used, the protocol used for communicating
-to the provider must be specified under `<protocol>`. See the embedded
-completion helper when entering above command for available protocols.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> server \<server\>
-
-When a ``custom`` DynDNS provider is used the `<server>` where update
-requests are being sent to must be specified.
-```
-
-
-```{cfgcmd} set service dns dynamic name \<service-name\> ip-version 'ipv6'
-
-Allow explicit IPv6 address for the interface.
-```
-
-#### Example:
-
-Use deSEC (dedyn.io) as your preferred provider:
-
-```none
-set service dns dynamic name dedyn description 'deSEC dynamic dns service'
-set service dns dynamic name dedyn username 'myusername'
-set service dns dynamic name dedyn password 'mypassword'
-set service dns dynamic name dedyn host-name 'myhostname.dedyn.io'
-set service dns dynamic name dedyn protocol 'dyndns2'
-set service dns dynamic name dedyn server 'update.dedyn.io'
-set service dns dynamic name dedyn address interface 'eth0'
-```
-
-:::{note}
-Multiple services can be used per interface. Just specify as many
-services per interface as you like!
-:::
-#### Example IPv6 only:
-
-```none
-set service dns dynamic name dedyn description 'deSEC ipv6 dynamic dns service'
-set service dns dynamic name dedyn username 'myusername'
-set service dns dynamic name dedyn password 'mypassword'
-set service dns dynamic name dedyn host-name 'myhostname.dedyn.io'
-set service dns dynamic name dedyn protocol 'dyndns2'
-set service dns dynamic name dedyn ip-version 'ipv6'
-set service dns dynamic name dedyn server 'update6.dedyn.io'
-set service dns dynamic name dedyn address interface 'eth0'
-```
-
-### Running Behind NAT
-
-By default, [ddclient] will update a dynamic dns record using the IP address
-directly attached to the interface. If your VyOS instance is behind NAT, your
-record will be updated to point to your internal IP.
-
-[ddclient] has another way to determine the WAN IP address. This is controlled
-by:
-
-```{cfgcmd} set service dns dynamic name \<service-name\> address web \<url\>
-
-Use configured `<url>` to determine your IP address. [ddclient] will load
-`<url>` and tries to extract your IP address from the response.
-```
-```{cfgcmd} set service dns dynamic name \<service-name\> address web skip \<pattern\>
-
-ddclient will skip any address located before the string set in `<pattern>`.
-```
-
-[ddclient]: https://github.com/ddclient/ddclient
diff --git a/docs/configuration/service/md-eventhandler.md b/docs/configuration/service/md-eventhandler.md
deleted file mode 100644
index 48031909..00000000
--- a/docs/configuration/service/md-eventhandler.md
+++ /dev/null
@@ -1,130 +0,0 @@
-(event-handler)=
-
-# Event Handler
-
-## Event Handler Technology Overview
-
-Event handler allows you to execute scripts when a string that matches
-a regex or a regex with a service name appears in journald logs. You
-can pass variables, arguments, and a full matching string to the script.
-
-## How to configure Event Handler
-
-> [1. Create an event handler](#create-an-event-handler)
->
-> [2. Add regex to the script](#add-regex-to-the-script)
->
-> [3. Add a full path to the script](#add-a-full-path-to-the-script)
->
-> [4. Add optional parameters](#add-optional-parameters)
-
-## Event Handler Configuration Steps
-
-### 1. Create an event handler
-
-```{cfgcmd} set service event-handler event \<event-handler name\>
-
-This is an optional command because the event handler will be
-automatically created after any of the next commands.
-```
-
-
-### 2. Add regex to the script
-
-```{cfgcmd} set service event-handler event \<event-handler name\> filter pattern \<regex\>
-
-This is a mandatory command. Sets regular expression to match
-against log string message.
-
-:::{note}
-The regular expression matches if and only if the entire
-string matches the pattern.
-:::
-```
-
-
-### 3. Add a full path to the script
-
-```{cfgcmd} set service event-handler event \<event-handler name\> script path \<path to script\>
-
-This is a mandatory command. Sets the full path to the script.
-The script file must be executable.
-```
-
-
-### 4. Add optional parameters
-
-```{cfgcmd} set service event-handler event \<event-handler name\> filter syslog-identifier \<syslogid name\>
-
-This is an optional command. Filters log messages by
-syslog-identifier.
-```
-
-```{cfgcmd} set service event-handler event \<event-handler name\> script environment \<env name\> value \<env value\>
-
-This is an optional command. Adds environment and its value to
-the script. Use separate commands for each environment.
-
-One implicit environment exists.
-
-* ``message``: Full message that has triggered the script.
-```
-
-```{cfgcmd} set service event-handler event \<event-handler name\> script arguments \<arguments\>
-
-This is an optional command. Adds arguments to the script.
-Arguments must be separated by spaces.
-
-:::{note}
-We don't recommend to use arguments. Using environments
-is more preferable.
-:::
-```
-
-
-## Example
-
-Event handler that monitors the state of interface eth0.
-
-```none
-set service event-handler event INTERFACE_STATE_DOWN filter pattern '.*eth0.*,RUNNING,.*->.*'
-set service event-handler event INTERFACE_STATE_DOWN filter syslog-identifier 'netplugd'
-set service event-handler event INTERFACE_STATE_DOWN script environment interface_action value 'down'
-set service event-handler event INTERFACE_STATE_DOWN script environment interface_name value 'eth0'
-set service event-handler event INTERFACE_STATE_DOWN script path '/config/scripts/eventhandler.py'
-```
-
-Event handler script
-
-```none
-#!/usr/bin/env python3
-#
-# VyOS event-handler script example
-from os import environ
-import subprocess
-from sys import exit
-
-# Perform actions according to requirements
-def process_event() -> None:
- # Get variables
- message_text = environ.get('message')
- interface_name = environ.get('interface_name')
- interface_action = environ.get('interface_action')
- # Print the message that triggered this script
- print(f'Logged message: {message_text}')
- # Prepare a command to run
- command = f'sudo ip link set {interface_name} {interface_action}'.split()
- # Execute a command
- subprocess.run(command)
-
-if __name__ == '__main__':
- try:
- # Run script actions and exit
- process_event()
- exit(0)
- except Exception as err:
- # Exit properly in case if something in the script goes wrong
- print(f'Error running script: {err}')
- exit(1)
-```
-
diff --git a/docs/configuration/service/md-https.md b/docs/configuration/service/md-https.md
deleted file mode 100644
index 184fd088..00000000
--- a/docs/configuration/service/md-https.md
+++ /dev/null
@@ -1,138 +0,0 @@
-(http-api)=
-
-# HTTP API
-
-VyOS provide an HTTP API. You can use it to execute op-mode commands,
-update VyOS, set or delete config.
-
-Please take a look at the {ref}`vyosapi` page for an detailed how-to.
-
-## Configuration
-
-```{cfgcmd} set service https allow-client address \<address\>
-
-Only allow certain IP addresses or prefixes to access the https
-webserver.
-```
-
-```{cfgcmd} set service https certificates ca-certificate \<name\>
-
-Use CA certificate from PKI subsystem
-```
-
-```{cfgcmd} set service https certificates certificate \<name\>
-
-Use certificate from PKI subsystem
-```
-
-```{cfgcmd} set service https certificates dh-params \<name\>
-
-Use {abbr}`DH (Diffie–Hellman)` parameters from PKI subsystem.
-Must be at least 2048 bits in length.
-```
-
-```{cfgcmd} set service https listen-address \<address\>
-
-Webserver should only listen on specified IP address
-```
-
-```{cfgcmd} set service https port \<number\>
-
-Webserver should listen on specified port.
-
-Default: 443
-```
-
-```{cfgcmd} set service https enable-http-redirect
-
-Enable automatic redirect from http to https.
-```
-
-```{cfgcmd} set service https tls-version \<1.2 | 1.3\>
-
-Select TLS version used.
-
-This defaults to both 1.2 and 1.3.
-```
-
-```{cfgcmd} set service https vrf \<name\>
-
-Start Webserver in given VRF.
-```
-
-```{cfgcmd} set service https request-body-size-limit \<size\>
-
-Set the maximum request body size in megabytes. Default is 1MB.
-```
-
-
-### API
-
-```{cfgcmd} set service https api keys id \<name\> key \<apikey\>
-
-Set a named api key. Every key has the same, full permissions
-on the system.
-```
-
-
-### REST
-
-```{cfgcmd} set service https api rest
-
-Enable REST API
-```
-
-```{cfgcmd} set service https api rest debug
-
-To enable debug messages. Available via {opcmd}`show log` or
-{opcmd}`monitor log`
-```
-
-```{cfgcmd} set service https api rest strict
-
-Enforce strict path checking.
-```
-
-
-### GraphQL
-
-```{cfgcmd} set service https api graphql introspection
-
-Enable GraphQL Schema introspection.
-```
-
-:::{note}
-Do not leave introspection enabled in production, it is a security risk.
-:::
-
-```{cfgcmd} set service https api graphql authentication type \<key | token\>
-
-Set the authentication type for GraphQL, default option is key. Available options are:
-* ``key`` use API keys configured in ``service https api keys``
-* ``token`` use JWT tokens.
-```
-
-```{cfgcmd} set service https api graphql authentication expiration
-
-Set the lifetime for JWT tokens in seconds. Default is 3600 seconds.
-```
-
-```{cfgcmd} set service https api graphql authentication secret-length
-
-Set the byte length of the JWT secret. Default is 32.
-```
-
-```{cfgcmd} set service https api graphql cors allow-origin \<origin\>
-
-Allow cross-origin requests from \<origin\>.
-```
-
-
-## Example Configuration
-
-Setting REST API and an API-KEY is the minimal configuration to get a working API Endpoint.
-
-```none
-set service https api keys id MY-HTTPS-API-ID key MY-HTTPS-API-PLAINTEXT-KEY
-set service https api rest
-```
diff --git a/docs/configuration/service/md-index.md b/docs/configuration/service/md-index.md
deleted file mode 100644
index 4018c5be..00000000
--- a/docs/configuration/service/md-index.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Service
-
-```{toctree}
-:includehidden: true
-:maxdepth: 1
-
-broadcast-relay
-config-sync
-conntrack-sync
-console-server
-dhcp-relay
-dhcp-server
-dns
-eventhandler
-https
-ipoe-server
-lldp
-mdns
-monitoring
-ntp
-pppoe-server
-router-advert
-salt-minion
-snmp
-ssh
-tftp-server
-webproxy
-suricata
-```
diff --git a/docs/configuration/service/md-ipoe-server.md b/docs/configuration/service/md-ipoe-server.md
deleted file mode 100644
index 88ec4f51..00000000
--- a/docs/configuration/service/md-ipoe-server.md
+++ /dev/null
@@ -1,512 +0,0 @@
-(ipoe-server)=
-
-# IPoE Server
-
-VyOS utilizes [accel-ppp] to provide {abbr}`IPoE (Internet Protocol over
-Ethernet)` server functionality. It can be used with local authentication
-(mac-address) or a connected RADIUS server.
-
-IPoE is a method of delivering an IP payload over an Ethernet-based access
-network or an access network using bridged Ethernet over Asynchronous Transfer
-Mode (ATM) without using PPPoE. It directly encapsulates the IP datagrams in
-Ethernet frames, using the standard {rfc}`894` encapsulation.
-
-The use of IPoE addresses the disadvantage that PPP is unsuited for multicast
-delivery to multiple users. Typically, IPoE uses Dynamic Host Configuration
-Protocol and Extensible Authentication Protocol to provide the same
-functionality as PPPoE, but in a less robust manner.
-
-:::{note}
-Please be aware, due to an upstream bug, config changes/commits
-will restart the ppp daemon and will reset existing IPoE sessions,
-in order to become effective.
-:::
-
-## Configuring IPoE Server
-
-IPoE can be configured on different interfaces, it will depend on each specific
-situation which interface will provide IPoE to clients. The client's mac address
-and the incoming interface is being used as control parameter, to authenticate
-a client.
-
-The example configuration below will assign an IP to the client on the incoming
-interface eth1 with the client mac address 00:50:79:66:68:00. Other DHCP
-discovery requests will be ignored, unless the client mac has been enabled in
-the configuration.
-
-```none
-set interfaces ethernet eth1 address '192.168.0.1/24'
-set service ipoe-server authentication interface eth1.100 mac 00:50:79:66:68:00
-set service ipoe-server authentication interface eth1.101 mac 00:50:79:66:68:01
-set service ipoe-server authentication mode 'local'
-set service ipoe-server client-ip-pool IPOE-POOL range '192.168.0.2-192.168.0.254'
-set service ipoe-server default-pool 'IPOE-POOL'
-set service ipoe-server gateway-address '192.168.0.1/24'
-set service ipoe-server interface eth1 mode 'l2'
-set service ipoe-server interface eth1 network 'vlan'
-set service ipoe-server interface eth1 vlan '100-200'
-```
-
-```{cfgcmd} set service ipoe-server authentication interface \<interface\> mac \<MAC\>
-
-Creates local IPoE user with username=\*\*\<interface\>\*\* and
-password=\*\*\<MAC\>\*\* (mac-address)
-```
-
-
-```{cfgcmd} set service ipoe-server authentication mode \<local | radius\>
-
-Set authentication backend. The configured authentication backend is used
-for all queries.
-
-* **radius**: All authentication queries are handled by a configured RADIUS
-server.
-* **local**: All authentication queries are handled locally.
-* **noauth**: Authentication disabled
-```
-
-
-```{cfgcmd} set service ipoe-server client-ip-pool \<POOL-NAME\> range \<x.x.x.x-x.x.x.x | x.x.x.x/x\>
-
-Use this command to define the first IP address of a pool of
-addresses to be given to IPoE clients. If notation ``x.x.x.x-x.x.x.x``,
-it must be within a /24 subnet. If notation ``x.x.x.x/x`` is
-used there is possibility to set host/netmask.
-```
-
-
-```{cfgcmd} set service ipoe-server default-pool \<POOL-NAME\>
-
-Use this command to define default address pool name.
-```
-
-
-```{cfgcmd} set service ipoe-server gateway-address \<x.x.x.x/x\>
-
-Specifies address to be used as server ip address if radius can assign
-only client address. In such case if client address is matched network
-and mask then specified address and mask will be used. You can specify
-multiple such options.
-```
-
-
-```{cfgcmd} set service ipoe-server interface \<interface\> mode \<l2 | l3\>
-
-> Specifies the client connectivity mode.
-
-* **l2**: It means that clients are on same network where interface
-is.\*\*(default)\*\*
-* **l3**: It means that client are behind some router.
-```
-
-
-```{cfgcmd} set service ipoe-server interface \<interface\> network \<shared | vlan\>
-
-Specify where interface is shared by multiple users or it is vlan-per-user.
-
-* **shared**: Multiple clients share the same network. **(default)**
-* **vlan**: One VLAN per client.
-```
-
-
-```none
-vyos@vyos:~$ show ipoe-server sessions
-
- ifname | username | calling-sid | ip | rate-limit | type | comp | state | uptime
---------+----------+-------------------+-------------+------------+------+------+--------+----------
- ipoe0 | eth1.100 | 00:50:79:66:68:00 | 192.168.0.2 | | ipoe | | active | 00:04:55
- ipoe1 | eth1.101 | 00:50:79:66:68:01 | 192.168.0.3 | | ipoe | | active | 00:04:44
-```
-
-## Configuring RADIUS authentication
-
-
-To enable RADIUS based authentication, the authentication mode needs to be
-changed within the configuration. Previous settings like the local users, still
-exists within the configuration, however they are not used if the mode has been
-changed from local to radius. Once changed back to local, it will use all local
-accounts again.
-
-```none
-set service ipoe-server authentication mode radius
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius server \<server\> key \<secret\>
-
-Configure RADIUS *\<server\>* and its required shared *\<secret\>* for
-communicating with the RADIUS server.
-```
-
-Since the RADIUS server would be a single point of failure, multiple RADIUS
-servers can be setup and will be used subsequentially.
-For example:
-
-```none
-set service ipoe-server authentication radius server 10.0.0.1 key 'foo'
-set service ipoe-server authentication radius server 10.0.0.2 key 'foo'
-```
-
-:::{note}
-Some RADIUS severs use an access control list which allows or denies
-queries, make sure to add your VyOS router to the allowed client list.
-:::
-
-
-### RADIUS source address
-
-
-If you are using OSPF as IGP, always the closest interface connected to the
-RADIUS server is used. With VyOS 1.2 you can bind all outgoing RADIUS requests
-to a single source IP e.g. the loopback interface.
-
-```{cfgcmd} set service ipoe-server authentication radius source-address \<address\>
-
-Source IPv4 address used in all RADIUS server queires.
-```
-
-:::{note}
-The ``source-address`` must be configured on one of VyOS interface.
-Best practice would be a loopback or dummy interface.
-:::
-
-
-### RADIUS advanced options
-
-```{cfgcmd} set service ipoe-server authentication radius server \<server\> port \<port\>
-
-Configure RADIUS *\<server\>* and its required port for authentication requests.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius server \<server\> fail-time \<time\>
-
-Mark RADIUS server as offline for this given *\<time\>* in seconds.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius server \<server\> disable
-
-Temporary disable this RADIUS server.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius acct-timeout \<timeout\>
-
-Timeout to wait reply for Interim-Update packets. (default 3 seconds)
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius dynamic-author server \<address\>
-
-Specifies IP address for Dynamic Authorization Extension server (DM/CoA).
-This IP must exist on any VyOS interface or it can be ``0.0.0.0``.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius dynamic-author port \<port\>
-
-UDP port for Dynamic Authorization Extension server (DM/CoA)
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius dynamic-author key \<secret\>
-
-Secret for Dynamic Authorization Extension server (DM/CoA)
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius max-try \<number\>
-
-Maximum number of tries to send Access-Request/Accounting-Request queries
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius timeout \<timeout\>
-
-Timeout to wait response from server (seconds)
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius nas-identifier \<identifier\>
-
-Value to send to RADIUS server in NAS-Identifier attribute and to be matched
-in DM/CoA requests.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius nas-ip-address \<address\>
-
-Value to send to RADIUS server in NAS-IP-Address attribute and to be matched
-in DM/CoA requests. Also DM/CoA server will bind to that address.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius source-address \<address\>
-
-Source IPv4 address used in all RADIUS server queires.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius rate-limit attribute \<attribute\>
-
-Specifies which RADIUS server attribute contains the rate limit information.
-The default attribute is *Filter-Id*.
-```
-
-:::{note}
-If you set a custom RADIUS attribute you must define it on both
-dictionaries at RADIUS server and client.
-:::
-
-```{cfgcmd} set service ipoe-server authentication radius rate-limit enable
-
-Enables bandwidth shaping via RADIUS.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication radius rate-limit vendor
-
-Specifies the vendor dictionary, dictionary needs to be in
-/usr/share/accel-ppp/radius.
-```
-
-Received RADIUS attributes have a higher priority than parameters defined within
-the CLI configuration, refer to the explanation below.
-
-
-### Allocation clients ip addresses by RADIUS
-
-
-If the RADIUS server sends the attribute ``Framed-IP-Address`` then this IP
-address will be allocated to the client and the option ``default-pool`` within the CLI
-config is being ignored.
-
-
-If the RADIUS server sends the attribute ``Framed-Pool``, IP address will be allocated
-from a predefined IP pool whose name equals the attribute value.
-
-
-If the RADIUS server sends the attribute ``Stateful-IPv6-Address-Pool``, IPv6 address
-will be allocated from a predefined IPv6 pool ``prefix`` whose name equals the attribute value.
-
-
-If the RADIUS server sends the attribute ``Delegated-IPv6-Prefix-Pool``, IPv6
-delegation pefix will be allocated from a predefined IPv6 pool ``delegate``
-whose name equals the attribute value.
-
-
-:::{note}
-``Stateful-IPv6-Address-Pool`` and ``Delegated-IPv6-Prefix-Pool`` are defined in
-RFC6911. If they are not defined in your RADIUS server, add new [dictionary].
-:::
-
-
-User interface can be put to VRF context via RADIUS Access-Accept packet, or change
-it via RADIUS CoA. ``Accel-VRF-Name`` is used from these purposes. It is custom [ACCEL-PPP attribute].
-Define it in your RADIUS server.
-
-
-## IPv6
-
-```{cfgcmd} set service ipoe-server client-ipv6-pool \<IPv6-POOL-NAME\> prefix \<address\> mask \<number-of-bits\>
-
-Use this comand to set the IPv6 address pool from which an IPoE client
-will get an IPv6 prefix of your defined length (mask) to terminate the
-IPoE endpoint at their side. The mask length can be set from 48 to 128
-bit long, the default value is 64.
-```
-
-
-```{cfgcmd} set service ipoe-server client-ipv6-pool \<IPv6-POOL-NAME\> delegate \<address\> delegation-prefix \<number-of-bits\>
-
-Use this command to configure DHCPv6 Prefix Delegation (RFC3633) on
-IPoE. You will have to set your IPv6 pool and the length of the
-delegation prefix. From the defined IPv6 pool you will be handing out
-networks of the defined length (delegation-prefix). The length of the
-delegation prefix can be set from 32 to 64 bit long.
-```
-
-
-```{cfgcmd} set service ipoe-server default-ipv6-pool \<IPv6-POOL-NAME\>
-
-Use this command to define default IPv6 address pool name.
-```
-
-
-```none
-set service ipoe-server client-ipv6-pool IPv6-POOL delegate '2001:db8:8003::/48' delegation-prefix '56'
-set service ipoe-server client-ipv6-pool IPv6-POOL prefix '2001:db8:8002::/48' mask '64'
-set service ipoe-server default-ipv6-pool IPv6-POOL
-```
-
-## Scripting
-
-```{cfgcmd} set service ipoe-server extended-scripts on-change \<path_to_script\>
-
-Script to run when session interface changed by RADIUS CoA handling
-```
-
-
-```{cfgcmd} set service ipoe-server extended-scripts on-down \<path_to_script\>
-
-Script to run when session interface going to terminate
-```
-
-
-```{cfgcmd} set service ipoe-server extended-scripts on-pre-up \<path_to_script\>
-
-Script to run before session interface comes up
-```
-
-
-```{cfgcmd} set service ipoe-server extended-scripts on-up \<path_to_script\>
-
-Script to run when session interface is completely configured and started
-```
-
-## Advanced Options
-
-
-### Authentication Advanced Options
-
-```{cfgcmd} set service ipoe-server authentication interface \<interface\> mac \<MAC\> vlan \<vlan-id\>
-
-VLAN monitor for automatic creation of VLAN interfaces for specific user on specific \<interface\>
-```
-
-
-```{cfgcmd} set service ipoe-server authentication interface \<interface\> mac \<MAC\> rate-limit download \<bandwidth\>
-
-Download bandwidth limit in kbit/s for user on interface *\<interface\>*.
-```
-
-
-```{cfgcmd} set service ipoe-server authentication interface \<interface\> mac \<MAC\> rate-limit upload \<bandwidth\>
-
-Upload bandwidth limit in kbit/s for for user on interface *\<interface\>*.
-```
-
-### Client IP Pool Advanced Options
-
-```{cfgcmd} set service ipoe-server client-ip-pool \<POOL-NAME\> next-pool \<NEXT-POOL-NAME\>
-
-Use this command to define the next address pool name.
-```
-
-### Advanced Interface Options
-
-```{cfgcmd} set service ipoe-server interface \<interface\> client-subnet \<x.x.x.x/x\>
-
-Specify local range of ip address to give to dhcp clients. First IP in range is router IP.
-If you need more customization use *client-ip-pool*
-```
-
-
-```{cfgcmd} set service ipoe-server interface \<interface\> external-dhcp dhcp-relay \<x.x.x.x\>
-
-Specify DHCPv4 relay IP address to pass requests to. If specified giaddr is also needed.
-```
-
-
-```{cfgcmd} set service ipoe-server interface \<interface\> external-dhcp giaddr \<x.x.x.x\>
-
-Specifies relay agent IP addre
-```
-
-### Global Advanced options
-
-```{cfgcmd} set service ipoe-server description \<description\>
-
-Set description.
-```
-```{cfgcmd} set service ipoe-server limits burst \<value\>
-
-Burst count
-```
-```{cfgcmd} set service ipoe-server limits connection-limit \<value\>
-
-Acceptable rate of connections (e.g. 1/min, 60/sec)
-```
-```{cfgcmd} set service ipoe-server limits timeout \<value\>
-
-Timeout in seconds
-```
-```{cfgcmd} set service ipoe-server max-concurrent-sessions
-
-Maximum number of concurrent session start attempts
-```
-```{cfgcmd} set service ipoe-server name-server \<address\>
-
-Connected client should use *\<address\>* as their DNS server. This
-command accepts both IPv4 and IPv6 addresses. Up to two nameservers
-can be configured for IPv4, up to three for IPv6.
-```
-```{cfgcmd} set service ipoe-server shaper fwmark \<1-2147483647\>
-
-Match firewall mark value
-```
-```{cfgcmd} set service ipoe-server snmp master-agent
-
-Enable SNMP
-```
-
-## Monitoring
-
-```{opcmd} show ipoe-server sessions
-
-Use this command to locally check the active sessions in the IPoE
-server.
-```
-```none
-vyos@vyos:~$ show ipoe-server sessions
-ifname | username | calling-sid | ip | rate-limit | type | comp | state | uptime
-----------+----------+-------------------+-------------+------------+------+------+--------+----------
- eth1.100 | eth1.100 | 0c:98:bd:b8:00:01 | 192.168.0.3 | | ipoe | | active | 03:03:58
-```
-
-```none
-vyos@vyos:~$ show ipoe-server statistics
-uptime: 0.03:31:36
-cpu: 0%
-mem(rss/virt): 6044/101360 kB
-core:
- mempool_allocated: 148628
- mempool_available: 144748
- thread_count: 1
- thread_active: 1
- context_count: 10
- context_sleeping: 0
- context_pending: 0
- md_handler_count: 6
- md_handler_pending: 0
- timer_count: 1
- timer_pending: 0
-sessions:
- starting: 0
- active: 1
- finishing: 0
-ipoe:
- starting: 0
- active: 1
- delayed: 0
-```
-
-## Toubleshooting
-
-```none
-vyos@vyos:~$ show log ipoe-server
-
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:: recv [DHCPv4 Discover xid=55df9228 chaddr=0c:98:bd:b8:00:01 <Message-Type Discover> <Request-IP 192.168.0.3> <Host-Name vyos> <Request-List Subnet,Broadcast,Router,DNS,Classless-Route,Domain-Name,MTU>]
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: eth1.100: authentication succeeded
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: send [DHCPv4 Offer xid=55df9228 yiaddr=192.168.0.4 chaddr=0c:98:bd:b8:00:01 <Message-Type Offer> <Server-ID 192.168.0.1> <Lease-Time 600> <T1 300> <T2 525> <Router 192.168.0.1> <Subnet 255.255.255.0>]
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: recv [DHCPv4 Request xid=55df9228 chaddr=0c:98:bd:b8:00:01 <Message-Type Request> <Server-ID 192.168.0.1> <Request-IP 192.168.0.4> <Host-Name vyos> <Request-List Subnet,Broadcast,Router,DNS,Classless-Route,Domain-Name,MTU>]
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: ipoe: activate session
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: ipoe: no free IPv6 address
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: ipoe: session started
-Feb 27 14:29:27 vyos accel-ipoe[2262]: eth1.100:eth1.100: send [DHCPv4 Ack xid=55df9228 yiaddr=192.168.0.4 chaddr=0c:98:bd:b8:00:01 <Message-Type Ack> <Server-ID 192.168.0.1> <Lease-Time 600> <T1 300> <T2 525> <Router 192.168.0.1> <Subnet 255.255.255.0>]
-```
-
-[accel-ppp]: https://accel-ppp.org/
-[accel-ppp attribute]: https://github.com/accel-ppp/accel-ppp/blob/master/accel-pppd/radius/dict/dictionary.accel
-[dictionary]: https://github.com/accel-ppp/accel-ppp/blob/master/accel-pppd/radius/dict/dictionary.rfc6911
diff --git a/docs/configuration/service/md-lldp.md b/docs/configuration/service/md-lldp.md
deleted file mode 100644
index 7fdba6c8..00000000
--- a/docs/configuration/service/md-lldp.md
+++ /dev/null
@@ -1,154 +0,0 @@
-(lldp)=
-
-# LLDP
-
-{abbr}`LLDP (Link Layer Discovery Protocol)` is a vendor-neutral link layer
-protocol in the Internet Protocol Suite used by network devices for advertising
-their identity, capabilities, and neighbors on an IEEE 802 local area network,
-principally wired Ethernet. The protocol is formally referred to by the IEEE
-as Station and Media Access Control Connectivity Discovery specified in IEEE
-802.1AB and IEEE 802.3-2012 section 6 clause 79.
-
-LLDP performs functions similar to several proprietary protocols, such as
-{abbr}`CDP (Cisco Discovery Protocol)`,
-{abbr}`FDP (Foundry Discovery Protocol)`,
-{abbr}`NDP (Nortel Discovery Protocol)` and {abbr}`LLTD (Link Layer Topology
-Discovery)`.
-
-Information gathered with LLDP is stored in the device as a {abbr}`MIB
-(Management Information Database)` and can be queried with {abbr}`SNMP (Simple
-Network Management Protocol)` as specified in {rfc}`2922`. The topology of an
-LLDP-enabled network can be discovered by crawling the hosts and querying this
-database. Information that may be retrieved include:
-
-- System Name and Description
-- Port name and description
-- VLAN name
-- IP management address
-- System capabilities (switching, routing, etc.)
-- MAC/PHY information
-- MDI power
-- Link aggregation
-
-## Configuration
-
-```{cfgcmd} set service lldp
-
-Enable LLDP service
-```
-
-```{cfgcmd} set service lldp management-address \<address\>
-
-Define IPv4/IPv6 management address transmitted via LLDP. Multiple addresses
-can be defined. Only addresses connected to the system will be transmitted.
-```
-
-```{cfgcmd} set service lldp interface \<interface\>
-
-Enable transmission of LLDP information on given \<interface\>. You can also
-say ``all`` here so LLDP is turned on on every interface.
-```
-
-```{cfgcmd} set service lldp interface \<interface\> mode [disable|rx-tx|rx|tx]
-
-Configure the administrative status of the given port.
-
-By default, all ports are configured to be in rx-tx mode. This means they
-can receive and transmit LLDP frames.
-
-In rx mode, they won't emit any frames. In tx mode, they won't receive
-any frames. In disabled mode, no frame will be sent and any incoming frame
-will be discarded.
-```
-
-```{cfgcmd} set service lldp snmp
-
-Enable SNMP queries of the LLDP database
-```
-
-```{cfgcmd} set service lldp legacy-protocols \<cdp|edp|fdp|sonmp\>
-
-Enable given legacy protocol on this LLDP instance. Legacy protocols include:
-* ``cdp`` - Listen for CDP for Cisco routers/switches
-* ``edp`` - Listen for EDP for Extreme routers/switches
-* ``fdp`` - Listen for FDP for Foundry routers/switches
-* ``sonmp`` - Listen for SONMP for Nortel routers/switches
-```
-
-
-## Operation
-
-```{opcmd} show lldp neighbors
-
-Displays information about all neighbors discovered via LLDP.
-
-:::{code-block} none
-vyos@vyos:~$ show lldp neighbors
-Capability Codes: R - Router, B - Bridge, W - Wlan r - Repeater, S - Station
- D - Docsis, T - Telephone, O - Other
-
-Device ID Local Proto Cap Platform Port ID
---------- ----- ----- --- -------- -------
-BR2.vyos.net eth0 LLDP R VyOS 1.2.4 eth1
-BR3.vyos.net eth0 LLDP RB VyOS 1.2.4 eth2
-SW1.vyos.net eth0 LLDP B Cisco IOS Software GigabitEthernet0/6
-:::
-```
-
-```{opcmd} show lldp neighbors detail
-
-Get detailed information about LLDP neighbors.
-
-:::{code-block} none
-vyos@vyos:~$ show lldp neighbors detail
--------------------------------------------------------------------------------
-LLDP neighbors:
--------------------------------------------------------------------------------
-Interface: eth0, via: LLDP, RID: 28, Time: 0 day, 00:24:33
-Chassis:
- ChassisID: mac 00:53:00:01:02:c9
- SysName: BR2.vyos.net
- SysDescr: VyOS 1.3-rolling-201912230217
- MgmtIP: 192.0.2.1
- MgmtIP: 2001:db8::ffff
- Capability: Bridge, on
- Capability: Router, on
- Capability: Wlan, off
- Capability: Station, off
-Port:
- PortID: mac 00:53:00:01:02:c9
- PortDescr: eth0
- TTL: 120
- PMD autoneg: supported: no, enabled: no
- MAU oper type: 10GigBaseCX4 - X copper over 8 pair 100-Ohm balanced cable
-VLAN: 201 eth0.201
-VLAN: 205 eth0.205
-LLDP-MED:
- Device Type: Network Connectivity Device
- Capability: Capabilities, yes
- Capability: Policy, yes
- Capability: Location, yes
- Capability: MDI/PSE, yes
- Capability: MDI/PD, yes
- Capability: Inventory, yes
- Inventory:
- Hardware Revision: None
- Software Revision: 4.19.89-amd64-vyos
- Firmware Revision: 6.00
- Serial Number: VMware-42 1d 83 b9 fe c1 bd b2-7
- Manufacturer: VMware, Inc.
- Model: VMware Virtual Platform
- Asset ID: No Asset Tag
--------------------------------------------------------------------------------
-:::
-```
-
-```{opcmd} show lldp neighbors interface \<interface\>
-
-Show LLDP neighbors connected via interface \<interface\>.
-```
-
-```{opcmd} show log lldp
-
-Used for troubleshooting.
-``` \ No newline at end of file
diff --git a/docs/configuration/service/md-mdns.md b/docs/configuration/service/md-mdns.md
deleted file mode 100644
index 088bca3c..00000000
--- a/docs/configuration/service/md-mdns.md
+++ /dev/null
@@ -1,131 +0,0 @@
-# mDNS Repeater
-
-Starting with VyOS 1.2 a {abbr}`mDNS (Multicast DNS)` repeater functionality is
-provided. Additional information can be obtained from
-<https://en.wikipedia.org/wiki/Multicast_DNS>.
-
-Multicast DNS uses the reserved address `224.0.0.251`, which is
-"administratively scoped" and does not leave the subnet. mDNS repeater
-retransmits mDNS packets from one interface to other interfaces. This enables
-support for devices using mDNS discovery (like network printers, Apple Airplay,
-Chromecast, various IP based home-automation devices etc) across multiple VLANs.
-
-Since the mDNS protocol sends the {abbr}`AA(Authoritative Answer)` records in
-the packet itself, the repeater does not need to forge the source address.
-Instead, the source address is of the interface that repeats the packet.
-
-:::{note}
-You can not run this in a VRRP setup, if multiple mDNS repeaters
-are launched in a subnet you will experience the mDNS packet storm death!
-:::
-
-## Configuration
-
-```{cfgcmd} set service mdns repeater interface \<interface\>
-
-To enable mDNS repeater you need to configure at least two interfaces so that
-all incoming mDNS packets from one interface configured here can be
-re-broadcasted to any other interface(s) configured under this section.
-```
-
-```{cfgcmd} set service mdns repeater disable
-
-mDNS repeater can be temporarily disabled without deleting the service using
-```
-
-```{cfgcmd} set service mdns repeater ip-version \<ipv4 | ipv6 | both\>
-
-mDNS repeater can be enabled either on IPv4 socket or on IPv6 socket or both
-to re-broadcast. By default, mDNS repeater will listen on both IPv4 and IPv6.
-```
-
-```{cfgcmd} set service mdns repeater allow-service \<service\>
-
-mDNS repeater can be configured to re-broadcast only specific services. By
-default, all services are re-broadcasted.
-```
-
-```{cfgcmd} set service mdns repeater browse-domain \<domain\>
-
-Allow listing additional custom domains to be browsed (in addition to the
-default ``local``) so that they can be reflected.
-```
-
-```{cfgcmd} set service mdns repeater cache-entries \<entries\>
-
-Specify how many resource records are cached per interface. Bigger values
-allow mDNS work correctly in large LANs but also increase memory consumption.
-
-Defaults to: 4096
-```
-
-
-## Firewall recommendations
-
-Unlike typical routed traffic, mDNS packets relayed between interfaces do not
-traverse the FORWARD hook chain in the firewall. Instead, they are processed
-through the following hooks:
-> - **INPUT**: For packets received by the local system
-> - **OUTPUT**: For packets sent from the local system
-
-To control or allow mDNS packet forwarding via the relay, you must define
-appropriate rules in the INPUT and OUTPUT directions. Rules in the FORWARD
-direction will have no effect on mDNS relay traffic.
-
-```none
-set firewall ipv4 input filter rule 10 action 'accept'
-set firewall ipv4 input filter rule 10 destination address '224.0.0.251'
-set firewall ipv4 input filter rule 10 destination port '5353'
-set firewall ipv4 input filter rule 10 protocol 'udp'
-set firewall ipv4 output filter rule 10 action 'accept'
-set firewall ipv4 output filter rule 10 destination address '224.0.0.251'
-set firewall ipv4 output filter rule 10 destination port '5353'
-set firewall ipv4 output filter rule 10 protocol 'udp'
-```
-
-
-## Example
-
-To listen on both `eth0` and `eth1` mDNS packets and also repeat packets
-received on `eth0` to `eth1` (and vice-versa) use the following commands:
-
-```none
-set service mdns repeater interface 'eth0'
-set service mdns repeater interface 'eth1'
-```
-
-To allow only specific services, for example `_airplay._tcp` or `_ipp._tcp`,
-(instead of all services) to be re-broadcasted, use the following command:
-
-```none
-set service mdns repeater allow-service '_airplay._tcp'
-set service mdns repeater allow-service '_ipp._tcp'
-```
-
-To allow listing additional custom domain, for example
-`openthread.thread.home.arpa`, so that it can reflected in addition to the
-default `local`, use the following command:
-
-```none
-set service mdns repeater browse-domain 'openthread.thread.home.arpa'
-```
-
-
-## Operation
-
-```{opcmd} restart mdns repeater
-
-Restart mDNS repeater service.
-```
-
-```{opcmd} show log mdns repeater
-
-Show logs for mDNS repeater service.
-```
-
-```{opcmd} monitor log mdns repeater
-
-Follow the logs for mDNS repeater service.
-```
-
-[multicast dns]: <https://en.wikipedia.org/wiki/Multicast_DNS>
diff --git a/docs/configuration/service/md-monitoring.md b/docs/configuration/service/md-monitoring.md
deleted file mode 100644
index a6bf2605..00000000
--- a/docs/configuration/service/md-monitoring.md
+++ /dev/null
@@ -1,334 +0,0 @@
-# Monitoring
-
-VyOS supports monitoring through Telegraf as well as through Prometheus exporters.
-
-## Telegraf
-
-Telegraf is the open source server agent to help you collect metrics, events
-and logs from your routers.
-
-The following Telegraf plugins are configurable to export metrics and logs:
-: - Azure Data Explorer
- - Prometheus Client
- - Splunk
- - InfluxDB
- - Loki
-
-### Azure data explorer
-
-Telegraf output plugin [azure-data-explorer].
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer authentication client-id \<client-id\>
-
- Authentication application client-id.
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer authentication client-secret \<client-secret\>
-
-Authentication application client-secret.
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer authentication tenant-id \<tenant-id\>
-
-Authentication application tenant-id
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer database \<name\>
-
-Remote database name.
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer group-metrics \<single-table | table-per-metric\>
-
-Type of metrics grouping when push to Azure Data Explorer. The default is
-``table-per-metric``.
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer table \<name\>
-
-Name of the single table Only if set group-metrics single-table.
-```
-
-
-```{cfgcmd} set service monitoring telegraf azure-data-explorer url \<url\>
-
-Remote URL.
-```
-
-### Prometheus client
-
-Telegraf output plugin [prometheus-client]
-This plugin allows export of Telegraf metrics to Prometheus,
-for Prometheus native metrics through exporters see section below.
-
-```{cfgcmd} set service monitoring telegraf prometheus-client
-
- Output plugin Prometheus client
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client allow-from \<prefix\>
-
-Networks allowed to query this server
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client authentication username \<username\>
-
-HTTP basic authentication username
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client authentication password \<password\>
-
-HTTP basic authentication username
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client listen-address \<address\>
-
-Local IP addresses to listen on
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client metric-version \<1 | 2\>
-
-Metris version, the default is ``2``
-```
-
-
-```{cfgcmd} set service monitoring telegraf prometheus-client port \<port\>
-
-Port number used by connection, default is ``9273``
-```
-
-Example:
-
-```none
-set service monitoring telegraf prometheus-client
-```
-
-
-```none
-vyos@r14:~$ curl --silent localhost:9273/metrics | egrep -v "#" | grep cpu_usage_system
-cpu_usage_system{cpu="cpu-total",host="r14"} 0.20040080160320556
-cpu_usage_system{cpu="cpu0",host="r14"} 0.17182130584191915
-cpu_usage_system{cpu="cpu1",host="r14"} 0.22896393817971655
-```
-
-### Splunk
-
-
-Telegraf output plugin [splunk] HTTP Event Collector.
-
-```{cfgcmd} set service monitoring telegraf splunk authentication insecure
-
-Use TLS but skip host validation
-```
-
-
-```{cfgcmd} set service monitoring telegraf splunk authentication token \<token\>
-
-Authorization token
-```
-
-
-```{cfgcmd} set service monitoring telegraf splunk authentication url \<url\>
-
-Remote URL to Splunk collector
-```
-
-Example:
-
-```none
-set service monitoring telegraf splunk authentication insecure
-set service monitoring telegraf splunk authentication token 'xxxxf5b8-xxxx-452a-xxxx-43828911xxxx'
-set service monitoring telegraf splunk url 'https://192.0.2.10:8088/services/collector'
-```
-
-### InfluxDB
-
-
-Telegraf output plugin [influxdb] to write metrics to `InfluxDB` via HTTP.
-
-```{cfgcmd} set service monitoring telegraf influxdb authentication organization \<organization\>
-
-Authentication organization name
-```
-
-
-```{cfgcmd} set service monitoring telegraf influxdb authentication token \<token\>
-
-Authentication token
-```
-
-
-```{cfgcmd} set service monitoring telegraf bucket \<bucket\>
-
-Remote ``InfluxDB`` bucket name
-```
-
-
-```{cfgcmd} set service monitoring telegraf influxdb port \<port\>
-
-Remote port
-```
-
-
-```{cfgcmd} set service monitoring telegraf influxdb url \<url\>
-
-Remote URL
-```
-
-Example:
-
-```none
-set service monitoring telegraf influxdb authentication organization 'vyos'
-set service monitoring telegraf influxdb authentication token 'ZAml9Uy5wrhA...=='
-set service monitoring telegraf influxdb bucket 'bucket_vyos'
-set service monitoring telegraf influxdb port '8086'
-set service monitoring telegraf influxdb url 'http://r1.influxdb2.local'
-```
-
-### Loki
-
-Telegraf can be used to send logs to [loki] using tags as labels.
-
-```{cfgcmd} set service monitoring telegraf loki port \<port\>
-
- Remote Loki port
-
- Default is 3100
-```
-
-
-```{cfgcmd} set service monitoring telegraf loki url \<url\>
-
-Remote Loki url
-```
-
-
-```{cfgcmd} set service monitoring telegraf loki authentication username \<username\>
-```
-
-```{cfgcmd} set service monitoring telegraf loki authentication password \<password\>
-
-HTTP basic authentication.
-
-If either is set both must be set.
-```
-
-```{cfgcmd} set service monitoring telegraf loki metric-name-label \<label\>
-
-Label to use for the metric name when sending metrics.
-
-If set to an empty string, the label will not be added.
-This is NOT recommended, as it makes it impossible to differentiate
-between multiple metrics.
-```
-
-## Prometheus
-
-
-The following Prometheus exporters are configurable to export metrics:
-: - Node Exporter
- - FRR Exporter
-
-
-### Node Exporter
-
-
-Prometheus [node_exporter] which provides a wide range of hardware and OS metrics.
-
-```{cfgcmd} set service monitoring prometheus node-exporter listen-address \<address\>
-
-Configure the address node_exporter is listening on.
-```
-
-```{cfgcmd} set service monitoring prometheus node-exporter port \<port\>
-
-Configure the port number node_exporter is listening on.
-```
-
-```{cfgcmd} set service monitoring prometheus node-exporter vrf \<name\>
-
-Configure name of the {abbr}`VRF (Virtual Routing and Forwarding)` instance.
-```
-
-```{cfgcmd} set service monitoring prometheus node-exporter collectors textfile
-
-Configure textfile collector to export custom metrics read from
-`/run/node_exporter/collector`
-```
-
-### FRR Exporter
-
-Prometheus [frr_exporter] which provides free range routing metrics.
-
-```{cfgcmd} set service monitoring prometheus frr-exporter listen-address \<address\>
-
-Configure the address frr_exporter is listening on.
-
-```
-
-```{cfgcmd} set service monitoring prometheus frr-exporter port \<port\>
-
-Configure the port number frr_exporter is listening on.
-```
-
-```{cfgcmd} set service monitoring prometheus frr-exporter vrf \<name\>
-
-Configure name of the {abbr}`VRF (Virtual Routing and Forwarding)` instance.
-```
-
-### Blackbox Exporter
-
-Prometheus [blackbox_exporter] which allows probing of endpoints over
-HTTP, HTTPS, DNS, TCP, ICMP and gRPC .
-
-```{cfgcmd} set service monitoring prometheus blackbox-exporter listen-address \<address\>
-
-Configure the address blackbox_exporter is listening on.
-```
-```{cfgcmd} set service monitoring prometheus blackbox-exporter port \<port\>
-
-Configure the port number blackbox_exporter is listening on.
-```
-```{cfgcmd} set service monitoring prometheus blackbox-exporter vrf \<name\>
-
-Configure name of the {abbr}`VRF (Virtual Routing and Forwarding)` instance.
-```
-
-#### Configuring modules
-
-Blackbox exporter can be configured with different modules for probing DNS or ICMP.
-
-DNS module example:
-
-```none
-set service monitoring prometheus blackbox-exporter modules dns name dns4 preferred-ip-protocol ipv4
-set service monitoring prometheus blackbox-exporter modules dns name dns4 query-name vyos.io
-set service monitoring prometheus blackbox-exporter modules dns name dns4 query-type A
-```
-
-ICMP module example:
-
-```none
-set service monitoring prometheus blackbox-exporter modules icmp name ping6 preferred-ip-protocol ipv6
-set service monitoring prometheus blackbox-exporter modules icmp name ping6 ip-protocol-fallback
-set service monitoring prometheus blackbox-exporter modules icmp name ping6 timeout 3
-```
-
-[azure-data-explorer]: <https://github.com/influxdata/telegraf/tree/master/plugins/outputs/azure_data_explorer>
-[blackbox_exporter]: <https://github.com/prometheus/blackbox_exporter>
-[frr_exporter]: <https://github.com/tynany/frr_exporter>
-[influxdb]: <https://github.com/influxdata/telegraf/tree/master/plugins/outputs/influxdb_v2>
-[loki]: https://github.com/influxdata/telegraf/tree/master/plugins/outputs/loki
-[node_exporter]: <https://github.com/prometheus/node_exporter>
-[prometheus-client]: <https://github.com/influxdata/telegraf/tree/master/plugins/outputs/prometheus_client>
-[splunk]: <https://www.splunk.com/en_us/blog/it/splunk-metrics-via-telegraf.html>
diff --git a/docs/configuration/service/md-ntp.md b/docs/configuration/service/md-ntp.md
deleted file mode 100644
index c8c1dee3..00000000
--- a/docs/configuration/service/md-ntp.md
+++ /dev/null
@@ -1,202 +0,0 @@
-(ntp)=
-
-# NTP
-
-{abbr}`NTP (Network Time Protocol`) is a networking protocol for clock
-synchronization between computer systems over packet-switched, variable-latency
-data networks. In operation since before 1985, NTP is one of the oldest Internet
-protocols in current use.
-
-NTP is intended to synchronize all participating computers to within a few
-milliseconds of {abbr}`UTC (Coordinated Universal Time)`. It uses the
-intersection algorithm, a modified version of Marzullo's algorithm, to select
-accurate time servers and is designed to mitigate the effects of variable
-network latency. NTP can usually maintain time to within tens of milliseconds
-over the public Internet, and can achieve better than one millisecond accuracy
-in local area networks under ideal conditions. Asymmetric routes and network
-congestion can cause errors of 100 ms or more.
-
-The protocol is usually described in terms of a client-server model, but can as
-easily be used in peer-to-peer relationships where both peers consider the other
-to be a potential time source. Implementations send and receive timestamps using
-{abbr}`UDP (User Datagram Protocol)` on port number 123.
-
-NTP supplies a warning of any impending leap second adjustment, but no
-information about local time zones or daylight saving time is transmitted.
-
-The current protocol is version 4 (NTPv4), which is a proposed standard as
-documented in {rfc}`5905`. It is backward compatible with version 3, specified
-in {rfc}`1305`.
-
-:::{note}
-VyOS 1.4 uses chrony instead of ntpd (see {vytask}`T3008`) which will
-no longer accept anonymous NTP requests as in VyOS 1.3. All configurations
-will be migrated to keep the anonymous functionality. For new setups if you
-have clients using your VyOS installation as NTP server, you must specify
-the `allow-client` directive.
-:::
-
-## Configuration
-
-```{cfgcmd} set service ntp server \<address\>
-
- Configure one or more servers for synchronisation. Server name can be either
- an IP address or {abbr}`FQDN (Fully Qualified Domain Name)`.
-
- There are 3 default NTP server set. You are able to change them.
-
- * ``time1.vyos.net``
- * ``time2.vyos.net``
- * ``time3.vyos.net``
-```
-
-
-```{cfgcmd} set service ntp server \<address\> \<noselect | nts | pool | prefer | ptp | interleave\>
-
-Configure one or more attributes to the given NTP server.
-
-* ``noselect`` marks the server as unused, except for display purposes. The
-server is discarded by the selection algorithm.
-
-* ``nts`` enables Network Time Security (NTS) for the server as specified
-in {rfc}`8915`
-
-* ``pool`` mobilizes persistent client mode association with a number of
-remote servers.
-
-* ``prefer`` marks the server as preferred. All other things being equal,
-this host will be chosen for synchronization among a set of correctly
-operating hosts.
-
-* ``ptp`` enables the PTP transport for this server (see {ref}`ptp-transport`).
-
-* ``interleave`` enables NTP interleaved mode (see [draft-ntp-interleaved-modes]), which can improve
-synchronization accuracy and stability when supported by both parties.
-```
-
-
-```{cfgcmd} set service ntp listen-address \<address\>
-
-NTP process will only listen on the specified IP address. You must specify
-the `<address>` and optionally the permitted clients. Multiple listen
-addresses for same IP family is no longer supported. Only one IPv4 and one
-IPv6 address can be configured, using separate commands for each.
-```
-
-
-```{cfgcmd} set service ntp allow-client address \<address\>
-
-List of networks or client addresses permitted to contact this NTP server.
-
-Multiple networks/client IP addresses can be configured.
-```
-
-
-```{cfgcmd} set service ntp vrf \<name\>
-
-Specify name of the {abbr}`VRF (Virtual Routing and Forwarding)` instance.
-```
-
-
-```{cfgcmd} set service ntp leap-second [ignore|smear|system|timezone]
-
-Define how to handle leap-seconds.
-
-* `ignore`: No correction is applied to the clock for the leap second. The
-clock will be corrected later in normal operation when new measurements are
-made and the estimated offset includes the one second error.
-
-* `smear`: When smearing a leap second, the leap status is suppressed on the
-server and the served time is corrected slowly by slewing instead of
-stepping. The clients do not need any special configuration as they do not
-know there is any leap second and they follow the server time which
-eventually brings them back to UTC. Care must be taken to ensure they use
-only NTP servers which smear the leap second in exactly the same way for
-synchronisation.
-
-* `system`: When inserting a leap second, the kernel steps the system clock
-backwards by one second when the clock gets to 00:00:00 UTC. When deleting
-a leap second, it steps forward by one second when the clock gets to
-23:59:59 UTC.
-
-* `timezone`: This directive specifies a timezone in the system timezone
-database which chronyd can use to determine when will the next leap second
-occur and what is the current offset between TAI and UTC. It will
-periodically check if 23:59:59 and 23:59:60 are valid times in the
-timezone. This normally works with the right/UTC timezone which is the
-default
-```
-
-## Hardware Timestamping of NTP Packets
-
-
-The chrony daemon on VyOS can leverage NIC hardware capabilities to record the
-exact time packets are received on the interface, as well as when packets were
-actually transmitted. This provides improved accuracy and stability when the
-system is under load, as queuing and OS context switching can introduce a
-variable delay between when the packet is received on the network and when it
-is actually processed by the NTP daemon.
-
-
-Hardware timestamping depends on NIC support. Some NICs can be configured to
-apply timestamps to any incoming packet, while others only support applying
-timestamps to specific protocols (e.g. PTP).
-
-
-When timestamping is enabled on an interface, chrony's default behavior is to
-try to configure the interface to only timestamp NTP packets. If this mode is
-not supported, chrony will attempt to set it to timestamp all packets. If
-neither option is supported (e.g. the NIC can only timestamp received PTP
-packets), chrony will leverage timestamping on transmitted packets only, which
-still provides some benefit.
-
-```{cfgcmd} set service ntp timestamp interface \<interface\>
-
-Configures hardware timestamping on the interface \<interface\>. The special
-value `all` can also be specified to enable timestamping on all interfaces
-that support it.
-
-Configure the timestamping behavior with the following option:
-
-* ``receive-filter [all|ntp|ptp|none]`` selects the receive filter mode,
-which controls which inbound packets the NIC applies timestamps to. The
-selected mode must be supported by the NIC, or timestamping will be
-disabled for the interface.
-```
-
-The following `receive-filter` modes can be selected:
-- *all*: All received packets will be timestamped.
-- *ntp*: Only received NTP protocol packets will be timestamped.
-- *ptp*: Only received PTP protocol packets will be timestamped. Combined with
- the PTP transport for NTP packets, this can be leveraged to take advantage of
- hardware timestamping on NICs that only support the ptp filter mode.
-- *none*: No received packets will be timestamped. Hardware timestamping of
- transmitted packets will still be leveraged, if supported by the NIC.
-(ptp-transport)=
-
-## PTP Transport of NTP Packets
-
-The Precision Time Protocol (IEEE 1588) is a local network time synchronization
-protocol that provides high precision time synchronization by leveraging
-hardware clocks in NICs and other network elements. VyOS does not currently
-support standards-based PTP, which can be deployed independently of
-NTP.
-
-For networks consisting of VyOS and other Linux systems running relatively
-recent versions of the chrony daemon, NTP packets can be "tunneled" over
-PTP. NTP over PTP provides the best of both worlds, leveraging hardware support
-for timestamping PTP packets while retaining the configuration flexibility and
-fault tolerance of NTP.
-
-```{cfgcmd} set service ntp ptp
-
-Enables the NTP daemon PTP transport. The NTP daemon will listen on the
-configured PTP port. Note that one or more servers must be individually
-enabled for PTP before the daemon will synchronize over the transport.
-```
-```{cfgcmd} set service ntp ptp port \<port\>
-
-Configures the PTP port. By default, the standard port 319 is used.
-```
-
-[draft-ntp-interleaved-modes]: https://datatracker.ietf.org/doc/draft-ietf-ntp-interleaved-modes/07/
diff --git a/docs/configuration/service/md-pppoe-server.md b/docs/configuration/service/md-pppoe-server.md
deleted file mode 100644
index 32881845..00000000
--- a/docs/configuration/service/md-pppoe-server.md
+++ /dev/null
@@ -1,753 +0,0 @@
----
-lastproofread: '2022-09-17'
----
-
-(pppoe-server)=
-
-# PPPoE Server
-
-VyOS utilizes [accel-ppp](https://accel-ppp.org/) to provide PPPoE server functionality. It can
-be used with local authentication or a connected RADIUS server.
-
-:::{note}
-Please be aware, due to an upstream bug, config
-changes/commits will restart the ppp daemon and will reset existing
-PPPoE connections from connected users, in order to become effective.
-:::
-
-## Configuring PPPoE Server
-
-```none
-set service pppoe-server access-concentrator PPPoE-Server
-set service pppoe-server authentication mode local
-set service pppoe-server authentication local-users username test password 'test'
-set service pppoe-server client-ip-pool PPPOE-POOL range 192.168.255.2-192.168.255.254
-set service pppoe-server default-pool 'PPPOE-POOL'
-set service pppoe-server gateway-address 192.168.255.1
-set service pppoe-server interface eth0
-```
-
-```{cfgcmd} set service pppoe-server access-concentrator \<name\>
-
- Use this command to set a name for this PPPoE-server access
- concentrator.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication mode \<local | radius\>
-
-Set authentication backend. The configured authentication backend is used
-for all queries.
-
-* **radius**: All authentication queries are handled by a configured RADIUS
-server.
-* **local**: All authentication queries are handled locally.
-* **noauth**: Authentication disabled.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication local-users username \<name\> password \<password\>
-
-Create `<user>` for local authentication on this system. The users password
-will be set to `<pass>`.
-```
-
-
-```{cfgcmd} set service pppoe-server client-ip-pool \<POOL-NAME\> range \<x.x.x.x-x.x.x.x | x.x.x.x/x\>
-
-Use this command to define the first IP address of a pool of
-addresses to be given to pppoe clients. If notation ``x.x.x.x-x.x.x.x``,
-it must be within a /24 subnet. If notation ``x.x.x.x/x`` is
-used there is possibility to set host/netmask.
-```
-
-
-```{cfgcmd} set service pppoe-server default-pool \<POOL-NAME\>
-
-Use this command to define default address pool name.
-```
-
-
-```{cfgcmd} set service pppoe-server interface \<interface\>
-
-Use this command to define the interface the PPPoE server will use to
-listen for PPPoE clients.
-```
-
-
-```{cfgcmd} set service pppoe-server gateway-address \<address\>
-
-Specifies single `<gateway>` IP address to be used as local address of PPP
-interfaces.
-```
-
-## Configuring RADIUS authentication
-
-To enable RADIUS based authentication, the authentication mode needs to be
-changed within the configuration. Previous settings like the local users, still
-exists within the configuration, however they are not used if the mode has been
-changed from local to radius. Once changed back to local, it will use all local
-accounts again.
-
-```none
-set service pppoe-server authentication mode radius
-```
-
-```{cfgcmd} set service pppoe-server authentication radius server \<server\> key \<secret\>
-
-Configure RADIUS `<server>` and its required shared `<secret>` for
-communicating with the RADIUS server.
-```
-
-Since the RADIUS server would be a single point of failure, multiple RADIUS
-servers can be setup and will be used subsequentially.
-For example:
-
-```none
-set service pppoe-server authentication radius server 10.0.0.1 key 'foo'
-set service pppoe-server authentication radius server 10.0.0.2 key 'foo'
-```
-
-:::{note}
-Some RADIUS severs use an access control list which allows or denies
-queries, make sure to add your VyOS router to the allowed client list.
-:::
-
-
-### RADIUS source address
-
-
-If you are using OSPF as IGP, always the closest interface connected to the
-RADIUS server is used. With VyOS 1.2 you can bind all outgoing RADIUS requests
-to a single source IP e.g. the loopback interface.
-
-```{cfgcmd} set service pppoe-server authentication radius source-address \<address\>
-
-Source IPv4 address used in all RADIUS server queires.
-```
-
-:::{note}
-The `source-address` must be configured on one of VyOS interface.
-Best practice would be a loopback or dummy interface.
-:::
-
-
-### RADIUS advanced options
-
-```{cfgcmd} set service pppoe-server authentication radius server \<server\> port \<port\>
-
-Configure RADIUS `<server>` and its required port for authentication requests.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius server \<server\> fail-time \<time\>
-
-Mark RADIUS server as offline for this given `<time>` in seconds.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius server \<server\> disable
-
-Temporary disable this RADIUS server.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius acct-timeout \<timeout\>
-
-Timeout to wait reply for Interim-Update packets. (default 3 seconds)
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius dynamic-author server \<address\>
-
-Specifies IP address for Dynamic Authorization Extension server (DM/CoA).
-This IP must exist on any VyOS interface or it can be ``0.0.0.0``.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius dynamic-author port \<port\>
-
-UDP port for Dynamic Authorization Extension server (DM/CoA)
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius dynamic-author key \<secret\>
-
-Secret for Dynamic Authorization Extension server (DM/CoA)
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius max-try \<number\>
-
-Maximum number of tries to send Access-Request/Accounting-Request queries
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius timeout \<timeout\>
-
-Timeout to wait response from server (seconds)
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius nas-identifier \<identifier\>
-
-Value to send to RADIUS server in NAS-Identifier attribute and to be matched
-in DM/CoA requests.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius nas-ip-address \<address\>
-
-Value to send to RADIUS server in NAS-IP-Address attribute and to be matched
-in DM/CoA requests. Also DM/CoA server will bind to that address.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius source-address \<address\>
-
-Source IPv4 address used in all RADIUS server queires.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius rate-limit attribute \<attribute\>
-
-Specifies which RADIUS server attribute contains the rate limit information.
-The default attribute is ``Filter-Id``.
-```
-
-:::{note}
-If you set a custom RADIUS attribute you must define it on both
-dictionaries at RADIUS server and client.
-:::
-
-```{cfgcmd} set service pppoe-server authentication radius rate-limit enable
-
-Enables bandwidth shaping via RADIUS.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication radius rate-limit vendor
-
-Specifies the vendor dictionary, dictionary needs to be in
-/usr/share/accel-ppp/radius.
-```
-
-Received RADIUS attributes have a higher priority than parameters defined within
-the CLI configuration, refer to the explanation below.
-
-
-### Allocation clients ip addresses by RADIUS
-
-
-If the RADIUS server sends the attribute `Framed-IP-Address` then this IP
-address will be allocated to the client and the option `default-pool`
-within the CLI config is being ignored.
-
-
-If the RADIUS server sends the attribute `Framed-Pool`, IP address will
-be allocated from a predefined IP pool whose name equals the attribute value.
-
-
-If the RADIUS server sends the attribute `Stateful-IPv6-Address-Pool`,
-IPv6 address will be allocated from a predefined IPv6 pool `prefix`
-whose name equals the attribute value.
-
-
-If the RADIUS server sends the attribute `Delegated-IPv6-Prefix-Pool`,
-IPv6 delegation pefix will be allocated from a predefined IPv6 pool `delegate`
-whose name equals the attribute value.
-
-
-:::{note}
-`Stateful-IPv6-Address-Pool` and `Delegated-IPv6-Prefix-Pool`
-are defined in RFC6911. If they are not defined in your RADIUS server,
-add new [dictionary].
-:::
-
-
-User interface can be put to VRF context via RADIUS Access-Accept packet,
-or change it via RADIUS CoA. `Accel-VRF-Name` is used from these purposes.
-It is custom [ACCEL-PPP attribute]. Define it in your RADIUS server.
-
-
-### Renaming clients interfaces by RADIUS
-
-
-If the RADIUS server uses the attribute `NAS-Port-Id`, ppp tunnels will be
-renamed.
-
-
-:::{note}
-The value of the attribute `NAS-Port-Id` must be less than 16
-characters, otherwise the interface won't be renamed.
-:::
-
-
-## Automatic VLAN Creation
-
-```{cfgcmd} set service pppoe-server interface \<interface\> vlan \<id | range\>
-
-VLAN's can be created by Accel-ppp on the fly via the use of a Kernel module
-named ``vlan_mon``, which is monitoring incoming vlans and creates the
-necessary VLAN if required and allowed. VyOS supports the use of either
-VLAN ID's or entire ranges, both values can be defined at the same time for
-an interface.
-
-When configured, PPPoE will create the necessary VLANs when required. Once
-the user session has been cancelled and the VLAN is not needed anymore, VyOS
-will remove it again.
-```
-
-
-```none
-set service pppoe-server interface eth3 vlan 100
-set service pppoe-server interface eth3 vlan 200
-set service pppoe-server interface eth3 vlan 500-1000
-set service pppoe-server interface eth3 vlan 2000-3000
-```
-
-## Bandwidth Shaping
-
-
-Bandwidth rate limits can be set for local users or RADIUS based
-attributes.
-
-
-### For Local Users
-
-```{cfgcmd} set service pppoe-server authentication local-users username \<user\> rate-limit download \<bandwidth\>
-
-Download bandwidth limit in kbit/s for `<user>`.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication local-users username \<user\> rate-limit upload \<bandwidth\>
-
-Upload bandwidth limit in kbit/s for `<user>`.
-```
-```none
-set service pppoe-server access-concentrator 'ACN'
-set service pppoe-server authentication local-users username foo password 'bar'
-set service pppoe-server authentication local-users username foo rate-limit download '20480'
-set service pppoe-server authentication local-users username foo rate-limit upload '10240'
-set service pppoe-server authentication mode 'local'
-set service pppoe-server client-ip-pool IP-POOL range '10.1.1.100/24'
-set service pppoe-server default-pool 'IP-POOL'
-set service pppoe-server name-server '10.100.100.1'
-set service pppoe-server name-server '10.100.200.1'
-set service pppoe-server interface 'eth1'
-set service pppoe-server gateway-address '10.1.1.2'
-```
-
-Once the user is connected, the user session is using the set limits and
-can be displayed via `show pppoe-server sessions`.
-
-```none
-show pppoe-server sessions
-ifname | username | ip | calling-sid | rate-limit | state | uptime | rx-bytes | tx-bytes
--------+----------+------------+-------------------+-------------+--------+----------+----------+----------
-ppp0 | foo | 10.1.1.100 | 00:53:00:ba:db:15 | 20480/10240 | active | 00:00:11 | 214 B | 76 B
-```
-
-### For RADIUS users
-
-The current attribute `Filter-Id` is being used as default and can be
-setup within RADIUS:
-
-Filter-Id=2000/3000 (means 2000Kbit down-stream rate and 3000Kbit
-up-stream rate)
-
-The command below enables it, assuming the RADIUS connection has been
-setup and is working.
-
-```{cfgcmd} set service pppoe-server authentication radius rate-limit enable
-
- Use this command to enable bandwidth shaping via RADIUS.
-```
-
-Other attributes can be used, but they have to be in one of the
-dictionaries in */usr/share/accel-ppp/radius*.
-
-
-## Load Balancing
-
-```{cfgcmd} set service pppoe-server pado-delay \<number-of-ms\> sessions \<number-of-sessions\>
-
-Use this command to enable the delay of PADO (PPPoE Active Discovery
-Offer) packets, which can be used as a session balancing mechanism
-with other PPPoE servers.
-```
-
-
-```none
-set service pppoe-server pado-delay 50 sessions '500'
-set service pppoe-server pado-delay 100 sessions '1000'
-set service pppoe-server pado-delay 300 sessions '3000'
-```
-
-In the example above, the first 499 sessions connect without delay. PADO
-packets will be delayed 50 ms for connection from 500 to 999, this trick
-allows other PPPoE servers send PADO faster and clients will connect to
-other servers. Last command says that this PPPoE server can serve only
-3000 clients.
-
-
-## IPv6
-
-```{cfgcmd} set service pppoe-server ppp-options ipv6 \<require | prefer | allow | deny\>
-
-Specifies IPv6 negotiation preference.
-
-* **require** - Require IPv6 negotiation
-* **prefer** - Ask client for IPv6 negotiation, do not fail if it rejects
-* **allow** - Negotiate IPv6 only if client requests
-* **deny** - Do not negotiate IPv6 (default value)
-```
-
-
-```{cfgcmd} set service pppoe-server client-ipv6-pool \<IPv6-POOL-NAME\> prefix \<address\> mask \<number-of-bits\>
-
-Use this comand to set the IPv6 address pool from which an PPPoE client
-will get an IPv6 prefix of your defined length (mask) to terminate the
-PPPoE endpoint at their side. The mask length can be set from 48 to 128
-bit long, the default value is 64.
-```
-
-
-```{cfgcmd} set service pppoe-server client-ipv6-pool \<IPv6-POOL-NAME\> delegate \<address\> delegation-prefix \<number-of-bits\>
-
-Use this command to configure DHCPv6 Prefix Delegation (RFC3633) on
-PPPoE. You will have to set your IPv6 pool and the length of the
-delegation prefix. From the defined IPv6 pool you will be handing out
-networks of the defined length (delegation-prefix). The length of the
-delegation prefix can be set from 32 to 64 bit long.
-```
-
-
-```{cfgcmd} set service pppoe-server default-ipv6-pool \<IPv6-POOL-NAME\>
-
-Use this command to define default IPv6 address pool name.
-```
-
-
-```none
-set service pppoe-server ppp-options ipv6 allow
-set service pppoe-server client-ipv6-pool IPv6-POOL delegate '2001:db8:8003::/48' delegation-prefix '56'
-set service pppoe-server client-ipv6-pool IPv6-POOL prefix '2001:db8:8002::/48' mask '64'
-set service pppoe-server default-ipv6-pool IPv6-POOL
-```
-
-### IPv6 Advanced Options
-
-```{cfgcmd} set service pppoe-server ppp-options ipv6-accept-peer-interface-id
-
-Accept peer interface identifier. By default is not defined.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options ipv6-interface-id \<random | x:x:x:x\>
-
-Specifies fixed or random interface identifier for IPv6.
-By default is fixed.
-
-* **random** - Random interface identifier for IPv6
-* **x:x:x:x** - Specify interface identifier for IPv6
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options ipv6-interface-id \<random | x:x:x:x\>
-
-Specifies peer interface identifier for IPv6. By default is fixed.
-
-* **random** - Random interface identifier for IPv6
-* **x:x:x:x** - Specify interface identifier for IPv6
-* **ipv4-addr** - Calculate interface identifier from IPv4 address.
-* **calling-sid** - Calculate interface identifier from calling-station-id.
-```
-
-## Scripting
-
-```{cfgcmd} set service pppoe-server extended-scripts on-change \<path_to_script\>
-
-Script to run when session interface changed by RADIUS CoA handling
-```
-
-
-```{cfgcmd} set service pppoe-server extended-scripts on-down \<path_to_script\>
-
-Script to run when session interface going to terminate
-```
-
-
-```{cfgcmd} set service pppoe-server extended-scripts on-pre-up \<path_to_script\>
-
-Script to run before session interface comes up
-```
-
-
-```{cfgcmd} set service pppoe-server extended-scripts on-up \<path_to_script\>
-
-Script to run when session interface is completely configured and started
-```
-
-## Advanced Options
-
-
-### Authentication Advanced Options
-
-```{cfgcmd} set service pppoe-server authentication local-users username \<user\> disable
-
-Disable `<user>` account.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication local-users username \<user\> static-ip \<address\>
-
-Assign static IP address to `<user>` account.
-```
-
-
-```{cfgcmd} set service pppoe-server authentication protocols \<pap | chap | mschap | mschap-v2\>
-
-Require the peer to authenticate itself using one of the following protocols:
-pap, chap, mschap, mschap-v2.
-```
-
-### Client IP Pool Advanced Options
-
-```{cfgcmd} set service pppoe-server client-ip-pool \<POOL-NAME\> next-pool \<NEXT-POOL-NAME\>
-
-Use this command to define the next address pool name.
-```
-
-### PPP Advanced Options
-
-```{cfgcmd} set service pppoe-server ppp-options disable-ccp
-
-Disable Compression Control Protocol (CCP).
-CCP is enabled by default.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options interface-cache \<number\>
-
-Specifies number of interfaces to keep in cache. It means that don’t
-destroy interface after corresponding session is destroyed, instead
-place it to cache and use it later for new sessions repeatedly.
-This should reduce kernel-level interface creation/deletion rate lack.
-Default value is **0**.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options ipv4 \<require | prefer | allow | deny\>
-
-Specifies IPv4 negotiation preference.
-
-* **require** - Require IPv4 negotiation
-* **prefer** - Ask client for IPv4 negotiation, do not fail if it rejects
-* **allow** - Negotiate IPv4 only if client requests (Default value)
-* **deny** - Do not negotiate IPv4
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options lcp-echo-failure \<number\>
-
-Defines the maximum `<number>` of unanswered echo requests. Upon reaching the
-value `<number>`, the session will be reset. Default value is **3**.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options lcp-echo-interval \<interval\>
-
-If this option is specified and is greater than 0, then the PPP module will
-send LCP pings of the echo request every `<interval>` seconds.
-Default value is **30**.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options lcp-echo-timeout
-
-Specifies timeout in seconds to wait for any peer activity. If this option
-specified it turns on adaptive lcp echo functionality and "lcp-echo-failure"
-is not used. Default value is **0**.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options min-mtu \<number\>
-
-Defines minimum acceptable MTU. If client will try to negotiate less then
-specified MTU then it will be NAKed or disconnected if rejects greater MTU.
-Default value is **100**.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options mppe \<require | prefer | deny\>
-
-Specifies {abbr}`MPPE (Microsoft Point-to-Point Encryption)` negotiation
-preference.
-
-* **require** - ask client for mppe, if it rejects drop connection
-* **prefer** - ask client for mppe, if it rejects don't fail. (Default value)
-* **deny** - deny mppe
-
-Default behavior - don't ask client for mppe, but allow it if client wants.
-Please note that RADIUS may override this option by MS-MPPE-Encryption-Policy
-attribute.
-```
-
-
-```{cfgcmd} set service pppoe-server ppp-options mru \<number\>
-
-Defines preferred MRU. By default is not defined.
-```
-
-### Global Advanced options
-
-```{cfgcmd} set service pppoe-server description \<description\>
-
-Set description.
-```
-
-
-```{cfgcmd} set service pppoe-server limits burst \<value\>
-
-Burst count
-```
-
-
-```{cfgcmd} set service pppoe-server limits connection-limit \<value\>
-
-Acceptable rate of connections (e.g. 1/min, 60/sec)
-```
-
-
-```{cfgcmd} set service pppoe-server limits timeout \<value\>
-
-Timeout in seconds
-```
-
-
-```{cfgcmd} set service pppoe-server mtu
-
-Maximum Transmission Unit (MTU) (default: **1492**)
-```
-
-
-```{cfgcmd} set service pppoe-server max-concurrent-sessions
-
-Maximum number of concurrent session start attempts
-```
-
-
-```{cfgcmd} set service pppoe-server name-server \<address\>
-
-Connected client should use `<address>` as their DNS server. This
-command accepts both IPv4 and IPv6 addresses. Up to two nameservers
-can be configured for IPv4, up to three for IPv6.
-```
-
-
-```{cfgcmd} set service pppoe-server service-name \<names\>
-
-Specifies Service-Name to respond. If absent any Service-Name is
-acceptable and client’s Service-Name will be sent back. Also possible
-set multiple service-names: `sn1,sn2,sn3`
-```
-
-Per default the user session is being replaced if a second
-authentication request succeeds. Such session requests can be either
-denied or allowed entirely, which would allow multiple sessions for a
-user in the latter case. If it is denied, the second session is being
-rejected even if the authentication succeeds, the user has to terminate
-its first session and can then authentication again.
-
-```{cfgcmd} set service pppoe-server session-control
-
-* **disable**: Disables session control.
-* **deny**: Deny second session authorization.
-* **replace**: Terminate first session when second is authorized **(default)**
-```
-
-
-```{cfgcmd} set service pppoe-server shaper fwmark \<1-2147483647\>
-
-Match firewall mark value
-```
-
-
-```{cfgcmd} set service pppoe-server snmp master-agent
-
-Enable SNMP
-```
-
-
-```{cfgcmd} set service pppoe-server wins-server \<address\>
-
-Windows Internet Name Service (WINS) servers propagated to client
-```
-
-## Monitoring
-
-```{opcmd} show pppoe-server sessions
-
-Use this command to locally check the active sessions in the PPPoE
-server.
-```
-```none
-show pppoe-server sessions
-ifname | username | ip | calling-sid | rate-limit | state | uptime | rx-bytes | tx-bytes
--------+----------+------------+-------------------+-------------+--------+----------+----------+----------
-ppp0 | foo | 10.1.1.100 | 00:53:00:ba:db:15 | 20480/10240 | active | 00:00:11 | 214 B | 76 B
-```
-
-## Examples
-### IPv4
-
-The example below uses ACN as access-concentrator name, assigns an
-address from the pool 10.1.1.100-111, terminates at the local endpoint
-10.1.1.1 and serves requests only on eth1.
-
-```none
-set service pppoe-server access-concentrator 'ACN'
-set service pppoe-server authentication local-users username foo password 'bar'
-set service pppoe-server authentication mode 'local'
-set service pppoe-server client-ip-pool IP-POOL range '10.1.1.100-10.1.1.111'
-set service pppoe-server default-pool 'IP-POOL'
-set service pppoe-server interface eth1
-set service pppoe-server gateway-address '10.1.1.2'
-set service pppoe-server name-server '10.100.100.1'
-set service pppoe-server name-server '10.100.200.1'
-```
-
-### Dual-Stack IPv4/IPv6 provisioning with Prefix Delegation
-
-The example below covers a dual-stack configuration.
-
-```none
-set service pppoe-server authentication local-users username test password 'test'
-set service pppoe-server authentication mode 'local'
-set service pppoe-server client-ip-pool IP-POOL range '192.168.0.1/24'
-set service pppoe-server default-pool 'IP-POOL'
-set service pppoe-server client-ipv6-pool IPv6-POOL delegate '2001:db8:8003::/48' delegation-prefix '56'
-set service pppoe-server client-ipv6-pool IPV6-POOL prefix '2001:db8:8002::/48' mask '64'
-set service pppoe-server default-ipv6-pool IPv6-POOL
-set service pppoe-server ppp-options ipv6 allow
-set service pppoe-server name-server '10.1.1.1'
-set service pppoe-server name-server '2001:db8:4860::8888'
-set service pppoe-server interface 'eth2'
-set service pppoe-server gateway-address '10.100.100.1'
-```
-
-The client, once successfully authenticated, will receive an IPv4 and an
-IPv6 /64 address to terminate the PPPoE endpoint on the client side and
-a /56 subnet for the clients internal use.
-
-```none
-vyos@pppoe-server:~$ sh pppoe-server sessions
- ifname | username | ip | ip6 | ip6-dp | calling-sid | rate-limit | state | uptime | rx-bytes | tx-bytes
---------+----------+-------------+--------------------------+---------------------+-------------------+------------+--------+----------+----------+----------
- ppp0 | test | 192.168.0.1 | 2001:db8:8002:0:200::/64 | 2001:db8:8003::1/56 | 00:53:00:12:42:eb | | active | 00:00:49 | 875 B | 2.1 KiB
-```
-
-[accel-ppp attribute]: https://github.com/accel-ppp/accel-ppp/blob/master/accel-pppd/radius/dict/dictionary.accel
-[dictionary]: https://github.com/accel-ppp/accel-ppp/blob/master/accel-pppd/radius/dict/dictionary.rfc6911
diff --git a/docs/configuration/service/md-router-advert.md b/docs/configuration/service/md-router-advert.md
deleted file mode 100644
index 10753105..00000000
--- a/docs/configuration/service/md-router-advert.md
+++ /dev/null
@@ -1,121 +0,0 @@
-(router-advert)=
-
-# Router Advertisements
-
-{abbr}`RAs (Router advertisements)` are described in {rfc}`4861#section-4.6.2`.
-They are part of what is known as {abbr}`SLAAC (Stateless Address
-Autoconfiguration)`.
-
-Supported interface types:
-
-> - bonding
-> - bridge
-> - ethernet
-> - geneve
-> - l2tpv3
-> - openvpn
-> - pseudo-ethernet
-> - tunnel
-> - vxlan
-> - wireguard
-> - wireless
-> - wwan
-
-## Configuration
-
-```{cfgcmd} set service router-advert interface \<interface\> ...
-```
-
-```{eval-rst}
-.. csv-table::
- :header: "Field", "VyOS Option", "Description"
- :widths: 10, 10, 20
-
- "Cur Hop Limit", "hop-limit", "Hop count field of the outgoing RA packets"
- """Managed address configuration"" flag", "managed-flag", "Tell hosts to use the administered stateful protocol (i.e. DHCP) for autoconfiguration"
- """Other configuration"" flag", "other-config-flag", "Tell hosts to use the administered (stateful) protocol (i.e. DHCP) for autoconfiguration of other (non-address) information"
- "MTU","link-mtu","Link MTU value placed in RAs, excluded in RAs if unset"
- "Router Lifetime","default-lifetime","Lifetime associated with the default router in units of seconds"
- "Reachable Time","reachable-time","Time, in milliseconds, that a node assumes a neighbor is reachable after having received a reachability confirmation"
- "Retransmit Timer","retrans-timer","Time in milliseconds between retransmitted Neighbor Solicitation messages"
- "Default Router Preference","default-preference","Preference associated with the default router"
- "Interval", "interval", "Min and max intervals between unsolicited multicast RAs"
- "DNSSL", "dnssl", "DNS search list to advertise"
- "Name Server", "name-server", "Advertise DNS server per https://tools.ietf.org/html/rfc6106"
- "Auto Ignore Prefix", "auto-ignore", "Exclude a prefix from being advertised when the wildcard ::/64 prefix is used"
- "Captive Portal", "captive-portal", "Advertise a URL pointing to an RFC 8908-compliant API to tell hosts that they are behind a captive portal"
-```
-
-### Advertising a Prefix
-
-```{cfgcmd} set service router-advert interface \<interface\> prefix \<prefix/mask\>
-
-:::{note}
-You can also opt for using ::/64 as prefix for your {abbr}`RAs (Router
-Advertisements)`. This is a special wildcard prefix that will emit {abbr}`RAs (Router Advertisements)` for every prefix assigned to the interface.
-This comes in handy when using dynamically obtained prefixes from DHCPv6-PD.
-:::
-```
-```{eval-rst}
-.. csv-table::
- :header: "VyOS Field", "Description"
- :widths: 10,30
-
- "decrement-lifetime", "Lifetime is decremented by the number of seconds since the last RA - use in conjunction with a DHCPv6-PD prefix"
- "deprecate-prefix", "Upon shutdown, this option will deprecate the prefix by announcing it in the shutdown RA"
- "no-autonomous-flag","Prefix can not be used for stateless address auto-configuration"
- "no-on-link-flag","Prefix can not be used for on-link determination"
- "preferred-lifetime","Time in seconds that the prefix will remain preferred (default 4 hours)"
- "valid-lifetime","Time in seconds that the prefix will remain valid (default: 30 days)"
-```
-
-### Advertising a NAT64 Prefix
-
-```{cfgcmd} set service router-advert interface \<interface\> nat64prefix \<prefix/mask\>
-
-Enable PREF64 option as outlined in {rfc}`8781`.
-
-NAT64 prefix mask must be one of: /32, /40, /48, /56, /64 or 96.
-
-:::{note}
-The well known NAT64 prefix is ``64:ff9b::/96``
-:::
-```
-```{eval-rst}
-.. csv-table::
- :header: "VyOS Field", "Description"
- :widths: 10,30
-
- "valid-lifetime","Time in seconds that the prefix will remain valid (default: 65528 seconds)"
-```
-
-### Disabling Advertisements
-
-To disable advertisements without deleting the configuration:
-
-```{cfgcmd} set service router-advert interface \<interface\> no-send-advert
-
-If set, the router will no longer send periodic router advertisements and
-will not respond to router solicitations.
-```
-
-```{cfgcmd} set service router-advert interface \<interface\> no-send-interval
-
-Advertisement Interval Option (specified by Mobile IPv6) is always included in
-Router Advertisements unless this option is set.
-```
-
-## Example
-
-Your LAN connected on eth0 uses prefix `2001:db8:beef:2::/64` with the router
-beeing `2001:db8:beef:2::1`
-
-```none
-set interfaces ethernet eth0 address 2001:db8:beef:2::1/64
-
-set service router-advert interface eth0 default-preference 'high'
-set service router-advert interface eth0 name-server '2001:db8::1'
-set service router-advert interface eth0 name-server '2001:db8::2'
-set service router-advert interface eth0 other-config-flag
-set service router-advert interface eth0 prefix 2001:db8:beef:2::/64
-```
diff --git a/docs/configuration/service/md-salt-minion.md b/docs/configuration/service/md-salt-minion.md
deleted file mode 100644
index e6f99752..00000000
--- a/docs/configuration/service/md-salt-minion.md
+++ /dev/null
@@ -1,51 +0,0 @@
-(saltminion)=
-
-# Salt-Minion
-
-[SaltStack] is Python-based, open-source
-software for event-driven IT automation, remote task execution, and
-configuration management. Supporting the "infrastructure as code"
-approach to data center system and network deployment and management,
-configuration automation, SecOps orchestration, vulnerability remediation,
-and hybrid cloud control.
-
-## Requirements
-
-To use the Salt-Minion, a running Salt-Master is required. You can find more
-in the [Salt Project Documentation](https://docs.saltproject.io/en/latest/contents.html)
-
-## Configuration
-
-```{cfgcmd} set service salt-minion hash \<type\>
-
- The hash type used when discovering file on master server (default: sha256)
-```
-
-
-```{cfgcmd} set service salt-minion id \<id\>
-
-Explicitly declare ID for this minion to use (default: hostname)
-```
-
-
-```{cfgcmd} set service salt-minion interval \<1-1440\>
-
-Interval in minutes between updates (default: 60)
-```
-
-
-```{cfgcmd} set service salt-minion master \<hostname | IP\>
-
-The hostname or IP address of the master
-```
-
-
-```{cfgcmd} set service salt-minion master-key \<key\>
-
-URL with signature of master for auth reply verification
-```
-
-Please take a look in the Automation section to find some usefull
-Examples.
-
-[saltstack]: https://saltproject.io/
diff --git a/docs/configuration/service/md-snmp.md b/docs/configuration/service/md-snmp.md
deleted file mode 100644
index ac0429ff..00000000
--- a/docs/configuration/service/md-snmp.md
+++ /dev/null
@@ -1,258 +0,0 @@
-(snmp)=
-
-# SNMP
-
-{abbr}`SNMP (Simple Network Management Protocol)` is an Internet Standard
-protocol for collecting and organizing information about managed devices on
-IP networks and for modifying that information to change device behavior.
-Devices that typically support SNMP include cable modems, routers, switches,
-servers, workstations, printers, and more.
-
-SNMP is widely used in network management for network monitoring. SNMP exposes
-management data in the form of variables on the managed systems organized in
-a management information base ([MIB]) which describe the system status and
-configuration. These variables can then be remotely queried (and, in some
-circumstances, manipulated) by managing applications.
-
-Three significant versions of SNMP have been developed and deployed. SNMPv1 is
-the original version of the protocol. More recent versions, SNMPv2c and SNMPv3,
-feature improvements in performance, flexibility and security.
-
-SNMP is a component of the Internet Protocol Suite as defined by the Internet
-Engineering Task Force (IETF). It consists of a set of standards for network
-management, including an application layer protocol, a database schema, and a
-set of data objects.
-
-## Overview and basic concepts
-
-In typical uses of SNMP, one or more administrative computers called managers
-have the task of monitoring or managing a group of hosts or devices on a
-computer network. Each managed system executes a software component called an
-agent which reports information via SNMP to the manager.
-
-An SNMP-managed network consists of three key components:
-
-- Managed devices
-- Agent - software which runs on managed devices
-- Network management station (NMS) - software which runs on the manager
-
-A managed device is a network node that implements an SNMP interface that
-allows unidirectional (read-only) or bidirectional (read and write) access to
-node-specific information. Managed devices exchange node-specific information
-with the NMSs. Sometimes called network elements, the managed devices can be
-any type of device, including, but not limited to, routers, access servers,
-switches, cable modems, bridges, hubs, IP telephones, IP video cameras,
-computer hosts, and printers.
-
-An agent is a network-management software module that resides on a managed
-device. An agent has local knowledge of management information and translates
-that information to or from an SNMP-specific form.
-
-A network management station executes applications that monitor and control
-managed devices. NMSs provide the bulk of the processing and memory resources
-required for network management. One or more NMSs may exist on any managed
-network.
-
-:::{figure} /_static/images/service_snmp_communication_principles_diagram.webp
-:alt: Principle of SNMP Communication
-:scale: 20 %
-
-Image thankfully borrowed from
-<https://en.wikipedia.org/wiki/File:SNMP_communication_principles_diagram.PNG>
-which is under the GNU Free Documentation License
-:::
-
-:::{note}
-VyOS SNMP supports both IPv4 and IPv6.
-:::
-
-## SNMP Protocol Versions
-
-VyOS itself supports [SNMPv2] (version 2) and [SNMPv3] (version 3) where the
-later is recommended because of improved security (optional authentication and
-encryption).
-
-### SNMPv2
-
-SNMPv2 is the original and most commonly used version. For authorizing clients,
-SNMP uses the concept of communities. Communities may have authorization set
-to read only (this is most common) or to read and write (this option is not
-actively used in VyOS).
-
-SNMP can work synchronously or asynchronously. In synchronous communication,
-the monitoring system queries the router periodically. In asynchronous, the
-router sends notification to the "trap" (the monitoring host).
-
-SNMPv2 does not support any authentication mechanisms, other than client source
-address, so you should specify addresses of clients allowed to monitor the
-router. Note that SNMPv2 also supports no encryption and always sends data in
-plain text.
-
-#### Example
-
-```none
-# Define a community
-set service snmp community routers authorization ro
-
-# Allow monitoring access from the entire network
-set service snmp community routers network 192.0.2.0/24
-set service snmp community routers network 2001::db8:ffff:eeee::/64
-
-# Allow monitoring access from specific addresses
-set service snmp community routers client 203.0.113.10
-set service snmp community routers client 203.0.113.20
-
-# Define optional router information
-set service snmp location "UK, London"
-set service snmp contact "admin@example.com"
-
-# Trap target if you want asynchronous communication
-set service snmp trap-target 203.0.113.10
-
-# Listen only on specific IP addresses (port defaults to 161)
-set service snmp listen-address 172.16.254.36 port 161
-set service snmp listen-address 2001:db8::f00::1
-```
-
-
-### SNMPv3
-
-SNMPv3 (version 3 of the SNMP protocol) introduced a whole slew of new security
-related features that have been missing from the previous versions. Security
-was one of the biggest weakness of SNMP until v3. Authentication in SNMP
-Versions 1 and 2 amounts to nothing more than a password (community string)
-sent in clear text between a manager and agent. Each SNMPv3 message contains
-security parameters which are encoded as an octet string. The meaning of these
-security parameters depends on the security model being used.
-
-The security approach in SNMPv3 targets:
-
-- Confidentiality – Encryption of packets to prevent snooping by an
- unauthorized source.
-- Integrity – Message integrity to ensure that a packet has not been tampered
- while in transit including an optional packet replay protection mechanism.
-- Authentication – to verify that the message is from a valid source.
-
-(snmp-v3-example)=
-
-#### Example
-
-- Let SNMP daemon listen only on IP address 192.0.2.1
-- Configure new SNMP user named "vyos" with password "vyos12345678"
-- New user will use SHA/AES for authentication and privacy
-
-```none
-set service snmp listen-address 192.0.2.1
-set service snmp location 'VyOS Datacenter'
-set service snmp v3 engineid '000000000000000000000002'
-set service snmp v3 group default mode 'ro'
-set service snmp v3 group default view 'default'
-set service snmp v3 user vyos auth plaintext-password 'vyos12345678'
-set service snmp v3 user vyos auth type 'sha'
-set service snmp v3 user vyos group 'default'
-set service snmp v3 user vyos privacy plaintext-password 'vyos12345678'
-set service snmp v3 user vyos privacy type 'aes'
-set service snmp v3 view default oid 1
-```
-
-After commit the plaintext passwords will be hashed and stored in your
-configuration. The resulting CLI config will look like:
-
-```none
-vyos@vyos# show service snmp
- listen-address 192.0.2.1 {
- }
- location "VyOS Datacenter"
- v3 {
- engineid 000000000000000000000002
- group default {
- mode ro
- view default
- }
- user vyos {
- auth {
- encrypted-password 4e52fe55fd011c9c51ae2c65f4b78ca93dcafdfe
- type sha
- }
- group default
- privacy {
- encrypted-password 4e52fe55fd011c9c51ae2c65f4b78ca93dcafdfe
- type aes
- }
- }
- view default {
- oid 1 {
- }
- }
- }
-```
-
-You can test the SNMPv3 functionality from any linux based system, just run the
-following command: `snmpwalk -v 3 -u vyos -a SHA -A vyos12345678 -x AES
--X vyos12345678 -l authPriv 192.0.2.1 .1`
-
-## VyOS MIBs
-
-All SNMP MIBs are located in each image of VyOS here: `/usr/share/snmp/mibs/`
-
-You are be able to download the files using SCP, once the SSH service
-has been activated like so
-
-```none
-scp -r vyos@your_router:/usr/share/snmp/mibs /your_folder/mibs
-```
-
-
-## SNMP Extensions
-
-To extend SNMP agent functionality, custom scripts can be executed every time
-the agent is being called. This can be achieved by using
-`arbitrary extensioncommands`. The first step is to create a functional
-script of course, then upload it to your VyOS instance via the command
-`scp your_script.sh vyos@your_router:/config/user-data`.
-Once the script is uploaded, it needs to be configured via the command below.
-
-```none
-set service snmp script-extensions extension-name my-extension script your_script.sh
-commit
-```
-
-The OID `.1.3.6.1.4.1.8072.1.3.2.3.1.1.4.116.101.115.116`, once called, will
-contain the output of the extension.
-
-```none
-root@vyos:/home/vyos# snmpwalk -v2c -c public 127.0.0.1 nsExtendOutput1
-NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."my-extension" = STRING: hello
-NET-SNMP-EXTEND-MIB::nsExtendOutputFull."my-extension" = STRING: hello
-NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."my-extension" = INTEGER: 1
-NET-SNMP-EXTEND-MIB::nsExtendResult."my-extension" = INTEGER: 0
-```
-
-
-## SolarWinds
-
-If you happen to use SolarWinds Orion as NMS you can also use the Device
-Templates Management. A template for VyOS can be easily imported.
-
-Create a file named `VyOS-1.3.6.1.4.1.44641.ConfigMgmt-Commands` using the
-following content:
-
-```none
-<Configuration-Management Device="VyOS" SystemOID="1.3.6.1.4.1.44641">
- <Commands>
- <Command Name="Reset" Value="set terminal width 0${CRLF}set terminal length 0"/>
- <Command Name="Reboot" Value="reboot${CRLF}Yes"/>
- <Command Name="EnterConfigMode" Value="configure"/>
- <Command Name="ExitConfigMode" Value="commit${CRLF}exit"/>
- <Command Name="DownloadConfig" Value="show configuration commands"/>
- <Command Name="SaveConfig" Value="commit${CRLF}save"/>
- <Command Name="Version" Value="show version"/>
- <Command Name="MenuBased" Value="False"/>
- <Command Name="VirtualPrompt" Value=":~"/>
- </Commands>
-</Configuration-Management>
-```
-
-[mib]: <https://en.wikipedia.org/wiki/Management_information_base>
-[snmpv2]: <https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Version_2>
-[snmpv3]: <https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Version_3>
diff --git a/docs/configuration/service/md-ssh.md b/docs/configuration/service/md-ssh.md
deleted file mode 100644
index d873cbee..00000000
--- a/docs/configuration/service/md-ssh.md
+++ /dev/null
@@ -1,366 +0,0 @@
-(ssh)=
-
-# SSH
-
-{abbr}`SSH (Secure Shell)` is a cryptographic network protocol for operating
-network services securely over an unsecured network. The standard TCP port for
-SSH is 22. The best known example application is for remote login to computer
-systems by users.
-
-SSH provides a secure channel over an unsecured network in a client-server
-architecture, connecting an SSH client application with an SSH server. Common
-applications include remote command-line login and remote command execution,
-but any network service can be secured with SSH. The protocol specification
-distinguishes between two major versions, referred to as SSH-1 and SSH-2.
-
-The most visible application of the protocol is for access to shell accounts
-on Unix-like operating systems, but it sees some limited use on Windows as
-well. In 2015, Microsoft announced that they would include native support for
-SSH in a future release.
-
-SSH was designed as a replacement for Telnet and for unsecured remote shell
-protocols such as the Berkeley rlogin, rsh, and rexec protocols.
-Those protocols send information, notably passwords, in plaintext,
-rendering them susceptible to interception and disclosure using packet
-analysis. The encryption used by SSH is intended to provide confidentiality
-and integrity of data over an unsecured network, such as the Internet.
-
-:::{note}
-VyOS 1.1 supported login as user `root`. This has been removed due
-to tighter security in VyOS 1.2.
-:::
-
-:::{seealso}
-SSH {ref}`ssh_key_based_authentication`
-:::
-
-## Configuration
-
-```{cfgcmd} set service ssh port \<port\>
-
-Enabling SSH only requires you to specify the port ``<port>`` you want SSH to
-listen on. By default, SSH runs on port 22.
-```
-
-
-```{cfgcmd} set service ssh listen-address \<address\>
-
-Specify IPv4/IPv6 listen address of SSH server. Multiple addresses can be
-defined.
-```
-
-
-```{cfgcmd} set service ssh cipher \<cipher\>
-
-Define allowed ciphers used for the SSH connection. A number of allowed
-ciphers can be specified, use multiple occurrences to allow multiple ciphers.
-
-List of supported ciphers: ``3des-cbc``, ``aes128-cbc``, ``aes192-cbc``,
-``aes256-cbc``, ``aes128-ctr``, ``aes192-ctr``, ``aes256-ctr``,
-``aes128-gcm@openssh.com``, ``aes256-gcm@openssh.com``,
-``chacha20-poly1305@openssh.com``
-```
-
-
-```{cfgcmd} set service ssh disable-password-authentication
-
-Disable password based authentication. Login via SSH keys only. This hardens
-security!
-```
-
-
-```{cfgcmd} set service ssh fido pin-required
-
-Require FIDO2 keys to attest that a user has been verified (e.g. via a PIN).
-```
-
-
-````{cfgcmd} set service ssh fido touch-required
-
-Require FIDO2 keys to attest that a user is physically present.
-
-VyOS supports SSH authentication using FIDO2-backed keys generated by OpenSSH.
-Two FIDO2 key types are supported by OpenSSH: ``ed25519-sk``, ``ecdsa-sk``
-
-Generic FIDO2-backed SSH key generation example:
-
-:::{code-block} none
-ssh-keygen -t ecdsa-sk -O verify-required -C "fido2-ssh-key"
-:::
-
-```{eval-rst}
-During key generation, OpenSSH will:
- * Request user presence (for example, a physical touch or confirmation)
- * Optionally request user verification (PIN), if supported by the authenticator
- * Create a local key handle file and a corresponding public key (``.pub``)
-```
-
-The private key material never leaves the authenticator device.
-
-VyOS configuration example:
-
-:::{code-block} none
-# Generate a FIDO2 SSH key on the client system
-# Copy the public key to the VyOS instance
-set system login user vyos authentication public-keys fido key '<public-key>'
-set system login user vyos authentication public-keys fido type 'sk-ecdsa-sha2-nistp256@openssh.com'
-set service ssh fido touch-required
-:::
-
-You can now log into the system using: ``ssh -i ~/.ssh/id_fido_key vyos@192.0.2.1``
-````
-
-
-```{cfgcmd} set service ssh disable-host-validation
-
-Disable the host validation through reverse DNS lookups - can speedup login
-time when reverse lookup is not possible.
-```
-
-
-```{cfgcmd} set service ssh mac \<mac\>
-
-Specifies the available {abbr}`MAC (Message Authentication Code)` algorithms.
-The MAC algorithm is used in protocol version 2 for data integrity protection.
-Multiple algorithms can be provided by using multiple commands, defining
-one algorithm per command.
-
-List of supported MACs: ``hmac-md5``, ``hmac-md5-96``, ``hmac-ripemd160``,
-``hmac-sha1``, ``hmac-sha1-96``, ``hmac-sha2-256``, ``hmac-sha2-512``,
-``umac-64@openssh.com``, ``umac-128@openssh.com``,
-``hmac-md5-etm@openssh.com``, ``hmac-md5-96-etm@openssh.com``,
-``hmac-ripemd160-etm@openssh.com``, ``hmac-sha1-etm@openssh.com``,
-``hmac-sha1-96-etm@openssh.com``, ``hmac-sha2-256-etm@openssh.com``,
-``hmac-sha2-512-etm@openssh.com``, ``umac-64-etm@openssh.com``,
-``umac-128-etm@openssh.com``
-```
-
-
-```{cfgcmd} set service ssh access-control \<allow | deny\> \<group | user\> \<name\>
-
-Add access-control directive to allow or deny users and groups. Directives
-are processed in the following order of precedence: ``deny-users``,
-``allow-users``, ``deny-groups`` and ``allow-groups``.
-```
-
-
-```{cfgcmd} set service ssh client-keepalive-interval \<interval\>
-
-Specify timeout interval for keepalive message in seconds.
-```
-
-
-```{cfgcmd} set service ssh key-exchange \<kex\>
-
-Specify allowed {abbr}`KEX (Key Exchange)` algorithms.
-
-List of supported algorithms: ``diffie-hellman-group1-sha1``,
-``diffie-hellman-group14-sha1``, ``diffie-hellman-group14-sha256``,
-``diffie-hellman-group16-sha512``, ``diffie-hellman-group18-sha512``,
-``diffie-hellman-group-exchange-sha1``,
-``diffie-hellman-group-exchange-sha256``,
-``ecdh-sha2-nistp256``, ``ecdh-sha2-nistp384``, ``ecdh-sha2-nistp521``,
-``curve25519-sha256`` and ``curve25519-sha256@libssh.org``.
-```
-
-
-```{cfgcmd} set service ssh loglevel \<quiet | fatal | error | info | verbose\>
-
-Set the ``sshd`` log level. The default is ``info``.
-```
-
-
-```{cfgcmd} set service ssh vrf \<name\>
-
-Specify name of the {abbr}`VRF (Virtual Routing and Forwarding)` instance.
-```
-
-
-```{cfgcmd} set service ssh pubkey-accepted-algorithm \<name\>
-
-Specifies the signature algorithms that will be accepted for public key
-authentication
-
-List of supported algorithms: ``ssh-ed25519``,
-``ssh-ed25519-cert-v01@openssh.com``, ``sk-ssh-ed25519@openssh.com``,
-``sk-ssh-ed25519-cert-v01@openssh.com``, ``ecdsa-sha2-nistp256``,
-``ecdsa-sha2-nistp256-cert-v01@openssh.com``, ``ecdsa-sha2-nistp384``,
-``ecdsa-sha2-nistp384-cert-v01@openssh.com``, ``ecdsa-sha2-nistp521``,
-``ecdsa-sha2-nistp521-cert-v01@openssh.com``,
-``sk-ecdsa-sha2-nistp256@openssh.com``,
-``sk-ecdsa-sha2-nistp256-cert-v01@openssh.com``,
-``webauthn-sk-ecdsa-sha2-nistp256@openssh.com``,
-``ssh-dss``, ``ssh-dss-cert-v01@openssh.com``, ``ssh-rsa``,
-``ssh-rsa-cert-v01@openssh.com``, ``rsa-sha2-256``,
-``rsa-sha2-256-cert-v01@openssh.com``, ``rsa-sha2-512``,
-``rsa-sha2-512-cert-v01@openssh.com``
-```
-
-
-```{cfgcmd} set service ssh trusted-user-ca \<name\>
-
-Specify the name of the OpenSSH key-pair that acts as certificate authority
-and will be used to verify user certificates.
-
-You can use it by adding the OpenSSH key-pair under the PKI subsystem.
-
-Example:
-
-:::{code-block} none
-# Generate key-pair acting as CA
-$ ssh-keygen -f vyos-ssh-ca.key
-
-# Generate key for user: vyos_testca
-$ ssh-keygen -f vyos_testca -C "vyos_tesca@vyos.net"
-
-# Sign public key from user vyos_testca and insert principal names: vyos, vyos_testca
-# with a key lifetime of two weeks - after which the key is unusable
-$ ssh-keygen -s vyos-ssh-ca.key -I vyos_testca@vyos.net -n vyos,vyos_testca -V +2w vyos_testca.pub
-
-$ set system login user vyos_testca
-$ set pki openssh test_ca public key AAAAB3N.....
-$ set pki openssh test_ca public type ssh-rsa
-$ set service ssh trusted-user-ca test_ca
-:::
-You can now log into the system using: ``ssh -i vyos_testca vyos_testca@vyos.test.com``
-```
-
-## Dynamic-protection
-
-Protects host from brute-force attacks against
-SSH. Log messages are parsed, line-by-line, for recognized patterns. If an
-attack, such as several login failures within a few seconds, is detected, the
-offending IP is blocked. Offenders are unblocked after a set interval.
-
-```{cfgcmd} set service ssh dynamic-protection
-
-Allow ``ssh`` dynamic-protection.
-```
-```{cfgcmd} set service ssh dynamic-protection allow-from \<address | prefix\>
-
-Whitelist of addresses and networks. Always allow inbound connections from
-these systems.
-```
-```{cfgcmd} set service ssh dynamic-protection block-time \<sec\>
-
-Block source IP in seconds. Subsequent blocks increase by a factor of 1.5
-The default is 120.
-```
-```{cfgcmd} set service ssh dynamic-protection detect-time \<sec\>
-
-Remember source IP in seconds before reset their score. The default is 1800.
-```
-```{cfgcmd} set service ssh dynamic-protection threshold \<sec\>
-
-Block source IP when their cumulative attack score exceeds threshold. The
-default is 30.
-```
-
-(ssh-operation)=
-
-## Operation
-
-```{opcmd} restart ssh
-
-Restart the SSH daemon process, the current session is not affected, only the
-background daemon is restarted.
-```
-```{opcmd} generate ssh server-key
-
-Re-generated the public/private keyportion which SSH uses to secure
-connections.
-
-:::{note}
-Already learned known_hosts files of clients need an update as the
-public key will change.
-:::
-```
-```{opcmd} generate ssh client-key /path/to/private_key
-
-Re-generated a known pub/private keyfile which can be used to connect to
-other services (e.g. RPKI cache).
-
-Example:
-
-:::{code-block} none
-vyos@vyos:~$ generate ssh client-key /config/auth/id_rsa_rpki
-Generating public/private rsa key pair.
-Your identification has been saved in /config/auth/id_rsa_rpki.
-Your public key has been saved in /config/auth/id_rsa_rpki.pub.
-The key fingerprint is:
-SHA256:XGv2PpdOzVCzpmEzJZga8hTRq7B/ZYL3fXaioLFLS5Q vyos@vyos
-The key's randomart image is:
-+---[RSA 2048]----+
-| oo |
-| ..o |
-| . o.o.. o.|
-| o+ooo o.o|
-| Eo* =.o |
-| o = +.o*+ |
-| = o *.o.o|
-| o * +.o+.+|
-| =.. o=.oo|
-+----[SHA256]-----+
-:::
-Two new files ``/config/auth/id_rsa_rpki`` and
-``/config/auth/id_rsa_rpki.pub``
-will be created.
-```
-```{opcmd} generate public-key-command user \<username\> path \<location\>
-
-> Generate the configuration mode commands to add a public key for
-> {ref}`ssh_key_based_authentication`.
-> ``<location>`` can be a local path or a URL pointing at a remote file.
->
-> Supported remote protocols are FTP, FTPS, HTTP, HTTPS, SCP/SFTP and TFTP.
-
-Example:
-
-:::{code-block} none
-alyssa@vyos:~$ generate public-key-command user alyssa path sftp://example.net/home/alyssa/.ssh/id_rsa.pub
-# To add this key as an embedded key, run the following commands:
-configure
-set system login user alyssa authentication public-keys alyssa@example.net key AAA...
-set system login user alyssa authentication public-keys alyssa@example.net type ssh-rsa
-commit
-save
-exit
-
-ben@vyos:~$ generate public-key-command user ben path ~/.ssh/id_rsa.pub
-# To add this key as an embedded key, run the following commands:
-configure
-set system login user ben authentication public-keys ben@vyos key AAA...
-set system login user ben authentication public-keys ben@vyos type ssh-dss
-commit
-save
-exit
-:::
-```
-```{opcmd} show log ssh
-
-Show SSH server log.
-```
-```{opcmd} monitor log ssh
-
-Follow the SSH server log.
-```
-```{opcmd} show log ssh dynamic-protection
-
-Show SSH dynamic-protection log.
-```
-```{opcmd} monitor log ssh dynamic-protection
-
-Follow the SSH dynamic-protection log.
-```
-```{opcmd} show ssh dynamic-protection
-
-Show list of IPs currently blocked by SSH dynamic-protection.
-```
-```{opcmd} show ssh fingerprints
-
-Show SSH server public key fingerprints.
-```
-```{opcmd} show ssh fingerprints ascii
-
-Show SSH server public key fingerprints, including a visual ASCII art representation.
-``` \ No newline at end of file
diff --git a/docs/configuration/service/md-suricata.md b/docs/configuration/service/md-suricata.md
deleted file mode 100644
index ca9ae968..00000000
--- a/docs/configuration/service/md-suricata.md
+++ /dev/null
@@ -1,93 +0,0 @@
-(suricata)=
-
-# suricata
-
-Suricata and VyOS are powerful tools for ensuring network security and traffic management.
-Suricata is an open-source intrusion detection and prevention system (IDS/IPS) that analyzes network packets in real-time.
-
-## Suricata Features
-
-Intrusion Detection (IDS): Analyzes network traffic and detects suspicious activities, attacks, and malicious traffic.
-Intrusion Prevention (IPS): Blocks or modifies suspicious traffic in real-time, preventing attacks before they penetrate the network.
-Network Security Monitoring (NSM): Collects and analyzes network data to detect anomalies and identify threats.
-Multi-Protocol Support: Suricata supports analysis of various network protocols such as HTTP, FTP, SMB, and many others.
-In configuration mode, the commands are as follows:
-
-```none
-vyos@vyos# set service suricata
-Possible completions:
-+> address-group Address group name
-+ interface Interface to use
- > log Suricata log outputs
-+> port-group Port group name
-```
-
-These commands create a flexible interface for configuring the Suricata service, allowing users to specify addresses, ports,
-and logging parameters.
-
-After completing the service configuration in configuration mode, the main configuration file suricata.yaml is created,
-into which all specified parameters are added. Then, to ensure proper operation, the command {opcmd}`update suricata` must be run
-from operational mode, waiting for Suricata to update all its rules, which are used for analyzing traffic for threats and attacks.
-
-## Configuration
-
-```{cfgcmd} set service suricata address-group \<text\> \<address | group\>
-
- Address groups are useful when you need to create rules that apply to specific IP addresses.
- For example, if you want to create a rule that monitors traffic going to or from a specific IP address,
- you can use the group name instead of the actual IP address. This simplifies rule management and makes the
- configuration more flexible.
-
- * ``address`` IP address or subnet.
-
- * ``group`` Address group.
-```
-
-
-```{cfgcmd} set service suricata port-group \<text\> \<address | group\>
-
-Port groups are useful when you need to create rules that apply to specific ports.
-For example, if you want to create a rule that monitors traffic directed to a specific port or group of ports,
-you can use the group name instead of the actual port. This also simplifies rule management and makes
-the configuration more flexible.
-
-* ``port`` Port number.
-
-* ``group`` Port group.
-```
-
-
-```{cfgcmd} set service suricata interface \<text\>
-
-The interface that will be monitored by the Suricata service.
-```
-```{cfgcmd} set service suricata log eve \<filename | filetype | type\>
-
- Configuration of the logging file.
-
- * ``filename`` Log file (default: eve.json).
-
- * ``filetype`` EVE logging destination (default: regular).
-
- * ``type`` Log types.
-```
-
-## Operation Mode
-
-```{cfgcmd} update suricata
-
-Checks for the existence of the Suricata configuration file, updates the service,
-and then restarts it. If the configuration file is not found, a message indicates that Suricata is not configured.
-```
-```{cfgcmd} restart suricata
-
-Restarts the service. It checks if the Suricata service is active before attempting to restart it.
-If it is not active, a message indicates that the service is not configured. This command is used when adding new rules manually.
-```
-
-## Conclusion
-
-Using address and port groups allows you to make your Suricata configuration more flexible and manageable.
-Instead of specifying IP addresses and ports directly in each rule, you can define them once in the vars section and then
-reference them by group names. This is especially useful in large networks and complex configurations where multiple IP addresses
-and ports need to be monitored.
diff --git a/docs/configuration/service/md-tftp-server.md b/docs/configuration/service/md-tftp-server.md
deleted file mode 100644
index f4a6c34c..00000000
--- a/docs/configuration/service/md-tftp-server.md
+++ /dev/null
@@ -1,78 +0,0 @@
-(tftp-server)=
-
-# TFTP Server
-
-{abbr}`TFTP (Trivial File Transfer Protocol)` is a simple, lockstep file
-transfer protocol which allows a client to get a file from or put a file onto
-a remote host. One of its primary uses is in the early stages of nodes booting
-from a local area network. TFTP has been used for this application because it
-is very simple to implement.
-
-## Configuration
-
-```{cfgcmd} set service tftp-server directory \<directory\>
-
-Enable TFTP service by specifying the `<directory>` which will be used to serve
-files.
-```
-
-:::{hint}
-Choose your `directory` location carefully or you will loose the
-content on image upgrades. Any directory under `/config` is save at this
-will be migrated.
-:::
-
-```{cfgcmd} set service tftp-server listen-address \<address\>
-
-Configure the IPv4 or IPv6 listen address of the TFTP server. Multiple IPv4 and
-IPv6 addresses can be given. There will be one TFTP server instances listening
-on each IP address.
-```
-
-```{cfgcmd} set service tftp-server listen-address \<address\> vrf \<name\>
-```
-
-Additional option to run TFTP server in the {abbr}`VRF (Virtual Routing and Forwarding)` context
-
-:::{note}
-Configuring a listen-address is essential for the service to work.
-:::
-```{cfgcmd} set service tftp-server allow-upload
-
-Optional, if you want to enable uploads, else TFTP server will act as a
-read-only server.
-```
-
-### Example
-
-Provide TFTP server listening on both IPv4 and IPv6 addresses `192.0.2.1` and
-`2001:db8::1` serving the content from `/config/tftpboot`. Uploading via
-TFTP to this server is disabled.
-
-The resulting configuration will look like:
-
-```none
-vyos@vyos# show service
- tftp-server {
- directory /config/tftpboot
- listen-address 2001:db8::1
- listen-address 192.0.2.1
- }
-```
-
-### Verification
-
-Client:
-
-```none
-vyos@RTR2:~$ tftp -p -l /config/config.boot -r backup 192.0.2.1
-backup1 100% |******************************| 723 0:00:00 ETA
-```
-
-Server:
-
-```none
-vyos@RTR1# ls -ltr /config/tftpboot/
-total 1
--rw-rw-rw- 1 tftp tftp 1995 May 19 16:02 backup
-```
diff --git a/docs/configuration/service/md-webproxy.md b/docs/configuration/service/md-webproxy.md
deleted file mode 100644
index 28156b2b..00000000
--- a/docs/configuration/service/md-webproxy.md
+++ /dev/null
@@ -1,459 +0,0 @@
-(webproxy)=
-
-# Webproxy
-
-The proxy service in VyOS is based on [Squid] and some related modules.
-
-[Squid] is a caching and forwarding HTTP web proxy. It has a wide variety of
-uses, including speeding up a web server by caching repeated requests, caching
-web, DNS and other computer network lookups for a group of people sharing
-network resources, and aiding security by filtering traffic. Although primarily
-used for HTTP and FTP, Squid includes limited support for several other
-protocols including Internet Gopher, SSL,[6] TLS and HTTPS. Squid does not
-support the SOCKS protocol.
-
-URL Filtering is provided by [SquidGuard].
-
-## Configuration
-
-```{cfgcmd} set service webproxy append-domain \<domain\>
-
-Use this command to specify a domain name to be appended to domain-names
-within URLs that do not include a dot ``.`` the domain is appended.
-
-Example: to be appended is set to ``vyos.net`` and the URL received is
-``www/foo.html``, the system will use the generated, final URL of
-``www.vyos.net/foo.html``.
-
-:::{code-block} none
-set service webproxy append-domain vyos.net
-:::
-```
-
-
-```{cfgcmd} set service webproxy cache-size \<size\>
-
-The size of the on-disk Proxy cache is user configurable. The Proxies default
-cache-size is configured to 100 MB.
-
-Unit of this command is MB.
-
-:::{code-block} none
-set service webproxy cache-size 1024
-:::
-```
-
-
-```{cfgcmd} set service webproxy default-port \<port\>
-
-Specify the port used on which the proxy service is listening for requests.
-This port is the default port used for the specified listen-address.
-
-Default port is 3128.
-
-:::{code-block} none
-set service webproxy default-port 8080
-:::
-```
-
-
-```{cfgcmd} set service webproxy domain-block \<domain\>
-
-Used to block specific domains by the Proxy. Specifying "vyos.net" will block
-all access to vyos.net, and specifying ".xxx" will block all access to URLs
-having an URL ending on .xxx.
-
-:::{code-block} none
-set service webproxy domain-block vyos.net
-:::
-```
-
-
-```{cfgcmd} set service webproxy domain-noncache \<domain\>
-
-Allow access to sites in a domain without retrieving them from the Proxy
-cache. Specifying "vyos.net" will allow access to vyos.net but the pages
-accessed will not be cached. It useful for working around problems with
-"If-Modified-Since" checking at certain sites.
-
-:::{code-block} none
-set service webproxy domain-noncache vyos.net
-:::
-```
-
-
-```{cfgcmd} set service webproxy listen-address \<address\>
-
-Specifies proxy service listening address. The listen address is the IP
-address on which the web proxy service listens for client requests.
-
-For security, the listen address should only be used on internal/trusted
-networks!
-
-:::{code-block} none
-set service webproxy listen-address 192.0.2.1
-:::
-```
-
-
-```{cfgcmd} set service webproxy listen-address \<address\> disable-transparent
-
-Disables web proxy transparent mode at a listening address.
-
-In transparent proxy mode, all traffic arriving on port 80 and destined for
-the Internet is automatically forwarded through the proxy. This allows
-immediate proxy forwarding without configuring client browsers.
-
-Non-transparent proxying requires that the client browsers be configured with
-the proxy settings before requests are redirected. The advantage of this is
-that the client web browser can detect that a proxy is in use and can behave
-accordingly. In addition, web-transmitted malware can sometimes be blocked by
-a non-transparent web proxy, since they are not aware of the proxy settings.
-
-:::{code-block} none
-set service webproxy listen-address 192.0.2.1 disable-transparent
-:::
-```
-
-
-```{cfgcmd} set service webproxy listen-address \<address\> port \<port\>
-
-Sets the listening port for a listening address. This overrides the default
-port of 3128 on the specific listen address.
-
-:::{code-block} none
-set service webproxy listen-address 192.0.2.1 port 8080
-:::
-```
-```{cfgcmd} set service webproxy reply-block-mime \<mime\>
-
-Used to block a specific mime-type.
-
-:::{code-block} none
-# block all PDFs
-set service webproxy reply-block-mime application/pdf
-:::
-```
-```{cfgcmd} set service webproxy reply-body-max-size \<size\>
-
-Specifies the maximum size of a reply body in KB, used to limit the reply
-size.
-
-All reply sizes are accepted by default.
-
-:::{code-block} none
-set service webproxy reply-body-max-size 2048
-:::
-```
-
-
-```{cfgcmd} set service webproxy safe-ports \<port\>
-
-Add new port to Safe-ports acl. Ports included by default in Safe-ports acl:
-21, 70, 80, 210, 280, 443, 488, 591, 777, 873, 1025-65535
-```
-
-
-```{cfgcmd} set service webproxy ssl-safe-ports \<port\>
-
-Add new port to SSL-ports acl. Ports included by default in SSL-ports acl:
-443
-```
-
-### Authentication
-
-The embedded Squid proxy can use LDAP to authenticate users against a company
-wide directory. The following configuration is an example of how to use Active
-Directory as authentication backend. Queries are done via LDAP.
-
-```{cfgcmd} set service webproxy authentication children \<number\>
-
-Maximum number of authenticator processes to spawn. If you start too few
-Squid will have to wait for them to process a backlog of credential
-verifications, slowing it down. When password verifications are done via a
-(slow) network you are likely to need lots of authenticator processes.
-
-This defaults to 5.
-
-:::{code-block} none
-set service webproxy authentication children 10
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication credentials-ttl \<time\>
-
-Specifies how long squid assumes an externally validated username:password
-pair is valid for - in other words how often the helper program is called for
-that user. Set this low to force revalidation with short lived passwords.
-
-Time is in minutes and defaults to 60.
-
-:::{code-block} none
-set service webproxy authentication credentials-ttl 120
-:::
-```
-```{cfgcmd} set service webproxy authentication method \<ldap\>
-
-Proxy authentication method, currently only LDAP is supported.
-
-:::{code-block} none
-set service webproxy authentication method ldap
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication realm
-
-Specifies the protection scope (aka realm name) which is to be reported to
-the client for the authentication scheme. It is commonly part of the text
-the user will see when prompted for their username and password.
-
-:::{code-block} none
-set service webproxy authentication realm "VyOS proxy auth"
-:::
-```
-
-#### LDAP
-
-```{cfgcmd} set service webproxy authentication ldap base-dn \<base-dn\>
-
-Specifies the base DN under which the users are located.
-
-:::{code-block} none
-set service webproxy authentication ldap base-dn DC=vyos,DC=net
-:::
-```
-```{cfgcmd} set service webproxy authentication ldap bind-dn \<bind-dn\>
-
-The DN and password to bind as while performing searches.
-
-:::{code-block} none
-set service webproxy authentication ldap bind-dn CN=proxyuser,CN=Users,DC=vyos,DC=net
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap filter-expression \<expr\>
-
-LDAP search filter to locate the user DN. Required if the users are in a
-hierarchy below the base DN, or if the login name is not what builds the user
-specific part of the users DN.
-
-The search filter can contain up to 15 occurrences of %s which will be
-replaced by the username, as in "uid=%s" for {rfc}`2037` directories. For a
-detailed description of LDAP search filter syntax see {rfc}`2254`.
-
-:::{code-block} none
-set service webproxy authentication ldap filter-expression (cn=%s)
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap password \<password\>
-
-The DN and password to bind as while performing searches. As the password
-needs to be printed in plain text in your Squid configuration it is strongly
-recommended to use a account with minimal associated privileges. This to limit
-the damage in case someone could get hold of a copy of your Squid
-configuration file.
-
-:::{code-block} none
-set service webproxy authentication ldap password vyos
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap persistent-connection
-
-Use a persistent LDAP connection. Normally the LDAP connection is only open
-while validating a username to preserve resources at the LDAP server. This
-option causes the LDAP connection to be kept open, allowing it to be reused
-for further user validations.
-
-Recommended for larger installations.
-
-:::{code-block} none
-set service webproxy authentication ldap persistent-connection
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap port \<port\>
-
-Specify an alternate TCP port where the ldap server is listening if other than
-the default LDAP port 389.
-
-:::{code-block} none
-set service webproxy authentication ldap port 389
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap server \<server\>
-
-Specify the LDAP server to connect to.
-
-:::{code-block} none
-set service webproxy authentication ldap server ldap.vyos.net
-:::
-```
-```{cfgcmd} set service webproxy authentication ldap use-ssl
-
-Use TLS encryption.
-
-:::{code-block} none
-set service webproxy authentication ldap use-ssl
-:::
-```
-```{cfgcmd} set service webproxy authentication ldap username-attribute \<attr\>
-
-Specifies the name of the DN attribute that contains the username/login.
-Combined with the base DN to construct the users DN when no search filter is
-specified (filter-expression).
-
-Defaults to 'uid'
-
-:::{note}
-This can only be done if all your users are located directly under
-the same position in the LDAP tree and the login name is used for naming
-each user object. If your LDAP tree does not match these criterias or if you
-want to filter who are valid users then you need to use a search filter to
-search for your users DN (filter-expression).
-:::
-
-:::{code-block} none
-set service webproxy authentication ldap username-attribute uid
-:::
-```
-
-
-```{cfgcmd} set service webproxy authentication ldap version \<2 | 3\>
-
-LDAP protocol version. Defaults to 3 if not specified.
-
-:::{code-block} none
-set service webproxy authentication ldap version 2
-:::
-```
-
-### URL filtering
-
-```{include} /_include/need_improvement.txt
-```
-```{cfgcmd} set service webproxy url-filtering disable
-
-Disables web filtering without discarding configuration.
-
-:::{code-block} none
-set service webproxy url-filtering disable
-:::
-```
-
-## Operation
-
-```{include} /_include/need_improvement.txt
-```
-
-### Filtering
-#### Update
-
-If you want to use existing blacklists you have to create/download a database
-first. Otherwise you will not be able to commit the config changes.
-
-```{opcmd} update webproxy blacklists
-
-Download/Update complete blacklist
-
-:::{code-block} none
-vyos@vyos:~$ update webproxy blacklists
-Warning: No url-filtering blacklist installed
-Would you like to download a default blacklist? [confirm][y]
-Connecting to ftp.univ-tlse1.fr (193.49.48.249:21)
-blacklists.gz 100% |*************************************************************************************************************| 17.0M 0:00:00 ETA
-Uncompressing blacklist...
-Checking permissions...
-Skip link for [ads] -> [publicite]
-Building DB for [adult/domains] - 2467177 entries
-Building DB for [adult/urls] - 67798 entries
-Skip link for [aggressive] -> [agressif]
-Building DB for [agressif/domains] - 348 entries
-Building DB for [agressif/urls] - 36 entries
-Building DB for [arjel/domains] - 69 entries
-...
-Building DB for [webmail/domains] - 374 entries
-Building DB for [webmail/urls] - 9 entries
-The webproxy daemon must be restarted
-Would you like to restart it now? [confirm][y]
-[ ok ] Restarting squid (via systemctl): squid.service.
-vyos@vyos:~$
-:::
-```
-```{opcmd} update webproxy blacklists category \<category\>
-
-Download/Update partial blacklist.
-
-Use tab completion to get a list of categories.
-```
-
-- To auto update the blacklist files
-
- `set service webproxy url-filtering squidguard auto-update update-hour 23`
-
-- To configure blocking add the following to the configuration
-
- `set service webproxy url-filtering squidguard block-category ads`
-
- `set service webproxy url-filtering squidguard block-category malware`
-
-#### Bypassing the webproxy
-
-```{include} /_include/need_improvement.txt
-```
-
-Some services don't work correctly when being handled via a web proxy.
-So sometimes it is useful to bypass a transparent proxy:
-
-- To bypass the proxy for every request that is directed to a specific
- destination:
-
- `set service webproxy whitelist destination-address 198.51.100.33`
-
- `set service webproxy whitelist destination-address 192.0.2.0/24`
-
-- To bypass the proxy for every request that is coming from a specific source:
-
- `set service webproxy whitelist source-address 192.168.1.2`
-
- `set service webproxy whitelist source-address 192.168.2.0/24`
-
- (This can be useful when a called service has many and/or often changing
- destination addresses - e.g. Netflix.)
-
-## Examples
-
-```none
-vyos@vyos# show service webproxy
- authentication {
- children 5
- credentials-ttl 60
- ldap {
- base-dn DC=example,DC=local
- bind-dn CN=proxyuser,CN=Users,DC=example,DC=local
- filter-expression (cn=%s)
- password Qwert1234
- server ldap.example.local
- username-attribute cn
- }
- method ldap
- realm "VyOS Webproxy"
- }
- cache-size 100
- default-port 3128
- listen-address 192.168.188.103 {
- disable-transparent
- }
-```
-
-[squid]: http://www.squid-cache.org/
-[squidguard]: http://www.squidguard.org/