Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
docs:guide-user:network:protocol.dhcp [2021/03/23 08:53] – [DHCP client scripts] add vgaeteradocs:guide-user:network:protocol.dhcp [2023/10/04 01:41] – [Providing ISP DNS with DHCP] update vgaetera
Line 1: Line 1:
 ====== DHCP configuration ====== ====== DHCP configuration ======
 See: See:
-[[docs:guide-user:network:ipv4:start#protocol_dhcp|DHCPv4 client]], +[[docs:guide-user:network:ipv4:configuration#protocol_dhcp|DHCP client]], 
-[[docs:guide-user:network:ipv6:start#protocol_dhcpv6|DHCPv6 client]]+[[docs:guide-user:network:ipv6:configuration#protocol_dhcpv6|DHCPv6 client]] 
 + 
 +===== Troubleshooting ===== 
 +<code bash> 
 +# Install packages  
 +opkg update 
 +opkg install tcpdump 
 + 
 +# Capture DHCP traffic 
 +tcpdump -evni any udp port 67 & \ 
 +sleep 5; \ 
 +killall -SIGUSR1 udhcpc; \ 
 +sleep 5; \ 
 +killall tcpdump 
 + 
 +# Capture DHCPv6 traffic 
 +tcpdump -evni any udp port 547 & \ 
 +sleep 5; \ 
 +killall -SIGUSR1 odhcp6c; \ 
 +sleep 5; \ 
 +killall tcpdump 
 +</code>
  
 ===== DHCP client scripts ===== ===== DHCP client scripts =====
 +See also:
 +[[docs:guide-user:base-system:dhcp_configuration#providing_isp_dns_with_dhcp|Providing ISP DNS with DHCP]],
 +[[docs:guide-user:base-system:hotplug|Hotplug]]
 +
 <code bash> <code bash>
-DHCPv4 client script +Logging DHCP client 
-cat << "EOF" > /etc/udhcpc.user+cat << "EOF" > /etc/udhcpc.user.d/00-logger
 logger -t ${0##*/} ${@} $(env) logger -t ${0##*/} ${@} $(env)
 EOF EOF
  
-# DHCPv6 client script +Logging DHCPv6 client 
-cat << "EOF" > /etc/odhcp6c.user+cat << "EOF" > /etc/odhcp6c.user.d/00-logger
 logger -t ${0##*/} ${@} $(env) logger -t ${0##*/} ${@} $(env)
 EOF EOF
  
-Logging messages +Fetching new leases 
-ifup wanifup wan6; sleep 5+ifup wan 
 +ifup wan6
  
 # Reading logs # Reading logs
-logread -e dhcp+logread -e dhcp.script 
 +logread -e dhcpv6.script 
 + 
 +# Checking status 
 +ifstatus wan 
 +ifstatus wan6
 </code> </code>
  
 ===== References ===== ===== References =====
-  * https://udhcp.busybox.net/README.udhcpc +  * [[https://udhcp.busybox.net/README.udhcpc|udhcpc documentation]] 
-  * https://github.com/openwrt/odhcp6c/blob/master/odhcp6c-example-script.sh+  * [[https://github.com/openwrt/odhcp6c#readme|odhcp6c documentation and examples]] 
 + 
 +===== Extras ===== 
 +==== Updating default route ==== 
 +Update default route. 
 + 
 +<code bash> 
 +cat << "EOF"/etc/udhcpc.user.d/30-default-route 
 +DHCPC_EVENT="${1}" 
 +DHCPC_IF="${interface}" 
 +DHCPC_GW="${router}" 
 +case ${DHCPC_EVENT} in 
 +(bound|renew) ;; 
 +(*) exit 0 ;; 
 +esac 
 +ip route delete default dev "${DHCPC_IF}" 
 +ip route add default via "${DHCPC_GW}" dev "${DHCPC_IF}" 
 +EOF 
 +</code> 
 + 
 +==== Updating IPv6 default route ==== 
 +Update IPv6 default route. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/odhcp6c.user.d/30-default-route 
 +DHCPC_EVENT="${2}" 
 +DHCPC_IF="${INTERFACE}" 
 +DHCPC_GW="${SERVER}" 
 +case ${DHCPC_EVENT} in 
 +(bound|informed|updated|rebound|ra-updated) ;; 
 +(*) exit 0 ;; 
 +esac 
 +ip -6 route delete default dev "${DHCPC_IF}" 
 +ip -6 route add default via "${DHCPC_GW}" dev "${DHCPC_IF}" 
 +EOF 
 +</code> 
 + 
 +==== Updating DHCP server route ==== 
 +Update DHCP server route. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/udhcpc.user.d/30-dhcp-route 
 +DHCPC_EVENT="${1}" 
 +DHCPC_IF="${interface}" 
 +DHCPC_SERV="${serverid}" 
 +case ${DHCPC_EVENT} in 
 +(bound|renew) ;; 
 +(*) exit 0 ;; 
 +esac 
 +ip route delete "${DHCPC_SERV}" dev "${DHCPC_IF}" 
 +ip route add "${DHCPC_SERV}" dev "${DHCPC_IF}" 
 +EOF 
 +</code> 
 + 
 +==== Providing ISP DNS with DHCP ==== 
 +Announce ISP DNS servers with DHCP. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/udhcpc.user.d/50-isp-dns 
 +DHCP_POOL="lan" 
 +DHCPC_EVENT="${1}" 
 +DNS_SERV="${dns}" 
 +case ${DHCPC_EVENT} in 
 +(bound|renew) ;; 
 +(*) exit 0 ;; 
 +esac 
 +for DHCP_POOL in ${DHCP_POOL} 
 +do DHCP_OPT="$(uci -q get dhcp.${DHCP_POOL}.dhcp_option)" 
 +for DHCP_OPT in ${DHCP_OPT} 
 +do case ${DHCP_OPT%%,*} in 
 +(6|option:dns-server) 
 +uci del_list dhcp.${DHCP_POOL}.dhcp_option="${DHCP_OPT}" ;; 
 +esac 
 +done 
 +uci add_list dhcp.${DHCP_POOL}.dhcp_option="6,${DNS_SERV// /,}" 
 +done 
 +uci commit dhcp 
 +/etc/init.d/dnsmasq restart 
 +EOF 
 +</code> 
 + 
 +Reconnect your clients to apply changes. 
 + 
 +==== Providing IPv6 ISP DNS with DHCPv6 ==== 
 +Announce IPv6 ISP DNS servers with DHCPv6. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/odhcp6c.user.d/50-isp-dns 
 +DHCP_POOL="lan" 
 +DHCPC_EVENT="${2}" 
 +DNS_SERV="${RA_DNS} ${RDNSS}" 
 +case ${DHCPC_EVENT} in 
 +(bound|informed|updated|rebound|ra-updated) ;; 
 +(*) exit 0 ;; 
 +esac 
 +for DHCP_POOL in ${DHCP_POOL} 
 +do uci -q delete dhcp.${DHCP_POOL}.dns 
 +for DNS_SERV in ${DNS_SERV} 
 +do uci add_list dhcp.${DHCP_POOL}.dns="${DNS_SERV}" 
 +done 
 +done 
 +uci commit dhcp 
 +/etc/init.d/odhcpd restart 
 +EOF 
 +</code> 
 + 
 +Reconnect your clients to apply changes. 
 + 
 +==== Getting specific WAN IP address ==== 
 +Assuming your ISP provides a dynamic IP address with DHCP. 
 +Reconnect until you get the one matching a specific regexp. 
 +Delay for 10 seconds between reconnects. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/udhcpc.user.d/10-wan-ipaddr 
 +WAN_ADDR="${ip}" 
 +case ${WAN_ADDR} in 
 +(192.168.*) exit 0 ;; 
 +esac 
 +sleep 10 
 +ifup ${INTERFACE} 
 +EOF 
 +</code> 
 + 
 +==== Resolving WAN/LAN subnet conflicts ==== 
 +Automatically resolve WAN/LAN subnet conflicts. 
 +Change LAN subnet if it overlaps with WAN. 
 + 
 +<code bash> 
 +cat << "EOF" > /etc/udhcpc.user.d/10-lan-ipaddr 
 +WAN_ADDR="${ip}" 
 +LAN_IF="lan" 
 +LAN_ADDR="$(uci -q get network.${LAN_IF}.ipaddr)" 
 +case ${WAN_ADDR} in 
 +(192.168.*) NEW_ADDR="172.16.1.1" ;; 
 +(*) NEW_ADDR="192.168.1.1" ;; 
 +esac 
 +case ${NEW_ADDR} in 
 +(${LAN_ADDR}) exit 0 ;; 
 +esac 
 +uci set network.${LAN_IF}.ipaddr="${NEW_ADDR}" 
 +uci commit network 
 +ifup ${LAN_IF} 
 +EOF 
 +</code>
  
  • Last modified: 2023/10/06 03:39
  • by vgaetera