Udhcpc: Difference between revisions

From Alpine Linux
mNo edit summary
m (changed heading and removed empty line)
 
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Expand|Please help us expand this article by contributing.}}
{{DISPLAYTITLE:udhcpc}}
{{Main|Configure Networking}}
This page documents the working of default DHCP client <code>udhcpc</code> from Busybox.


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.
== Configuration ==


The default behavior is driven by the script /usr/share/udhcpc/default.script
The default DHCP client <code>udhcpc</code> from busybox gets invoked by the networking scripts {{path|/sbin/ifup}} and {{path|/sbin/ifdown}} when "<code>dhcp</code>" is added to the interface name in the file {{path|/etc/network/interfaces}}.  


Its default configuration may be overwritten by /etc/udhcpc/udhcpc.conf
The default behavior of udhcpc is driven by the script {{path|/usr/share/udhcpc/default.script}}


Authorized key:value pairs are:
Entries in {{path|/etc/network/interfaces}} for DHCP interfaces will drive the <code>udhcpc</code> command line. For example:<br>
{{cat|/etc/network/interfaces|auto eth0
iface eth0 inet dhcp
        hostname myhostname
}}
 
will set these parameters on the command line:<br>
 
{{cmd|udhcpc -i eth0 -x hostname:myhostname}}
 
The hostname will send the DHCP option to the server to tell the server the name of this client.
 
You can add arbitrary command line parameters to the <code>udhcpc_opts</code> setting in {{path|/etc/network/interfaces}}. 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 {{path|/etc/udhcpc/udhcpc.conf}}. Please see {{path|/usr/share/udhcpc/default.script}} for how the values are used.
 
{{path|udhcpc.conf}} accepts the following key:value pairs:


{| cellpadding="15" border="1" class="wikitable"
{| cellpadding="15" border="1" class="wikitable"
Line 14: Line 33:
| default value
| default value
| possible values
| possible values
| meaning
|-
| RESOLV_CONF
| {{path|/etc/resolv.conf}}
| no ; NO ; -
| do not overwrite or alternative path for {{path|resolv.conf}}
|-
| NO_DNS
| -
| <list of iface names>
| Prevent overwriting of {{path|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>
|}
|}


Example /etc/udhcpc/udhcpc.conf:
Example {{path|/etc/udhcpc/udhcpc.conf}}:
 
{{cat|/etc/udhcpc/udhcpc.conf|RESOLV_CONF{{=}}"no" # Prevents overwriting of /etc/resolv.conf}}
 
Custom scripts can be added as {{path|/etc/udhcpc/pre-*}} and {{path|/etc/udhcpc/post-*}} to be run before/after deconfig/renew/bound DHCP events. The custom scripts must be set as '''executable''' by root, e.g. <code>chmod 744</code>. Refer an example [[#Change MTU for ADSL|custom script]]
 
== Troubleshooting ==
 
{{Todo|The below section need testing and confirmation. Please help contributing.}}
 
=== Change MTU for ADSL ===
 
As an example, {{path|/etc/udhcpc/post-bound/mtu}} could contain, to change the interface MTU from the default (1500) to 1492, which is useful if [https://en.wikipedia.org/wiki/Maximum_transmission_unit on ADSL that uses PPPoE] (which uses 8 bytes for its own header):
 
{{cmd|<nowiki>r=$(/sbin/ip route | grep ^default | head -n 1)
# Needs {{pkg|iproute2}} package, rather than busybox's "ip", to change mtu
/sbin/ip route replace $r mtu 1492
</nowiki>}}


RESOLV_CONF="no" # Prevents overwriting of /etc/resolv.conf
I needed to restart my firewall (which replaces the <code>iptables</code> script from Alpine) when the client binds to a new IP, so I added the following line in the function <code>bound()</code>, right after '<code>resolvconf</code>':


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 marked as '''executable''' by root, e.g. chmod 744
{{cmd|# rc-service iptables reload}}


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 [https://en.wikipedia.org/wiki/Maximum_transmission_unit on ADSL] (which uses 8 bytes):
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.


r=$(/sbin/ip route | grep ^default | head -n 1)
== See Also ==
# Needs iproute2 package, rather than busybox's "ip", to change mtu
[https://udhcp.busybox.net/README.udhcpc Busybox udhcpc Readme]
/sbin/ip route replace $r mtu 1492


[[Category:Networking]]
[[Category:Networking]]
[[Category:Embedded Systems]]
[[Category:Embedded Systems]]

Latest revision as of 14:56, 17 October 2024


This page documents the working of default DHCP client udhcpc from Busybox.

Configuration

The default DHCP client udhcpc from busybox gets invoked by the networking scripts /sbin/ifup and /sbin/ifdown when "dhcp" is added to the interface name in the file /etc/network/interfaces.

The default behavior of udhcpc 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:

Contents of /etc/network/interfaces

auto eth0 iface eth0 inet dhcp hostname myhostname

will set these parameters on the command line:

udhcpc -i eth0 -x hostname:myhostname

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

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.

udhcpc.conf accepts the following key:value pairs:

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:

Contents of /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. The custom scripts must be set as executable by root, e.g. chmod 744. Refer an example custom script

Troubleshooting

Todo: The below section need testing and confirmation. Please help contributing.


Change MTU for ADSL

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 {{pkg|iproute2}} package, rather than busybox's "ip", to change mtu /sbin/ip route replace $r mtu 1492

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':

# rc-service 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.

See Also

Busybox udhcpc Readme