诺甘农圆盘

参考资料收集库

用户工具

站点工具


mikrotik:openwrt:dumpap-hostname

Mikrotik和Openwrt dump AP模式下不显示无线客户端名字

如果你跟我一样用Mikrotik作为路由器加Openwrt做有线中继AP,会先发现首页显示的无线客户端-手机之类的都不显示机器名,像下面图片显示一样

上网研究了下,大家的思路就是给Mikrotik的DHCP服务器写一个脚本,自动获取DHCP的时候把IP地址和hostname写入DNS服务器的本地静态记录里面,这样子再在Openwrt里面把反向解析的PTR指向Mikrotik的DNS服务器,这样子就能获取PTR的机器名显示在Wifi连接里面了,就像这样子。

要达到这样子的效果,下面开始这些步骤:

Mikrotik里面写入脚本,位置在IP → DHCP Server → DHCP (tab) → DHCP server instance → Script (tab) → Lease Script

填入以下脚本:

script
# When "1" all DNS entries with IP address of DHCP lease are removed
:local dnsRemoveAllByIp "1"
# When "1" all DNS entries with hostname of DHCP lease are removed
:local dnsRemoveAllByName "1"
# When "1" addition and removal of DNS entries is always done also for non-FQDN hostname
:local dnsAlwaysNonfqdn "1"
# DNS domain to add after DHCP client hostname 
:local dnsDomain "dynamic.example.local"
# DNS TTL to set for DNS entries
:local dnsTtl "00:15:00"
# Source of DHCP client hostname, can be "lease-hostname" or any other lease attribute, like "host-name" or "comment"
:local leaseClientHostnameSource "lease-hostname"

:local leaseComment "dhcp-lease-script_$leaseServerName_$leaseClientHostnameSource"
:local leaseClientHostname
:if ($leaseClientHostnameSource = "lease-hostname") do={
  :set leaseClientHostname $"lease-hostname"
} else={
  :set leaseClientHostname ([:pick \
    [/ip dhcp-server lease print as-value where server="$leaseServerName" address="$leaseActIP" mac-address="$leaseActMAC"] \
    0]->"$leaseClientHostnameSource")
}
:local leaseClientHostnames "$leaseClientHostname"
:if ([:len [$dnsDomain]] > 0) do={
  :if ($dnsAlwaysNonfqdn = "1") do={
    :set leaseClientHostnames "$leaseClientHostname.$dnsDomain,$leaseClientHostname"
  } else={
    :set leaseClientHostnames "$leaseClientHostname.$dnsDomain"
  }
}
:if ($dnsRemoveAllByIp = "1") do={
  /ip dns static remove [/ip dns static find comment="$leaseComment" and address="$leaseActIP"]
}
:foreach h in=[:toarray value="$leaseClientHostnames"] do={
  :if ($dnsRemoveAllByName = "1") do={
    /ip dns static remove [/ip dns static find comment="$leaseComment" and name="$h"]
  }
  /ip dns static remove [/ip dns static find comment="$leaseComment" and address="$leaseActIP" and name="$h"]
  :if ($leaseBound = "1") do={
    :delay 1
    /ip dns static add comment="$leaseComment" address="$leaseActIP" name="$h" ttl="$dnsTtl"
  }
}

里面的这两行不是有需求可以删除掉,或者根据自己本地的dns域名需要更改

# DNS domain to add after DHCP client hostname 
:local dnsDomain "dynamic.example.local"

这样子本地的DNS记录就搞好了自动从DHCP建立,然后我们到Openwrt的设置DNS页面进行修改

根据自己的本地IP网段进行修改和更改成Mikritik的DNS地址,我这里是192.168.168.254

/*.168.192.in-addr.arpa/192.168.168.254

这行的意思是把192.168.0.0/16这网段的PTR解析指向Mikrotik的DNS服务器192.168.168.254

然后保存就可以了,重新刷一下手机端的DHCP获取一下,就看到Mikrotik的DNS静态记录多一条出来了

C:\Users\macro>nslookup
默认服务器:  UnKnown
Address:  192.168.168.254

> set type=PTR
> 107.168.168.192.in-addr.arpa
服务器:  [192.168.168.254]
Address:  192.168.168.254

非权威应答:
107.168.168.192.in-addr.arpa    name = BTK-W00

BTK-W00 internet address = 192.168.168.107

然后在命令行进行PTR查询就能看到正确的记录了。

参考资料:

https://blog.pessoft.com/2019/09/06/mikrotik-script-automatic-dns-records-from-dhcp-leases/

https://blog.antsu.net/how-to-display-wireless-client-information-when-using-openwrt-as-a-simple-ap/

mikrotik/openwrt/dumpap-hostname.txt · 最后更改: packingbox