Скрипти 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 скрипти
Перегляньте також: Providing ISP DNS with DHCP, Hotplug
# 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
Надання DNS-серверів провайдера через DHCP
Оголошення DNS-серверів інтернет-провайдера через DHCP.
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
Перепідключіть клієнтів, щоб застосувати зміни.
Надання IPv6 DNS провайдера через DHCPv6
Оголошення IPv6 DNS-серверів інтернет-провайдера через DHCPv6.
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
Перепідключіть клієнтів, щоб застосувати зміни.
Отримання певної IP-адреси WAN
Припускаючи, що ваш провайдер надає динамічну IP-адресу через DHCP. Перепідключайтесь, доки не отримаєте адресу, що відповідає певному регулярному виразу. Затримка між перепідключеннями — 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. LAN-підмережа буде змінена, якщо вона перекривається з WAN.
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