DHCP 客户端脚本
参阅: DHCP 客户端, DHCPv6 客户端
故障排除
# 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 客户端脚本
参阅 通过DHCP提供ISP DNS, 热插拔
# 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
参考文章
附加内容
更新默认路由
更新默认路由。
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
更新IPv6默认路由
更新IPv6默认路由。
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
更新DHCP服务器路由
更新DHCP服务器路由。
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
通过DHCP提供ISP DNS
通过DHCP宣告ISP DNS服务器。
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
重新连接您的客户端以应用更改。
通过DHCPv6提供IPv6 ISP DNS
通过DHCPv6通告IPv6 ISP DNS服务器。
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
重新连接您的客户端以应用更改。
获取特定的 WAN IP地址
假设您的互联网服务提供商(ISP)通过DHCP提供动态IP地址。 不断重新连接,直到获得与特定正则表达式匹配的IP地址。 重新连接之间延迟10秒。
cat << "EOF" > /etc/udhcpc.user.d/10-wan-ipaddr WAN_ADDR="${ip}" case ${WAN_ADDR} in (??.???.*) exit 0 ;; esac sleep 10 ifup ${INTERFACE} EOF
解决 WAN/LAN 子网冲突
自动解决 WAN/LAN 子网冲突。 如果 WAN/LAN 重叠,则更改 LAN 子网。
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