diff --git i/configure.ac w/configure.ac
index 38f2138..5ccc47d 100644
--- i/configure.ac
+++ w/configure.ac
@@ -573,6 +573,16 @@ fi
 AC_DEFINE_UNQUOTED(IPTABLES_PATH, "$IPTABLES_PATH", [Define to path of iptables binary])
 AC_SUBST(IPTABLES_PATH)
 
+# dnsmasq path
+AC_ARG_WITH(dnsmasq, AS_HELP_STRING([--with-dnsmasq=/path/to/dnsmasq], [path to dnsmasq]))
+if test "x${with_dnsmasq}" = x; then
+  AC_PATH_PROG(DNSMASQ_PATH, dnsmasq, [], $PATH:/sbin:/usr/sbin)
+else
+  DNSMASQ_PATH="$with_dnsmasq"
+fi
+AC_DEFINE_UNQUOTED(DNSMASQ_PATH, "$DNSMASQ_PATH", [Define to path of dnsmasq binary])
+AC_SUBST(DNSMASQ_PATH)
+
 # system CA certificates path
 AC_ARG_WITH(system-ca-path, AS_HELP_STRING([--with-system-ca-path=/path/to/ssl/certs], [path to system CA certificates])) 
 if test "x${with_system_ca_path}" = x; then
diff --git i/src/dns-manager/nm-dns-dnsmasq.c w/src/dns-manager/nm-dns-dnsmasq.c
index 61b08c6..50c98bc 100644
--- i/src/dns-manager/nm-dns-dnsmasq.c
+++ w/src/dns-manager/nm-dns-dnsmasq.c
@@ -50,7 +50,7 @@ typedef struct {
 /*******************************************/
 
 static inline const char *
-find_dnsmasq (void)
+find_dnsmasq (const char *try_first)
 {
 	static const char *paths[] = {
 		"/usr/local/sbin/dnsmasq",
@@ -60,6 +60,9 @@ find_dnsmasq (void)
 	};
 	const char **binary = paths;
 
+	if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
+		return try_first;
+
 	while (*binary != NULL) {
 		if (g_file_test (*binary, G_FILE_TEST_EXISTS))
 			return *binary;
@@ -310,7 +313,7 @@ update (NMDnsPlugin *plugin,
 	nm_log_dbg (LOGD_DNS, "dnsmasq local caching DNS configuration:");
 	nm_log_dbg (LOGD_DNS, "%s", conf->str);
 
-	argv[idx++] = find_dnsmasq ();
+	argv[idx++] = find_dnsmasq (DNSMASQ_PATH);
 	argv[idx++] = "--no-resolv";  /* Use only commandline */
 	argv[idx++] = "--keep-in-foreground";
 	argv[idx++] = "--no-hosts"; /* don't use /etc/hosts to resolve */
diff --git i/src/dnsmasq-manager/nm-dnsmasq-manager.c w/src/dnsmasq-manager/nm-dnsmasq-manager.c
index df190dc..5b2ec56 100644
--- i/src/dnsmasq-manager/nm-dnsmasq-manager.c
+++ w/src/dnsmasq-manager/nm-dnsmasq-manager.c
@@ -166,7 +166,7 @@ nm_cmd_line_add_string (NMCmdLine *cmd, const char *str)
 /*******************************************/
 
 static inline const char *
-nm_find_dnsmasq (void)
+nm_find_dnsmasq (const char *try_first)
 {
 	static const char *dnsmasq_binary_paths[] = {
 		"/usr/local/sbin/dnsmasq",
@@ -174,9 +174,11 @@ nm_find_dnsmasq (void)
 		"/sbin/dnsmasq",
 		NULL
 	};
-
 	const char **dnsmasq_binary = dnsmasq_binary_paths;
 
+	if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
+		return try_first;
+
 	while (*dnsmasq_binary != NULL) {
 		if (g_file_test (*dnsmasq_binary, G_FILE_TEST_EXISTS))
 			break;
@@ -254,7 +256,7 @@ create_dm_cmd_line (const char *iface,
 	char buf[INET_ADDRSTRLEN + 15];
 	char localaddr[INET_ADDRSTRLEN + 1];
 
-	dm_binary = nm_find_dnsmasq ();
+	dm_binary = nm_find_dnsmasq (DNSMASQ_PATH);
 	if (!dm_binary) {
 		g_set_error_literal (error, NM_DNSMASQ_MANAGER_ERROR, NM_DNSMASQ_MANAGER_ERROR_NOT_FOUND,
 		                     "Could not find dnsmasq binary.");
