Udhcpc: Difference between revisions
CarloMonte (talk | contribs) No edit summary |
(use path, cmd & cat template) |
||
Line 1: | Line 1: | ||
{{Expand|Please help us expand this article by contributing.}} | {{Expand|Please help us expand this article by contributing.}} | ||
You may want to customize the behavior of the default DHCP client (<code>udhcpc</code> from busybox), which is called by | You may want to customize the behavior of the default DHCP client (<code>udhcpc</code> from busybox), which is called by {{path|/sbin/ifup}} by having "<code>dhcp</code>" in {{path|/etc/network/interfaces}}. | ||
The default behavior is driven by the script | The default behavior is driven by the script {{path|/usr/share/udhcpc/default.script}} | ||
Entries in | 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 | iface eth0 inet dhcp | ||
hostname myhostname | hostname myhostname | ||
}} | |||
will set these parameters on the command line:<br> | 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. | The hostname will send the DHCP option to the server to tell the server the name of this client. | ||
Line 19: | Line 20: | ||
The documentation for <code>udhcpc</code> can be found in [https://udhcp.busybox.net/README.udhcpc the busybox udhcpc readme file]<br> | The documentation for <code>udhcpc</code> can be found in [https://udhcp.busybox.net/README.udhcpc the busybox udhcpc readme file]<br> | ||
You can add arbitrary command line parameters to the <code>udhcpc_opts</code> setting in | 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 | 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 33: | Line 34: | ||
|- | |- | ||
| RESOLV_CONF | | RESOLV_CONF | ||
| /etc/resolv.conf | | {{path|/etc/resolv.conf}} | ||
| no ; NO ; - | | no ; NO ; - | ||
| do not overwrite or alternative path for resolv.conf | | do not overwrite or alternative path for {{path|resolv.conf}} | ||
|- | |- | ||
| NO_DNS | | NO_DNS | ||
| - | | - | ||
| <list of iface names> | | <list of iface names> | ||
| Prevent overwriting of resolv.conf on a per-interface basis | | Prevent overwriting of {{path|resolv.conf}} on a per-interface basis | ||
|- | |- | ||
| NO_GATEWAY | | NO_GATEWAY | ||
Line 58: | Line 59: | ||
|} | |} | ||
Example | 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 | 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. They must be set as '''executable''' by root, e.g. <code>chmod 744</code> | ||
As an example, | 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 iproute2 package, rather than busybox's "ip", to change mtu | |||
/sbin/ip route replace $r mtu 1492 | |||
</nowiki>}} | |||
<b>Hack alert:</b> | <b>Hack alert:</b> | ||
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>': | 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>': | ||
{{cmd|# /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. | 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. |
Revision as of 21:55, 16 September 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:
Contents of /etc/network/interfaces
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.
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.
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
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.