Differences
This shows you the differences between two versions of the page.
| 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:14] – [DHCP client scripts] fix logread vgaetera | docs: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: | + | [[docs: |
| - | [[docs: | + | [[docs: |
| ===== Troubleshooting ===== | ===== Troubleshooting ===== | ||
| Line 10: | Line 10: | ||
| opkg install tcpdump | opkg install tcpdump | ||
| - | # Capture | + | # Capture |
| 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 | + | # Logging |
| - | cat << " | + | cat << " |
| logger -t ${0##*/} ${@} $(env) | logger -t ${0##*/} ${@} $(env) | ||
| EOF | EOF | ||
| # Logging DHCPv6 client | # Logging DHCPv6 client | ||
| - | cat << " | + | cat << " |
| 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 55: | Line 56: | ||
| ===== References ===== | ===== References ===== | ||
| * [[https:// | * [[https:// | ||
| - | * [[https:// | + | * [[https:// |
| + | |||
| + | ===== Extras ===== | ||
| + | ==== Updating default route ==== | ||
| + | Update default route. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | DHCPC_EVENT=" | ||
| + | DHCPC_IF=" | ||
| + | DHCPC_GW=" | ||
| + | case ${DHCPC_EVENT} in | ||
| + | (bound|renew) ;; | ||
| + | (*) exit 0 ;; | ||
| + | esac | ||
| + | ip route delete default dev " | ||
| + | ip route add default via " | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | ==== Updating IPv6 default route ==== | ||
| + | Update IPv6 default route. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | DHCPC_EVENT=" | ||
| + | DHCPC_IF=" | ||
| + | DHCPC_GW=" | ||
| + | case ${DHCPC_EVENT} in | ||
| + | (bound|informed|updated|rebound|ra-updated) ;; | ||
| + | (*) exit 0 ;; | ||
| + | esac | ||
| + | ip -6 route delete default dev " | ||
| + | ip -6 route add default via " | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | ==== Updating DHCP server route ==== | ||
| + | Update DHCP server route. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | DHCPC_EVENT=" | ||
| + | DHCPC_IF=" | ||
| + | DHCPC_SERV=" | ||
| + | case ${DHCPC_EVENT} in | ||
| + | (bound|renew) ;; | ||
| + | (*) exit 0 ;; | ||
| + | esac | ||
| + | ip route delete " | ||
| + | ip route add " | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | ==== Providing ISP DNS with DHCP ==== | ||
| + | Announce ISP DNS servers with DHCP. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | DHCP_POOL=" | ||
| + | DHCPC_EVENT=" | ||
| + | DNS_SERV=" | ||
| + | case ${DHCPC_EVENT} in | ||
| + | (bound|renew) ;; | ||
| + | (*) exit 0 ;; | ||
| + | esac | ||
| + | for DHCP_POOL in ${DHCP_POOL} | ||
| + | do DHCP_OPT=" | ||
| + | for DHCP_OPT in ${DHCP_OPT} | ||
| + | do case ${DHCP_OPT%%, | ||
| + | (6|option: | ||
| + | uci del_list dhcp.${DHCP_POOL}.dhcp_option=" | ||
| + | esac | ||
| + | done | ||
| + | uci add_list dhcp.${DHCP_POOL}.dhcp_option=" | ||
| + | done | ||
| + | uci commit dhcp | ||
| + | / | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | Reconnect your clients to apply changes. | ||
| + | |||
| + | ==== Providing IPv6 ISP DNS with DHCPv6 ==== | ||
| + | Announce IPv6 ISP DNS servers with DHCPv6. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | DHCP_POOL=" | ||
| + | DHCPC_EVENT=" | ||
| + | DNS_SERV=" | ||
| + | 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=" | ||
| + | done | ||
| + | done | ||
| + | uci commit dhcp | ||
| + | / | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | 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 << " | ||
| + | WAN_ADDR=" | ||
| + | case ${WAN_ADDR} in | ||
| + | (192.168.*) exit 0 ;; | ||
| + | esac | ||
| + | sleep 10 | ||
| + | ifup ${INTERFACE} | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | ==== Resolving WAN/LAN subnet conflicts ==== | ||
| + | Automatically resolve WAN/LAN subnet conflicts. | ||
| + | Change LAN subnet if it overlaps with WAN. | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | WAN_ADDR=" | ||
| + | LAN_IF=" | ||
| + | LAN_ADDR=" | ||
| + | case ${WAN_ADDR} in | ||
| + | (192.168.*) NEW_ADDR=" | ||
| + | (*) NEW_ADDR=" | ||
| + | esac | ||
| + | case ${NEW_ADDR} in | ||
| + | (${LAN_ADDR}) exit 0 ;; | ||
| + | esac | ||
| + | uci set network.${LAN_IF}.ipaddr=" | ||
| + | uci commit network | ||
| + | ifup ${LAN_IF} | ||
| + | EOF | ||
| + | </ | ||