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:01] – links 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 ===== | ||
| + | <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 | ||
| + | </ | ||
| ===== DHCP client scripts ===== | ===== DHCP client scripts ===== | ||
| Line 10: | 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 25: | Line 46: | ||
| # Reading logs | # Reading logs | ||
| - | logread -e udhcpc | + | logread -e dhcp.script |
| - | logread -e odhcp6c | + | logread -e dhcpv6.script |
| # Checking status | # Checking status | ||
| Line 33: | Line 54: | ||
| </ | </ | ||
| - | ===== Troubleshooting | + | ===== References |
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ===== Extras ===== | ||
| + | ==== Updating default route ==== | ||
| + | Update default route. | ||
| <code bash> | <code bash> | ||
| - | # Install packages | + | cat << " |
| - | opkg update | + | DHCPC_EVENT=" |
| - | opkg install tcpdump | + | DHCPC_IF=" |
| + | DHCPC_GW=" | ||
| + | case ${DHCPC_EVENT} in | ||
| + | (bound|renew) ;; | ||
| + | (*) exit 0 ;; | ||
| + | esac | ||
| + | ip route delete default dev " | ||
| + | ip route add default via " | ||
| + | EOF | ||
| + | </ | ||
| - | # Capture traffic | + | ==== Updating IPv6 default route ==== |
| - | tcpdump | + | Update IPv6 default route. |
| - | sleep 5; \ | + | |
| - | killall | + | <code bash> |
| - | sleep 5; \ | + | cat << " |
| - | killall tcpdump | + | 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 | ||
| </ | </ | ||
| - | ===== References | + | ==== Updating DHCP server route ==== |
| - | * [[https://udhcp.busybox.net/README.udhcpc|udhcpc documentation]] | + | Update DHCP server route. |
| - | * [[https://github.com/openwrt/odhcp6c/blob/master/odhcp6c-example-script.sh|odhcp6c example script]] | + | |
| + | <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 | ||
| + | </code> | ||
| + | |||
| + | ==== 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:dns-server) | ||
| + | uci del_list dhcp.${DHCP_POOL}.dhcp_option=" | ||
| + | esac | ||
| + | done | ||
| + | uci add_list dhcp.${DHCP_POOL}.dhcp_option=" | ||
| + | done | ||
| + | uci commit dhcp | ||
| + | /etc/init.d/dnsmasq restart | ||
| + | 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 | ||
| + | /etc/init.d/ | ||
| + | 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 | ||
| + | </ | ||