Udhcpc
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 in the main networking article.
The default configuration of udhcpc
may be overwritten by /etc/udhcpc/udhcpc.conf
Authorized key:value pairs are:
key | default value | possible values |
---|---|---|
NO_GATEWAY | - | <list of iface names> |
IF_METRIC | - | <metric value> |
IF_PEER_DNS | yes | <anything but yes> |
RESOLV_CONF | /etc/resolv.conf | no ; NO ; - |
NO_DNS | - | <list of iface names> |
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.