Udhcpc: Difference between revisions

From Alpine Linux
mNo edit summary
No edit summary
Line 21: Line 21:
You can add arbitrary command line parameters to the <code>udhcpc_opts</code> setting in <code>/etc/network/interfaces</code>. See the example of <code>udhcpc_opts</code> in [[Configure Networking#IPv4 DHCP Configuration|the main networking article]].
You can add arbitrary command line parameters to the <code>udhcpc_opts</code> setting in <code>/etc/network/interfaces</code>. See the example of <code>udhcpc_opts</code> in [[Configure Networking#IPv4 DHCP Configuration|the main networking article]].


The default configuration of <code>udhcpc</code> may be overridden by <code>/etc/udhcpc/udhcpc.conf</code>
The default configuration of <code>udhcpc</code> may be overridden by <code>/etc/udhcpc/udhcpc.conf</code>. Please see <code>/usr/share/udhcpc/default.script</code> for how the values are used.


Authorized key:value pairs for <code>udhcpc.conf</code> are:
Authorized key:value pairs for <code>udhcpc.conf</code> are:
Line 30: Line 30:
| default value
| default value
| possible values
| possible values
| meaning
|-
| RESOLV_CONF
| /etc/resolv.conf
| no ; NO ; -
| do not overwrite or alternative path for resolv.conf
|-
| NO_DNS
| -
| <list of iface names>
| Prevent overwriting of resolv.conf on a per-interface basis
|-
|-
| NO_GATEWAY
| NO_GATEWAY
| -
| -
| <list of iface names>
| <list of iface names>
| List of interfaces where DHCP routes are ignored
|-
|-
| IF_METRIC
| IF_METRIC
| -
| -
| <metric value>
| <metric value>
| offset value for routing metric
|-
|-
| IF_PEER_DNS
| IF_PEER_DNS
| yes
| yes
| <anything but yes>
| <anything but yes>
|-
| please use RESOLV_CONF or NO_DNS instead
| RESOLV_CONF
| /etc/resolv.conf
| no ; NO ; -
|-
| NO_DNS
| -
| <list of iface names>
|}
|}



Revision as of 06:41, 16 August 2023

This material needs expanding ...

Please help us expand this article by contributing.

You may want to customize the behavior of the default DHCP client (udhcpc from busybox), which is called by /sbin/ifup by having "dhcp" in /etc/network/interfaces.

The default behavior is driven by the script /usr/share/udhcpc/default.script

Entries in /etc/network/interfaces for DHCP interfaces will drive the udhcpc command line. For example:

auto eth0
iface eth0 inet dhcp
        hostname myhostname

will set these parameters on the command line:

-i eth0 -x hostname:myhostname

The hostname will send the DHCP option to the server to tell the server the name of this client.

The documentation for udhcpc can be found in the busybox udhcpc readme file

You can add arbitrary command line parameters to the udhcpc_opts setting in /etc/network/interfaces. See the example of udhcpc_opts in the main networking article.

The default configuration of udhcpc may be overridden by /etc/udhcpc/udhcpc.conf. Please see /usr/share/udhcpc/default.script for how the values are used.

Authorized key:value pairs for udhcpc.conf are:

key default value possible values meaning
RESOLV_CONF /etc/resolv.conf no ; NO ; - do not overwrite or alternative path for resolv.conf
NO_DNS - <list of iface names> Prevent overwriting of resolv.conf on a per-interface basis
NO_GATEWAY - <list of iface names> List of interfaces where DHCP routes are ignored
IF_METRIC - <metric value> offset value for routing metric
IF_PEER_DNS yes <anything but yes> please use RESOLV_CONF or NO_DNS instead

Example /etc/udhcpc/udhcpc.conf:

RESOLV_CONF="no" # Prevents overwriting of /etc/resolv.conf

Custom scripts can be added as /etc/udhcpc/pre-* and /etc/udhcpc/post-* to be run before/after deconfig/renew/bound DHCP events. They must be set as executable by root, e.g. chmod 744

As an example, /etc/udhcpc/post-bound/mtu could contain, to change the interface MTU from the default (1500) to 1492, which is useful if on ADSL that uses PPPoE (which uses 8 bytes for its own header):

r=$(/sbin/ip route | grep ^default | head -n 1)
# Needs iproute2 package, rather than busybox's "ip", to change mtu
/sbin/ip route replace $r mtu 1492

Hack alert: I needed to restart my firewall (which replaces the iptables script from Alpine) when the client binds to a new IP, so I added the following line in the function bound(), right after 'resolvconf':

 /etc/init.d/iptables reload

The reload drops all firewall rules, re-acquires the Internal and external IPs, and re-writes the rules. I'm sure there is a better way.