dnsmasq: configure dnsmasq via flat config file and not command-line args
Sometimes it's useful to compare the generated config file from UCI config with a hand-edited dnsmasq config file, especially if you're migrating to an OpenWRT router from something else (such as Astlinux). Putting the generated config makes it easier to capture and diff, etc. Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> SVN-Revision: 31182
This commit is contained in:
parent
a54b6055a8
commit
e7807dd8ca
1 changed files with 78 additions and 53 deletions
|
@ -8,6 +8,14 @@ SERVICE_USE_PID=1
|
||||||
DNS_SERVERS=""
|
DNS_SERVERS=""
|
||||||
DOMAIN=""
|
DOMAIN=""
|
||||||
|
|
||||||
|
CONFIGFILE="/var/etc/dnsmasq.conf"
|
||||||
|
|
||||||
|
xappend() {
|
||||||
|
local value="$1"
|
||||||
|
|
||||||
|
echo "${value#--}" >> $CONFIGFILE
|
||||||
|
}
|
||||||
|
|
||||||
dhcp_calc() {
|
dhcp_calc() {
|
||||||
local ip="$1"
|
local ip="$1"
|
||||||
local res=0
|
local res=0
|
||||||
|
@ -27,7 +35,7 @@ append_bool() {
|
||||||
local value="$3"
|
local value="$3"
|
||||||
local _loctmp
|
local _loctmp
|
||||||
config_get_bool _loctmp "$section" "$option" 0
|
config_get_bool _loctmp "$section" "$option" 0
|
||||||
[ $_loctmp -gt 0 ] && append args "$value"
|
[ $_loctmp -gt 0 ] && xappend "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_parm() {
|
append_parm() {
|
||||||
|
@ -37,66 +45,66 @@ append_parm() {
|
||||||
local _loctmp
|
local _loctmp
|
||||||
config_get _loctmp "$section" "$option"
|
config_get _loctmp "$section" "$option"
|
||||||
[ -z "$_loctmp" ] && return 0
|
[ -z "$_loctmp" ] && return 0
|
||||||
append args "$switch $_loctmp"
|
xappend "$switch=$_loctmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_server() {
|
append_server() {
|
||||||
append args "-S $1"
|
xappend "--server=$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_interface() {
|
append_interface() {
|
||||||
local ifname=$(uci_get_state network "$1" ifname "$1")
|
local ifname=$(uci_get_state network "$1" ifname "$1")
|
||||||
append args "-i $ifname"
|
xappend "--interface=$ifname"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_notinterface() {
|
append_notinterface() {
|
||||||
local ifname=$(uci_get_state network "$1" ifname "$1")
|
local ifname=$(uci_get_state network "$1" ifname "$1")
|
||||||
append args "-I $ifname"
|
xappend "--except-interface=$ifname"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_addnhosts() {
|
append_addnhosts() {
|
||||||
append args "-H $1"
|
xappend "--addn-hosts=$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_bogusnxdomain() {
|
append_bogusnxdomain() {
|
||||||
append args "-B $1"
|
xappend "--bogus-nxdomain=$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsmasq() {
|
dnsmasq() {
|
||||||
local cfg="$1"
|
local cfg="$1"
|
||||||
append_bool "$cfg" authoritative "-K"
|
append_bool "$cfg" authoritative "--dhcp-authoritative"
|
||||||
append_bool "$cfg" nodaemon "-d"
|
append_bool "$cfg" nodaemon "--no-daemon"
|
||||||
append_bool "$cfg" domainneeded "-D"
|
append_bool "$cfg" domainneeded "--domain-needed"
|
||||||
append_bool "$cfg" filterwin2k "-f"
|
append_bool "$cfg" filterwin2k "--filterwin2k"
|
||||||
append_bool "$cfg" nohosts "-h"
|
append_bool "$cfg" nohosts "--no-hosts"
|
||||||
append_bool "$cfg" nonegcache "-N"
|
append_bool "$cfg" nonegcache "--no-negcache"
|
||||||
append_bool "$cfg" strictorder "-o"
|
append_bool "$cfg" strictorder "--strict-order"
|
||||||
append_bool "$cfg" logqueries "-q"
|
append_bool "$cfg" logqueries "--log-queries"
|
||||||
append_bool "$cfg" noresolv "-R"
|
append_bool "$cfg" noresolv "--no-resolv"
|
||||||
append_bool "$cfg" localise_queries "-y"
|
append_bool "$cfg" localise_queries "--localise-queries"
|
||||||
append_bool "$cfg" readethers "-Z"
|
append_bool "$cfg" readethers "--read-ethers"
|
||||||
append_bool "$cfg" dbus "-1"
|
append_bool "$cfg" dbus "--enable-dbus"
|
||||||
append_bool "$cfg" boguspriv "-b"
|
append_bool "$cfg" boguspriv "--bogus-priv"
|
||||||
append_bool "$cfg" expandhosts "-E"
|
append_bool "$cfg" expandhosts "--expand-hosts"
|
||||||
append_bool "$cfg" enable_tftp "--enable-tftp"
|
append_bool "$cfg" enable_tftp "--enable-tftp"
|
||||||
append_bool "$cfg" nonwildcard "-z"
|
append_bool "$cfg" nonwildcard "--bind-interfaces"
|
||||||
|
|
||||||
append_parm "$cfg" dhcpscript "-6"
|
append_parm "$cfg" dhcpscript "--dhcp-script"
|
||||||
append_parm "$cfg" cachesize "-c"
|
append_parm "$cfg" cachesize "--cache-size"
|
||||||
append_parm "$cfg" dnsforwardmax "-0"
|
append_parm "$cfg" dnsforwardmax "--dns-forward-max"
|
||||||
append_parm "$cfg" port "-p"
|
append_parm "$cfg" port "--port"
|
||||||
append_parm "$cfg" ednspacket_max "-P"
|
append_parm "$cfg" ednspacket_max "--edns-packet-max"
|
||||||
append_parm "$cfg" dhcpleasemax "-X"
|
append_parm "$cfg" dhcpleasemax "--dhcp-lease-max"
|
||||||
append_parm "$cfg" "queryport" "-Q"
|
append_parm "$cfg" "queryport" "--query-port"
|
||||||
append_parm "$cfg" "domain" "-s"
|
append_parm "$cfg" "domain" "--domain"
|
||||||
append_parm "$cfg" "local" "-S"
|
append_parm "$cfg" "local" "--server"
|
||||||
config_list_foreach "$cfg" "server" append_server
|
config_list_foreach "$cfg" "server" append_server
|
||||||
config_list_foreach "$cfg" "interface" append_interface
|
config_list_foreach "$cfg" "interface" append_interface
|
||||||
config_list_foreach "$cfg" "notinterface" append_notinterface
|
config_list_foreach "$cfg" "notinterface" append_notinterface
|
||||||
config_list_foreach "$cfg" "addnhosts" append_addnhosts
|
config_list_foreach "$cfg" "addnhosts" append_addnhosts
|
||||||
config_list_foreach "$cfg" "bogusnxdomain" append_bogusnxdomain
|
config_list_foreach "$cfg" "bogusnxdomain" append_bogusnxdomain
|
||||||
append_parm "$cfg" "leasefile" "-l"
|
append_parm "$cfg" "leasefile" "--dhcp-leasefile"
|
||||||
append_parm "$cfg" "resolvfile" "-r"
|
append_parm "$cfg" "resolvfile" "--resolv-file"
|
||||||
append_parm "$cfg" "tftp_root" "--tftp-root"
|
append_parm "$cfg" "tftp_root" "--tftp-root"
|
||||||
append_parm "$cfg" "dhcp_boot" "--dhcp-boot"
|
append_parm "$cfg" "dhcp_boot" "--dhcp-boot"
|
||||||
|
|
||||||
|
@ -110,7 +118,7 @@ dnsmasq() {
|
||||||
config_get_bool cachelocal "$cfg" cachelocal 1
|
config_get_bool cachelocal "$cfg" cachelocal 1
|
||||||
|
|
||||||
config_get hostsfile "$cfg" dhcphostsfile
|
config_get hostsfile "$cfg" dhcphostsfile
|
||||||
[ -e "$hostsfile" ] && append args "--dhcp-hostsfile=$hostsfile"
|
[ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
|
||||||
|
|
||||||
local rebind
|
local rebind
|
||||||
config_get_bool rebind "$cfg" rebind_protection 1
|
config_get_bool rebind "$cfg" rebind_protection 1
|
||||||
|
@ -118,22 +126,24 @@ dnsmasq() {
|
||||||
logger -t dnsmasq \
|
logger -t dnsmasq \
|
||||||
"DNS rebinding protection is active," \
|
"DNS rebinding protection is active," \
|
||||||
"will discard upstream RFC1918 responses!"
|
"will discard upstream RFC1918 responses!"
|
||||||
append args "--stop-dns-rebind"
|
xappend "--stop-dns-rebind"
|
||||||
|
|
||||||
local rebind_localhost
|
local rebind_localhost
|
||||||
config_get_bool rebind_localhost "$cfg" rebind_localhost 0
|
config_get_bool rebind_localhost "$cfg" rebind_localhost 0
|
||||||
[ $rebind_localhost -gt 0 ] && {
|
[ $rebind_localhost -gt 0 ] && {
|
||||||
logger -t dnsmasq "Allowing 127.0.0.0/8 responses"
|
logger -t dnsmasq "Allowing 127.0.0.0/8 responses"
|
||||||
append args "--rebind-localhost-ok"
|
xappend "--rebind-localhost-ok"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_rebind_domain() {
|
append_rebind_domain() {
|
||||||
logger -t dnsmasq "Allowing RFC1918 responses for domain $1"
|
logger -t dnsmasq "Allowing RFC1918 responses for domain $1"
|
||||||
append args "--rebind-domain-ok=$1"
|
xappend "--rebind-domain-ok=$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
config_list_foreach "$cfg" rebind_domain append_rebind_domain
|
config_list_foreach "$cfg" rebind_domain append_rebind_domain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo >> $CONFIGFILE
|
||||||
}
|
}
|
||||||
|
|
||||||
dhcp_subscrid_add() {
|
dhcp_subscrid_add() {
|
||||||
|
@ -145,7 +155,7 @@ dhcp_subscrid_add() {
|
||||||
config_get subscriberid "$cfg" subscriberid
|
config_get subscriberid "$cfg" subscriberid
|
||||||
[ -n "$subscriberid" ] || return 0
|
[ -n "$subscriberid" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-subscrid=$networkid,$subscriberid"
|
xappend "--dhcp-subscrid=$networkid,$subscriberid"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -159,7 +169,7 @@ dhcp_remoteid_add() {
|
||||||
config_get remoteid "$cfg" remoteid
|
config_get remoteid "$cfg" remoteid
|
||||||
[ -n "$remoteid" ] || return 0
|
[ -n "$remoteid" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-remoteid=$networkid,$remoteid"
|
xappend "--dhcp-remoteid=$networkid,$remoteid"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -173,7 +183,7 @@ dhcp_circuitid_add() {
|
||||||
config_get circuitid "$cfg" circuitid
|
config_get circuitid "$cfg" circuitid
|
||||||
[ -n "$circuitid" ] || return 0
|
[ -n "$circuitid" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-circuitid=$networkid,$circuitid"
|
xappend "--dhcp-circuitid=$networkid,$circuitid"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -187,7 +197,7 @@ dhcp_userclass_add() {
|
||||||
config_get userclass "$cfg" userclass
|
config_get userclass "$cfg" userclass
|
||||||
[ -n "$userclass" ] || return 0
|
[ -n "$userclass" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-userclass=$networkid,$userclass"
|
xappend "--dhcp-userclass=$networkid,$userclass"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -201,7 +211,7 @@ dhcp_vendorclass_add() {
|
||||||
config_get vendorclass "$cfg" vendorclass
|
config_get vendorclass "$cfg" vendorclass
|
||||||
[ -n "$vendorclass" ] || return 0
|
[ -n "$vendorclass" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-vendorclass=$networkid,$vendorclass"
|
xappend "--dhcp-vendorclass=$networkid,$vendorclass"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -221,7 +231,7 @@ dhcp_host_add() {
|
||||||
for m in $mac; do append macs "$m" ","; done
|
for m in $mac; do append macs "$m" ","; done
|
||||||
[ -n "$macs" ] || return 0
|
[ -n "$macs" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-host=$macs${networkid:+,net:$networkid}${ip:+,$ip}${name:+,$name}"
|
xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${ip:+,$ip}${name:+,$name}"
|
||||||
}
|
}
|
||||||
|
|
||||||
dhcp_mac_add() {
|
dhcp_mac_add() {
|
||||||
|
@ -233,7 +243,7 @@ dhcp_mac_add() {
|
||||||
config_get mac "$cfg" mac
|
config_get mac "$cfg" mac
|
||||||
[ -n "$mac" ] || return 0
|
[ -n "$mac" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-mac=$networkid,$mac"
|
xappend "--dhcp-mac=$networkid,$mac"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -252,7 +262,7 @@ dhcp_boot_add() {
|
||||||
config_get serveraddress "$cfg" serveraddress
|
config_get serveraddress "$cfg" serveraddress
|
||||||
[ -n "$serveraddress" ] || return 0
|
[ -n "$serveraddress" ] || return 0
|
||||||
|
|
||||||
append args "--dhcp-boot=${networkid:+net:$networkid,}$filename,$servername,$serveraddress"
|
xappend "--dhcp-boot=${networkid:+net:$networkid,}$filename,$servername,$serveraddress"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -274,7 +284,7 @@ dhcp_add() {
|
||||||
DNS_SERVERS="$DNS_SERVERS $dnsserver"
|
DNS_SERVERS="$DNS_SERVERS $dnsserver"
|
||||||
}
|
}
|
||||||
|
|
||||||
append_bool "$cfg" ignore "-2 $ifname" && return 0
|
append_bool "$cfg" ignore "--no-dhcp-interface=$ifname" && return 0
|
||||||
|
|
||||||
config_get proto "$net" proto
|
config_get proto "$net" proto
|
||||||
[ static = "$proto" ] || return 0
|
[ static = "$proto" ] || return 0
|
||||||
|
@ -306,7 +316,7 @@ dhcp_add() {
|
||||||
[ "$limit" -gt 0 ] && limit=$((limit-1))
|
[ "$limit" -gt 0 ] && limit=$((limit-1))
|
||||||
eval "$(ipcalc.sh $ipaddr $netmask $start $limit)"
|
eval "$(ipcalc.sh $ipaddr $netmask $start $limit)"
|
||||||
if [ "$dynamicdhcp" = "0" ]; then END="static"; fi
|
if [ "$dynamicdhcp" = "0" ]; then END="static"; fi
|
||||||
append args "--dhcp-range=$networkid,$START,$END,$NETMASK,$leasetime${options:+ $options}"
|
xappend "--dhcp-range=$networkid,$START,$END,$NETMASK,$leasetime${options:+ $options}"
|
||||||
|
|
||||||
dhcp_option_add "$cfg" "$networkid"
|
dhcp_option_add "$cfg" "$networkid"
|
||||||
}
|
}
|
||||||
|
@ -317,7 +327,7 @@ dhcp_option_add() {
|
||||||
|
|
||||||
config_get dhcp_option "$cfg" dhcp_option
|
config_get dhcp_option "$cfg" dhcp_option
|
||||||
for o in $dhcp_option; do
|
for o in $dhcp_option; do
|
||||||
append args "-O $networkid","$o"
|
xappend "--dhcp-option=$networkid","$o"
|
||||||
done
|
done
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -341,10 +351,10 @@ dhcp_domain_add() {
|
||||||
[ "${fqdn%.*}" == "$fqdn" ] && \
|
[ "${fqdn%.*}" == "$fqdn" ] && \
|
||||||
fqdn="$fqdn${DOMAIN:+.$DOMAIN}"
|
fqdn="$fqdn${DOMAIN:+.$DOMAIN}"
|
||||||
|
|
||||||
append args "-A /$fqdn/$ip"
|
xappend "--address=/$fqdn/$ip"
|
||||||
|
|
||||||
[ -n "$raddr" ] && {
|
[ -n "$raddr" ] && {
|
||||||
append args "--ptr-record=$raddr,$fqdn"
|
xappend "--ptr-record=$raddr,$fqdn"
|
||||||
raddr=""
|
raddr=""
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
|
@ -367,7 +377,7 @@ dhcp_srv_add() {
|
||||||
|
|
||||||
local service="$srv,$target,$port${class:+,$class${weight:+,$weight}}"
|
local service="$srv,$target,$port${class:+,$class${weight:+,$weight}}"
|
||||||
|
|
||||||
append args "-W $service"
|
xappend "--srv-host=$service"
|
||||||
}
|
}
|
||||||
|
|
||||||
dhcp_mx_add() {
|
dhcp_mx_add() {
|
||||||
|
@ -397,7 +407,7 @@ dhcp_cname_add() {
|
||||||
config_get target "$cfg" target
|
config_get target "$cfg" target
|
||||||
[ -n "$target" ] || return 0
|
[ -n "$target" ] || return 0
|
||||||
|
|
||||||
append args "--cname=${cname},${target}"
|
xappend "--cname=${cname},${target}"
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
@ -409,9 +419,20 @@ start() {
|
||||||
|
|
||||||
config_load dhcp
|
config_load dhcp
|
||||||
|
|
||||||
|
# before we can call xappend
|
||||||
|
mkdir -p $(dirname $CONFIGFILE)
|
||||||
|
|
||||||
|
echo "# auto-generated config file from /etc/config/dhcp" > $CONFIGFILE
|
||||||
|
|
||||||
|
# if we did this last, we could override auto-generated config
|
||||||
|
[ -f /etc/dnsmasq.conf ] && {
|
||||||
|
xappend "--conf-file=/etc/dnsmasq.conf"
|
||||||
|
}
|
||||||
|
|
||||||
args=""
|
args=""
|
||||||
config_foreach dnsmasq dnsmasq
|
config_foreach dnsmasq dnsmasq
|
||||||
config_foreach dhcp_host_add host
|
config_foreach dhcp_host_add host
|
||||||
|
echo >> $CONFIGFILE
|
||||||
config_foreach dhcp_boot_add boot
|
config_foreach dhcp_boot_add boot
|
||||||
config_foreach dhcp_mac_add mac
|
config_foreach dhcp_mac_add mac
|
||||||
config_foreach dhcp_vendorclass_add vendorclass
|
config_foreach dhcp_vendorclass_add vendorclass
|
||||||
|
@ -420,10 +441,14 @@ start() {
|
||||||
config_foreach dhcp_remoteid_add remoteid
|
config_foreach dhcp_remoteid_add remoteid
|
||||||
config_foreach dhcp_subscrid_add subscrid
|
config_foreach dhcp_subscrid_add subscrid
|
||||||
config_foreach dhcp_domain_add domain
|
config_foreach dhcp_domain_add domain
|
||||||
|
echo >> $CONFIGFILE
|
||||||
config_foreach dhcp_srv_add srvhost
|
config_foreach dhcp_srv_add srvhost
|
||||||
config_foreach dhcp_mx_add mxhost
|
config_foreach dhcp_mx_add mxhost
|
||||||
|
echo >> $CONFIGFILE
|
||||||
config_foreach dhcp_add dhcp
|
config_foreach dhcp_add dhcp
|
||||||
|
echo >> $CONFIGFILE
|
||||||
config_foreach dhcp_cname_add cname
|
config_foreach dhcp_cname_add cname
|
||||||
|
echo >> $CONFIGFILE
|
||||||
|
|
||||||
# add own hostname
|
# add own hostname
|
||||||
[ -z "$lanaddr" ] || {
|
[ -z "$lanaddr" ] || {
|
||||||
|
@ -431,7 +456,7 @@ start() {
|
||||||
dhcp_domain_add "" "${hostname:-OpenWrt}" "$lanaddr"
|
dhcp_domain_add "" "${hostname:-OpenWrt}" "$lanaddr"
|
||||||
}
|
}
|
||||||
|
|
||||||
service_start /usr/sbin/dnsmasq $args && {
|
service_start /usr/sbin/dnsmasq -C $CONFIGFILE && {
|
||||||
rm -f /tmp/resolv.conf
|
rm -f /tmp/resolv.conf
|
||||||
[ -n "$DOMAIN" ] && echo "search $DOMAIN" >> /tmp/resolv.conf
|
[ -n "$DOMAIN" ] && echo "search $DOMAIN" >> /tmp/resolv.conf
|
||||||
DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
|
DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
|
||||||
|
|
Loading…
Reference in a new issue