Differences

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

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
docs:guide-user:network:protocol.dhcp [2018/06/11 13:21] – created tmomasdocs: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:
 +[[docs:guide-user:network:ipv4:configuration#protocol_dhcp|DHCP client]],
 +[[docs:guide-user:network:ipv6:configuration#protocol_dhcpv6|DHCPv6 client]]
  
-DHCP configuration for IPv4 / IPv6 is different. Please chose which one you want to configure:+===== Troubleshooting ===== 
 +<code bash> 
 +# Install packages  
 +opkg update 
 +opkg install tcpdump
  
-  * [[docs:guide-user:network:ipv4:start#protocol_dhcp]] +# Capture DHCP traffic 
-  [[docs:guide-user:network:ipv6:start#protocol_dhcpv6]]+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 ===== 
 +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> 
 +# Logging DHCP client 
 +cat << "EOF" > /etc/udhcpc.user.d/00-logger 
 +logger -t ${0##*/} ${@} $(env) 
 +EOF 
 + 
 +# Logging DHCPv6 client 
 +cat << "EOF" > /etc/odhcp6c.user.d/00-logger 
 +logger -t ${0##*/} ${@} $(env) 
 +EOF 
 + 
 +# Fetching new leases 
 +ifup wan 
 +ifup wan6 
 + 
 +# Reading logs 
 +logread -e dhcp.script 
 +logread -e dhcpv6.script 
 + 
 +# Checking status 
 +ifstatus wan 
 +ifstatus wan6 
 +</code> 
 + 
 +===== References ===== 
 +  * [[https://udhcp.busybox.net/README.udhcpc|udhcpc documentation]] 
 +  * [[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