如果你跟我一样用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
填入以下脚本:
# 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/