diff --git a/cmds/dnsck.c b/cmds/dnsck.c
index a069345..38a914e 100644
--- a/cmds/dnsck.c
+++ b/cmds/dnsck.c
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <time.h>
+#include <unistd.h>
 
 #define RESOLV_CONF "/etc/resolv.conf"
 #define RESOLV_CONF_EXTERNAL "/tmp/resolv.conf.external"
@@ -265,12 +266,20 @@
     free((char *)servers[i]);
 }
 
-int main(int argc, const char *argv[])
+void usage(const char *progname)
+{
+  fprintf(stderr, "usage: %s [-i interface]\nwhere:\n", progname);
+  fprintf(stderr, "\t-i : name of interface to SO_BINDTODEVICE, like br0\n");
+  exit(1);
+}
+
+int main(int argc, char * const argv[])
 {
   ares_channel channel;
   const char *servers[MAX_SERVERS];
   size_t count;
-  int rc;
+  const char *interface = NULL;
+  int rc, c;
 
   struct ares_options options = {
     .flags = ARES_FLAG_NOCHECKRESP,
@@ -278,6 +287,17 @@
     .tries = 1,
   };
 
+  while ((c = getopt(argc, argv, "i:")) != -1) {
+    switch (c) {
+    case 'i':
+      interface = optarg;
+      break;
+    default:
+      usage(argv[0]);
+      break;
+    }
+  }
+
   rc = ares_library_init(ARES_LIB_INIT_NONE);
   if (rc)
     ares_error_die(ares_strerror(rc));
@@ -287,6 +307,10 @@
   if (rc)
     ares_error_die(ares_strerror(rc));
 
+  if (interface) {
+    ares_set_local_dev(channel, interface);
+  }
+
   count = read_resolv_conf(servers, MAX_SERVERS);
   resolve_array(channel, servers, count);
   free_servers(servers, count);
@@ -295,8 +319,8 @@
   resolve_array(channel, servers, count);
   free_servers(servers, count);
 
-  if (argc > 1)
-    resolve_array(channel, argv + 1, argc - 1);
+  if (optind > 0)
+    resolve_array(channel, (const char **)&argv[optind], argc - optind);
 
   printf("\n");
   ares_destroy(channel);
