OpenWrt pouziva na DNS a DHCP server program DNSMASQ. Je maly, jednoduchy a vetsinou funguje. Prave to vetsinou je problem. Uz dvakrat se mi stalo, ze dnsmasq neprideloval IP adresy. Konfigurace byla stejna, jako na spouste dalsich routeru. Ani na oficialnim foru OpenWrt se mi nepodarilo nalezt reseni. Problem jsem vyresil instalaci ISC DHCPD serveru.
V obou pripadech se jednalo o x86 desku PC Engines WRAP 2E1, ktera ma v OpenWrt podporu. Jednou se problem z DHCP objevil u OpenWrt verze 10.03.1, podruhe u nejnovejsiho 15.05. Vzdy oficialne sestavene obrazy z webu. Na ar71xx routerech se mi (zatim) problem s nefunkcnim dhcp nestal.
Protoze na serverech s Ubuntu a Debianem pouzivam vyborny DHCP server od ISC, rozhodl jsem se pro jeho instalci i na OpenWrt. Jeho nejvetsi nevyhodou je vetsi velikost – do routeru se 4 MB flash se nevejde, ale ve wrapech mam minimalne 64 MB Compact flash karty.
V nejnovejsim OpenWrt 15.05 byl bohuzel ISC DHCPD odstranen. Naposledy byl ve verzi 14.07 a to jeste v sekci oldpackages. Nevadi, stale se da nainstalovat. Zde uvedeny postup bude pro x86 OpenWrt ve verzi 15.05.
Instalace ISC DHCPD na OpenWrt 15.05
Balicek nalezeneme na adrese https://downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/oldpackages/ zacina znaky „isc-„, doporucuji vyfiltrovat.
Pro instalci staci nasledujici prikazy:
1 2 |
opkg update opkg install <strong>http://</strong>downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/oldpackages/isc-dhcp-server-ipv4_4.2.4-3_x86.ipk |
Pozor! Po zkopirovani odkazu z webu OpenWrt vede odkaz na https verzi, ale OpenWrt v zakladu nema nainstalovane libssl. Staci jenom smazat z url pismeno s.
Pote upravime vychozi konfiguraci v souboru /etc/dhcpd.conf pro svoji sit:
1 2 3 4 5 6 7 8 9 10 |
default-lease-time 3600; max-lease-time 7200; option domain-name-servers 192.168.1.1; authoritative; subnet 10.123.12.0 netmask 255.255.255.0 { option domain-name "lan"; option routers 192.168.1.1; range 10.123.12.100 10.123.12.250; } |
Nutne minimum pro spusteni je: /usr/sbin/dhcpd -q -cf /etc/dhcpd.conf br-lan
kde na konci je interface, na kterem bude dhcp server poslouchat (debian-like distribuce ho nastavuji v /etc/default/isc-dhcp-server).
Protoze OpenWrt vzdy melo chybu v init skriptu /etc/init.d/dhcpd, je potreba skript opravit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/sh /etc/rc.common START=65 lease_file=/var/dhcpd.leases config_file=/etc/dhcpd.conf pid_file=/var/run/dhcpd.pid <strong>dhcp_ifs="br-lan"</strong> start() { if [ ! -e $lease_file ]; then touch $lease_file fi /usr/sbin/dhcpd -q -cf $config_file -lf $lease_file -pf $pid_file $dhcp_ifs if [ $? -ne 0 ]; then ... |
V originalnim skriptu uplne chybi tucne vyznaceny radek. DHCP server pak nefunguje, protoze nevi, kde ma poslouchat.
Nevim proc, ale nekdy se mi behem bootovani dhcpd nespustil 🙁 proto mam pro jistotu jeho restart v /etc/rc.local:
1 2 3 4 5 6 |
# Put your custom commands here that should be executed once # the system init finished. By default this file does nothing. /etc/init.d/dhcpd restart exit 0 |
Tim jsou vsechny chyby opraveny.
Na zaver je potreba zakazat automaticke spousteni dnsmasq a naopak povolit ISC DHCPD:
1 2 |
# /etc/init.d/dnsmasq disable # /etc/init.d/dhcpd enable |
A po restartu bude vse fungovat 🙂