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/11/27 17:47] – [DHCP configuration] update links vgaeteradocs:guide-user:network:protocol.dhcp [2023/10/04 01:41] – [Providing ISP DNS with DHCP] update vgaetera
Line 32: Line 32:
 <code bash> <code bash>
 # Logging DHCP 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 59: Line 59:
  
 ===== Extras ===== ===== Extras =====
-==== Default route ====+==== Updating default route ==== 
 +Update default route. 
 <code bash> <code bash>
-cat << "EOF" > /etc/udhcpc.user+cat << "EOF" > /etc/udhcpc.user.d/30-default-route
 DHCPC_EVENT="${1}" DHCPC_EVENT="${1}"
 DHCPC_IF="${interface}" DHCPC_IF="${interface}"
Line 74: Line 76:
 </code> </code>
  
-==== Default IPv6 route ====+==== Updating IPv6 default route ==== 
 +Update IPv6 default route. 
 <code bash> <code bash>
-cat << "EOF" > /etc/odhcp6c.user+cat << "EOF" > /etc/odhcp6c.user.d/30-default-route
 DHCPC_EVENT="${2}" DHCPC_EVENT="${2}"
 DHCPC_IF="${INTERFACE}" DHCPC_IF="${INTERFACE}"
Line 89: Line 93:
 </code> </code>
  
-==== DHCP client route ====+==== Updating DHCP server route ==== 
 +Update DHCP server route. 
 <code bash> <code bash>
-cat << "EOF" > /etc/udhcpc.user+cat << "EOF" > /etc/udhcpc.user.d/30-dhcp-route
 DHCPC_EVENT="${1}" DHCPC_EVENT="${1}"
 DHCPC_IF="${interface}" DHCPC_IF="${interface}"
Line 101: Line 107:
 ip route delete "${DHCPC_SERV}" dev "${DHCPC_IF}" ip route delete "${DHCPC_SERV}" dev "${DHCPC_IF}"
 ip route add "${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 EOF
 </code> </code>
  
  • Last modified: 2023/10/06 03:39
  • by vgaetera