1 # odhcpd - Embedded DHCP/DHCPv6/RA Server & Relay 2 3 ## Abstract 4 5 odhcpd is a daemon for serving and relaying IP management protocols to 6 configure clients and downstream routers. It tries to follow the RFC 6204 7 requirements for IPv6 home routers. 8 9 odhcpd provides server services for DHCP, RA, stateless and stateful DHCPv6, 10 prefix delegation and can be used to relay RA, DHCPv6 and NDP between routed 11 (non-bridged) interfaces in case no delegated prefixes are available. 12 13 14 ## Features 15 16 1. Router Discovery support (solicitations and advertisements) with 2 modes: 17 * server: RD server for slave interfaces 18 * automatic detection of prefixes, delegated prefix and default routes, MTU 19 * automatic reannouncement when changes to prefixes or routes occur 20 21 * relay: RD relay between master and slave interfaces 22 * support for rewriting announced DNS-server addresses in relay mode 23 24 2. DHCPv6-support with 2 modes of operation 25 * server: stateless, stateful and PD-server mode 26 * stateless and stateful address assignment 27 * prefix delegation support 28 * dynamic reconfiguration in case prefixes change 29 * hostname detection and hosts-file creation 30 31 * relay: mostly standards-compliant DHCPv6-relay 32 * support for rewriting announced DNS-server addresses 33 34 3. DHCPv4-support 35 * server: stateless and stateful mode 36 37 4. Proxy for Neighbor Discovery messages (solicitations and advertisements) 38 * support for auto-learning routes to the local routing table 39 * support for marking interfaces "external" not proxying NDP for them 40 and only serving NDP for DAD and for traffic to the router itself 41 [Warning: you should provide additional firewall rules for security] 42 43 5. IPv6 PxE Support 44 45 46 ## Compiling 47 48 odhcpd uses cmake: 49 * To prepare a Makefile use: `cmake .` 50 * To build / install use: `make` / `make install` afterwards. 51 * To build DEB or RPM packages use: `make package` afterwards. 52 53 54 ## Configuration 55 56 odhcpd uses a UCI configuration file in `/etc/config/dhcp` for configuration 57 and may also receive information from ubus 58 59 60 ### Section of type odhcpd 61 62 | Option | Type |Default| Description | 63 | :------------ | :---- | :---- | :---------- | 64 | legacy | bool | 0 | Enable DHCPv4 if start but no dhcpv4 option set | 65 | maindhcp | bool | 0 | Use odhcpd as the main DHCPv4 service | 66 | leasefile | string| | DHCP/v6 lease/hostfile | 67 | leasetrigger | string| | Lease trigger script | 68 | hostsfile | string| | DHCP/v6 hostfile | 69 | loglevel |integer| 6 | Syslog level priority (0-7) | 70 | piofolder |string | | Folder to store IPv6 prefix information (to detect stale prefixes, see RFC9096, §3.5) | 71 72 73 ### Sections of type dhcp (configure DHCP / DHCPv6 / RA / NDP service) 74 75 | Option | Type |Default| Description | 76 | :-------------------- | :---- | :---- | :---------- | 77 | interface |string |`<name of UCI section>`| logical OpenWrt interface | 78 | ifname |string |`<resolved from logical>`| physical network interface | 79 | networkid |string |same as ifname| compat. alias for ifname | 80 | master |bool | 0 | is a master interface for relaying | 81 | ra |string |disabled| Router Advert service [disabled\|server\|relay\|hybrid] | 82 | dhcpv6 |string |disabled| DHCPv6 service [disabled\|server\|relay\|hybrid] | 83 | dhcpv4 |string |disabled| DHCPv4 service [disabled\|server] | 84 | ndp |string |disabled| Neighbor Discovery Proxy [disabled\|relay\|hybrid] | 85 | dynamicdhcp |bool | 1 | Dynamically create leases for DHCPv4 and DHCPv6 | 86 | dhcpv4_forcereconf |bool | 0 | Force reconfiguration by sending force renew message even if the client did not include the force renew nonce capability option (RFC6704) | 87 | dhcpv6_assignall |bool | 1 | Assign all viable DHCPv6 addresses in statefull mode; if disabled only the DHCPv6 address having the longest preferred lifetime is assigned | 88 | dhcpv6_hostidlength |integer| 12 | Host ID length of dynamically created leases, allowed values: 12 - 64 (bits). | 89 | dhcpv6_na |bool | 1 | DHCPv6 stateful addressing hands out IA_NA - Internet Address - Network Address | 90 | dhcpv6_pd |bool | 1 | DHCPv6 stateful addressing hands out IA_PD - Internet Address - Prefix Delegation | 91 | dhcpv6_pd_min_len |integer| - | Minimum prefix length to delegate with IA_PD (value is adjusted if needed to be greater than the interface prefix length). Range [1,62] | 92 | router |list |`<local address>`| Routers to announce, accepts IPv4 only | 93 | dns |list |`<local address>`| DNS servers to announce, accepts IPv4 and IPv6 | 94 | dnr |list |disabled| Encrypted DNS servers to announce, `<priority> <domain name> [<comma separated IP addresses> <SvcParams (key=value)>...]` | 95 | dns_service |bool | 1 | Announce the address of interface as DNS service if the list of dns is empty | 96 | domain |list |`<local search domain>`| Search domains to announce | 97 | leasetime |string | 12h | DHCPv4 address leasetime | 98 | start |integer| 100 | DHCPv4 pool start | 99 | limit |integer| 150 | DHCPv4 pool size | 100 | max_preferred_lifetime|string | 45m | Upper limit for the preferred lifetime for a prefix | 101 | max_valid_lifetime |string | 90m | Upper limit for the valid lifetime for a prefix | 102 | ra_default |integer| 0 | Override default route - 0: default, 1: ignore no public address, 2: ignore all | 103 | ra_flags |list |other-config| List of RA flags to be advertised in RA messages [managed-config\|other-config\|home-agent\|none] | 104 | ra_slaac |bool | 1 | Announce slaac for a prefix | 105 | ra_offlink |bool | 0 | Announce prefixes off-link | 106 | ra_preference |string | medium| Route(r) preference [medium\|high\|low] | 107 | ra_maxinterval |integer| 600 | Maximum time allowed between sending unsolicited RA | 108 | ra_mininterval |integer| 200 | Minimum time allowed between sending unsolicited RA | 109 | ra_lifetime |integer| 2700 | Value to be placed in Router Lifetime field of RA. Not recommended to be more than 2700 (RFC9096). | 110 | ra_reachabletime |integer| 0 | Reachable Time in milliseconds to be advertised in RA messages | 111 | ra_retranstime |integer| 0 | Retransmit Time in milliseconds to be advertised in RA messages | 112 | ra_hoplimit |integer| 0 | Current hoplimit to be advertised in RA messages | 113 | ra_mtu |integer| - | MTU to be advertised in RA messages | 114 | ra_dns |bool | 1 | Announce DNS configuration in RA messages (RFC8106) | 115 | ra_pref64 |string | - | Announce PREF64 option for NAT64 prefix (RFC8781) [IPv6 prefix] | 116 | ndproxy_routing |bool | 1 | Learn routes from NDP | 117 | ndproxy_slave |bool | 0 | NDProxy external slave | 118 | ndp_from_link_local |bool | 1 | Use link-local source addresses for NDP operations (RFC 4861, §4.2 compliance) and macOS compatibility | 119 | prefix_filter |string |`::/0` | Only advertise on-link prefixes within the provided IPv6 prefix; others are filtered out. [IPv6 prefix] | 120 | ntp |list |`<local address>`| NTP servers to announce accepts IPv4 and IPv6 | 121 122 123 ### Sections of type host (static leases) 124 | Option | Type |Default| Description | 125 | :-------------------- | :---- | :---- | :---------- | 126 | ip |string |(none) | IPv4 host address | 127 | mac |list\|string|(none) | HexadecimalMACaddress(es) | 128 | duid |list\|string|(none) | Hexadecimal DUID(s), or DUID%IAID(s) | 129 | hostid |string |(none) | IPv6hostidentifier | 130 | name |string |(none) | Hostname | 131 | leasetime |string |(none) | DHCPv4/v6leasetime | 132 133 134 ### Sections of type boot6 135 | Option | Type |Required|Description | 136 | :------------ | :---- | :---- | :---------- | 137 | url |string | yes | e.g. `tftp://[fd11::1]/pxe.efi` | 138 | arch |integer| no | the arch code. `07` is EFI. If not present, this boot6 will be the default. | 139 140 141 ## ubus Interface 142 143 odhcpd currently exposes the following methods under the `dhcp` object path: 144 145 | Method | Arguments | Description | 146 | :------------ | :------------ | :---------- | 147 | `ipv4leases` | `none` | Lists all currently active DHCPv4 leases per interface | 148 | `ipv6leases` | `none` | Lists all currently active DHCPv6 leases per interface | 149 | `ipv6ra` | `none` | Lists announced IPv6 prefixes per interface | 150 | `add_lease` | options as in the cfg `host` section | Creates a new static lease, the arguments need to be formatted as a valid JSON string | 151 152 These can be called by running e.g. `ubus call dhcp ipv6leases` on your OpenWrt 153 device. 154 155 odhcpd currently broadcasts the following events via ubus: 156 157 | Name | Parameters | Description | 158 | :------------ | :---------------------------- | :------------ | 159 | `dhcp.ack` | `mac,ip,name,interface` | A new DHCPv4 lease has been created | 160 | `dhcp.release`| `mac,ip,name,interface` | A DHCPv4 lease has been released by a client | 161 | `dhcp.expire` | `mac,ip,name,interface` | A DHCPv4 lease has expired | 162 163 These can be observed by running e.g. `ubus listen dhcp` on your OpenWrt device.
This page was automatically generated by LXR 0.3.1. • OpenWrt