![Android DHCP が偽の DNS サーバーを割り当てる](https://rvso.com/image/1449090/Android%20DHCP%20%E3%81%8C%E5%81%BD%E3%81%AE%20DNS%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B.png)
Android デバイスと WiFi ネットワーク上の DNS ルックアップに問題があったので、調べてみたところ、Android が DNS1 スロットにランダムなリンク ローカル IPv6 アドレスを割り当てていることがわかりました。
shell@htc_m8wl:/ $ getprop net.dns1
fe80::3246:9aff:fe00:3108
shell@htc_m8wl:/ $ getprop net.dns2
192.168.55.5
これは奇妙だと思ったので、DHCP サーバーから TCP ダンプを実行することにし、次の結果を得ました。
# tcpdump -vv -n -i epair2b port bootps or port bootpc
18:18:13.285502 IP (tos 0x0, ttl 64, id 49166, offset 0, flags [none], proto UDP (17), length 342)
0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 00:ee:bd:c1:7e:db, length 314, xid 0xdb33bc98, Flags [none] (0x0000)
Client-Ethernet-Address 00:ee:bd:c1:7e:db
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
Client-ID Option 61, length 7: ether 00:ee:bd:c1:7e:db
Requested-IP Option 50, length 4: 192.168.55.79
MSZ Option 57, length 2: 1500
Vendor-Class Option 60, length 12: "dhcpcd-5.5.6"
Hostname Option 12, length 24: "android-a440c6464dfcde43"
Parameter-Request Option 55, length 9:
Subnet-Mask, Static-Route, Default-Gateway, Domain-Name-Server
Domain-Name, BR, Lease-Time, RN
RB
18:18:13.285886 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
192.168.55.5.67 > 192.168.55.79.68: [udp sum ok] BOOTP/DHCP, Reply, length 300, xid 0xdb33bc98, Flags [none] (0x0000)
Your-IP 192.168.55.79
Client-Ethernet-Address 00:ee:bd:c1:7e:db
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.55.5
Lease-Time Option 51, length 4: 60000
Subnet-Mask Option 1, length 4: 255.255.255.0
Default-Gateway Option 3, length 4: 192.168.55.1
Domain-Name-Server Option 6, length 4: 192.168.55.5
Domain-Name Option 15, length 23: "local.my.domain"
ご覧のとおり、クライアントに対して IPv6 リンク ローカルをまったくアドバタイズしておらず、影響を受けるデバイスは Android のみのようです。Linux デスクトップ、OSX ラップトップ、iPhone はすべて正常に動作するようです。
通常、IPv6 リンク ローカルでの検索が失敗すると、Android は DNS2 レコードに移動し、これがアドバタイズされた DNS サーバーとして表示されると想定します。ただし、WiFi に接続している間は電話からのすべての DNS クエリが失敗するため、そうはならないようです。
Android が自分自身を終了させるのではなく、これを適切に処理するように指示するために、サーバー構成で設定する必要がある DHCP オプションがあるかどうか疑問に思っていました。 グーグルで検索しても、私のネットワークと同じ問題を抱えている人を見つけることができませんでした。そのため、現時点ではサーバー構成の問題であると想定しています。
# dhcpd.conf
option domain-name "local.my.domain";
option domain-name-servers 192.168.55.5;
include "/etc/namedb/dhcpupdate.key";
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
authoritative;
zone local.my.domain. {
primary 127.0.0.1;
key "dhcpupdate";
}
zone 55.168.192.in-addr.arpa. {
primary 192.168.55.5;
key "dhcpupdate";
}
subnet 192.168.55.0 netmask 255.255.255.0 {
range 192.168.55.100 192.168.55.240;
default-lease-time 60000;
max-lease-time 720000;
option routers 192.168.55.1;
ddns-domainname "local.my.domain.";
ddns-rev-domainname "55.168.192.in-addr.arpa.";
}
group {
option domain-name "local.my.domain";
ddns-domainname "local.my.domain.";
ddns-rev-domainname "55.168.192.in-addr.arpa.";
# Static hosts
host john-phone {
hardware ethernet 00:ee:bd:c1:7e:db;
fixed-address 192.168.55.79;
ddns-hostname "john-phone";
option host-name "john-phone";
}
}
静的ホストをさらに定義していますが、それらは実質的に同一であり、違いは IP とイーサネット アドレスのみです。
答え1
問題は、ルータが IPv6 自動設定オプションを使用して不正な DNS サーバをブロードキャストしていたことにあるようです。ルータで IPv6 を無効にすると問題は解決したようですが、私の ISP はまだ IPv6 をサポートしていないので、これは問題ありません。