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 10:22] – [References] links 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 ===== ===== Troubleshooting =====
Line 10: Line 10:
 opkg install tcpdump opkg install tcpdump
  
-# Capture DHCPv4 traffic+# Capture DHCP traffic
 tcpdump -evni any udp port 67 & \ tcpdump -evni any udp port 67 & \
 sleep 5; \ sleep 5; \
Line 31: Line 31:
  
 <code bash> <code bash>
-# Logging DHCPv4 client +# 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
  
 # Logging DHCPv6 client # 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
Line 46: Line 46:
  
 # Reading logs # Reading logs
-logread -e dhcp+logread -e dhcp.script 
 +logread -e dhcpv6.script
  
 # Checking status # Checking status
Line 56: Line 57:
   * [[https://udhcp.busybox.net/README.udhcpc|udhcpc documentation]]   * [[https://udhcp.busybox.net/README.udhcpc|udhcpc documentation]]
   * [[https://github.com/openwrt/odhcp6c#readme|odhcp6c documentation and examples]]   * [[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