mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
Merge pull request #159 from jjakob/master
Draft: Edit DHCPv4/v6 server documentation, ...
This commit is contained in:
commit
c9d1f7a6ee
@ -9,39 +9,33 @@ VyOS uses ISC DHCPd for both IPv4 and IPv6 address assignment.
|
|||||||
DHCP Server
|
DHCP Server
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Multiple DHCP Servers can be run from a single machine. Each DHCP service is
|
The network topology is declared by shared-network-name and the subnet declarations.
|
||||||
identified by a ``shared-network-name``.
|
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.
|
||||||
|
|
||||||
Basic Example
|
Basic Example
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
We are offering address space in the 192.0.2.0/24 network, which is
|
In this example, we are offering address space in the 192.0.2.0/24 network.
|
||||||
physically connected on eth1, and pppoe0 is our connection to the internet.
|
We are using the network name `dhcpexample`.
|
||||||
We are using the network name ``<name>``.
|
|
||||||
|
|
||||||
Prerequisites:
|
|
||||||
|
|
||||||
* Configuring PPPoE interface is assumed to be done already, and appears
|
|
||||||
on `pppoe0`
|
|
||||||
* Interface ``eth1`` is configured to be connected to our DHCP subnet
|
|
||||||
192.0.2.0/24 by assigning e.g. address 192.0.2.1/24.
|
|
||||||
|
|
||||||
Multiple DHCP ranges can be defined and may contain holes.
|
|
||||||
|
|
||||||
.. code-block:: none
|
.. code-block:: none
|
||||||
|
|
||||||
set service dhcp-server shared-network-name '<name>' authoritative
|
set service dhcp-server shared-network-name dhcpexample authoritative
|
||||||
set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 default-router 192.0.2.1
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 default-router 192.0.2.1
|
||||||
set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 dns-server 192.0.2.1
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 dns-server 192.0.2.1
|
||||||
set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 lease 86400
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 lease 86400
|
||||||
set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 range 0 start 192.0.2.100
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 range 0 start 192.0.2.100
|
||||||
set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 range 0 stop 192.0.2.199
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 range 0 stop 192.0.2.199
|
||||||
|
|
||||||
The generated config will look like:
|
The generated config will look like:
|
||||||
|
|
||||||
.. code-block:: none
|
.. code-block:: none
|
||||||
|
|
||||||
vyos@vyos# show service dhcp-server shared-network-name '<name>'
|
vyos@vyos# show service dhcp-server shared-network-name dhcpexample
|
||||||
authoritative
|
authoritative
|
||||||
subnet 192.0.2.0/24 {
|
subnet 192.0.2.0/24 {
|
||||||
default-router 192.0.2.1
|
default-router 192.0.2.1
|
||||||
@ -53,23 +47,22 @@ The generated config will look like:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Explanation
|
Explanation
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' authoritative
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample authoritative
|
||||||
|
|
||||||
This says that this device is the only DHCP server for this network. If other
|
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
|
devices are trying to offer DHCP leases, this machine will send 'DHCPNAK' to
|
||||||
any device trying to request an IP address that is
|
any device trying to request an IP address that is
|
||||||
not valid for this network.
|
not valid for this network.
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 default-router 192.0.2.1
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 default-router 192.0.2.1
|
||||||
|
|
||||||
This is a configuration parameter for the subnet, saying that as part of the
|
This is a configuration parameter for the subnet, saying that as part of the
|
||||||
response, tell the client that I am the default router for this network
|
response, tell the client that I am the default router for this network
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 dns-server 192.0.2.1
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 dns-server 192.0.2.1
|
||||||
|
|
||||||
This is a configuration parameter for the subnet, saying that as part of the
|
This is a configuration parameter for the subnet, saying that as part of the
|
||||||
response, tell the client that I am the DNS server for this network. If you
|
response, tell the client that I am the DNS server for this network. If you
|
||||||
@ -77,20 +70,20 @@ do not want to run a DNS server, you could also provide one of the public
|
|||||||
DNS servers, such as google's. You can add multiple entries by repeating the
|
DNS servers, such as google's. You can add multiple entries by repeating the
|
||||||
line.
|
line.
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 lease 86400
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 lease 86400
|
||||||
|
|
||||||
Assign the IP address to this machine for 24 hours. It is unlikely you'd need
|
Assign the IP address to this machine for 24 hours. It is unlikely you'd need
|
||||||
to shorten this period, unless you are running a network with lots of devices
|
to shorten this period, unless you are running a network with lots of devices
|
||||||
appearing and disappearing.
|
appearing and disappearing.
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 range 0 start 192.0.2.100
|
|
||||||
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 range 0 start 192.0.2.100
|
||||||
|
|
||||||
Make a range of addresses available for clients starting from .100 [...]
|
Make a range of addresses available for clients starting from .100 [...]
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 range 0 stop 192.0.2.199
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 range 0 stop 192.0.2.199
|
||||||
|
|
||||||
[...] and ending at .199
|
|
||||||
|
|
||||||
|
[...] and ending at .199.
|
||||||
|
|
||||||
Failover
|
Failover
|
||||||
--------
|
--------
|
||||||
@ -115,7 +108,7 @@ A generic name referencing this sync service.
|
|||||||
.. cfgcmd:: set service dhcp-server shared-network-name 'LAN' subnet '192.0.2.0/24' failover status '{primary|secondary}'
|
.. cfgcmd:: set service dhcp-server shared-network-name 'LAN' subnet '192.0.2.0/24' failover status '{primary|secondary}'
|
||||||
|
|
||||||
The primary and secondary statements determines whether the server is primary
|
The primary and secondary statements determines whether the server is primary
|
||||||
r secondary.
|
or secondary.
|
||||||
|
|
||||||
.. note:: In order for the primary and the secondary DHCP server to keep
|
.. 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
|
their lease tables in sync, they must be able to reach each other on TCP
|
||||||
@ -134,16 +127,18 @@ Static mappings
|
|||||||
|
|
||||||
You can specify a static DHCP assignment on a per host basis. You will need the
|
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
|
MAC address of the station and your desired IP address. The address must be
|
||||||
inside your subnet definition but can be outside of your range sttement.
|
inside the subnet definition but can be outside of the range statement.
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 static-mapping <host> ip-address 192.0.2.10
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping static-mapping-01 mac-address ff:ff:ff:ff:ff:ff
|
||||||
|
|
||||||
Configure desired IPv4 address for your host referenced to as `host`.
|
Each host is uniquely identified by its MAC address.
|
||||||
|
|
||||||
.. cfgcmd:: set service dhcp-server shared-network-name '<name>' subnet 192.0.2.0/24 static-mapping <hodt> mac-address ff:ff:ff:ff:ff:ff
|
.. cfgcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping static-mapping-01 ip-address 192.0.2.10
|
||||||
|
|
||||||
Configure MAC address for your host referenced by as `host` used in this static
|
IP address to assign to this host. It must be inside the subnet in which it is defined but can be outside the dynamic range.
|
||||||
assignment.
|
If ip-address is not specified, an IP from the dynamic pool (as specified by ``range``) 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.
|
||||||
|
|
||||||
DHCP Options
|
DHCP Options
|
||||||
------------
|
------------
|
||||||
@ -170,6 +165,209 @@ 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
|
request where no full FQDN is passed. This option can be given multiple times
|
||||||
if you need multiple search domains (DHCP Option 119).
|
if you need multiple search domains (DHCP Option 119).
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
* - dns-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
|
||||||
|
* - 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.
|
||||||
|
|
||||||
|
Raw parameters
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Raw parameters can be passed to shared-network-name, subnet and static-mapping:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
set service dhcp-server shared-network-name dhcpexample shared-network-parameters
|
||||||
|
<text> Additional shared-network parameters for DHCP server.
|
||||||
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 subnet-parameters
|
||||||
|
<text> Additional subnet parameters for DHCP server.
|
||||||
|
set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping example static-mapping-parameters
|
||||||
|
<text> Additional static-mapping parameters for DHCP server.
|
||||||
|
Will be placed inside the "host" block of the mapping.
|
||||||
|
|
||||||
|
These parameters are passed as-is to isc-dhcp's dhcpd.conf under the configuration node they are defined in.
|
||||||
|
They are not validated so an error in the raw parameters won't be caught by vyos's scripts and will cause dhcpd to fail to start.
|
||||||
|
Always verify that the parameters are correct before commiting the configuration.
|
||||||
|
Refer to isc-dhcp's dhcpd.conf manual for more information:
|
||||||
|
https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcpdconf
|
||||||
|
|
||||||
|
Example
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. opcmd:: set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping example static-mapping-parameters "option domain-name-servers 192.0.2.11, 192.0.2.12;"
|
||||||
|
|
||||||
|
Override the static-mapping's dns-server with a custom one that will be sent only to this host.
|
||||||
|
|
||||||
|
Operation Mode
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. opcmd:: restart dhcp server
|
||||||
|
|
||||||
|
Restart the DHCP server
|
||||||
|
|
||||||
|
.. opcmd:: show dhcp server statistics
|
||||||
|
|
||||||
|
Show the DHCP server statistics:
|
||||||
|
|
||||||
|
.. code-block:: 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:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
vyos@vyos:~$ show dhcp server leases
|
||||||
|
IP address Hardware address State Lease start Lease expiration Remaining Pool Hostname
|
||||||
|
-------------- ------------------ ------- ------------------- ------------------- ---------- ----------- ---------
|
||||||
|
192.0.2.104 aa:bb:cc:dd:ee:ff active 2019/12/05 14:24:23 2019/12/06 02:24:23 6:05:35 dhcpexample test1
|
||||||
|
192.0.2.115 ab:ac:ad:ae:af:bf active 2019/12/05 18:02:37 2019/12/06 06:02:37 9:43:49 dhcpexample test2
|
||||||
|
|
||||||
|
.. hint:: Static mappings aren't shown. To show all states, use ``show dhcp server leases state all``.
|
||||||
|
|
||||||
|
.. opcmd:: show dhcp server leases pool <pool>
|
||||||
|
|
||||||
|
Show only leases in the specified pool.
|
||||||
|
|
||||||
|
.. 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)
|
||||||
|
|
||||||
DHCPv6 Server
|
DHCPv6 Server
|
||||||
=============
|
=============
|
||||||
@ -268,16 +466,16 @@ be created. The following example explains the process.
|
|||||||
**Example:**
|
**Example:**
|
||||||
|
|
||||||
* IPv6 address ``2001:db8::101`` shall be statically mapped
|
* IPv6 address ``2001:db8::101`` shall be statically mapped
|
||||||
* Device MAC address will be ``00:53:c5:b7:5e:23``
|
|
||||||
* Host specific mapping shall be named ``client1``
|
* Host specific mapping shall be named ``client1``
|
||||||
|
|
||||||
.. hint:: The MAC address identifier is defined by the last 4 byte of the
|
.. hint:: The identifier is the device's DUID: colon-separated hex list (as used by isc-dhcp option dhcpv6.client-id).
|
||||||
MAC address.
|
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.
|
||||||
|
|
||||||
.. code-block:: none
|
.. code-block:: 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-address 2001:db8::101
|
||||||
set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 identifier c5b75e23
|
set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 identifier 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
|
||||||
|
|
||||||
The configuration will look as follows:
|
The configuration will look as follows:
|
||||||
|
|
||||||
@ -294,12 +492,11 @@ The configuration will look as follows:
|
|||||||
}
|
}
|
||||||
static-mapping client1 {
|
static-mapping client1 {
|
||||||
ipv6-address 2001:db8::101
|
ipv6-address 2001:db8::101
|
||||||
identifier c5b75e23
|
identifier 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Operation Mode
|
Operation Mode
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
@ -315,6 +512,27 @@ To show the current status of the DHCPv6 server.
|
|||||||
|
|
||||||
Show statuses of all assigned leases:
|
Show statuses of all assigned leases:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
vyos@vyos:~$ show dhcpv6 server leases
|
||||||
|
IPv6 address State Last communication Lease expiration Remaining Type Pool IAID_DUID
|
||||||
|
------------- ------- -------------------- ------------------- ----------- ------------- ----- --------------------------------------------
|
||||||
|
2001:db8::101 active 2019/12/05 19:40:10 2019/12/06 07:40:10 11:45:21 non-temporary 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 non-temporary NET1 87:65:43:21:00:01:00:01:11:22:33:44:fa:fb:fc:fd:fe: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)
|
||||||
|
|
||||||
DHCP Relay
|
DHCP Relay
|
||||||
==========
|
==========
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user