Arduino イーサネット ライブラリを使用して小さなプロジェクトを構築しようとしていますが、奇妙な DNS の問題が発生しています。
ネットワークに対してローカルなドメイン名は解決できませんが、パブリック ドメイン名の解決には問題はありません。
ネットワーク上の他のシステムでは、これらのローカル ドメイン名に問題はありません。どうやらArduinoのようです。
これが私が使用しているものです:
- Arduino Uno R3
- Arduino イーサネット シールド R3
- Arduino IDE 1.0.3
- Asus RT-N66U ルーター(DNS サーバーを提供)
ここに私のテストスケッチがあります:
#include <SPI.h>
#include <Ethernet.h>
#include <Dns.h>
#include <EthernetUdp.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
EthernetClient client;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
while(true);
}
delay(1000);
Serial.println("connecting...");
DNSClient dnsClient;
// Router IP address
byte dnsIp[] = {192, 168, 11, 1};
dnsClient.begin(dnsIp);
// Regular DNS names work...
IPAddress ip1;
dnsClient.getHostByName("www.google.com", ip1);
Serial.print("www.google.com: ");
Serial.println(ip1);
// However local ones defined by my router do not (but they work fine everywhere else)...
IPAddress ip2;
dnsClient.getHostByName("Tycho.localnet", ip2);
Serial.print("Tycho.localnet: ");
Serial.println(ip2);
}
void loop() {
}
その出力は次のとおりです (2 番目の IP アドレスは正しくありません)。
connecting...
www.google.com: 74.125.227.84
Tycho.localnet: 195.158.0.0
同じネットワークに接続された Linux マシンから得られた正しい情報は次のとおりです。
$ nslookup www.google.com
Server: 192.168.11.1
Address: 192.168.11.1#53
Non-authoritative answer:
Name: www.google.com
Address: 74.125.227.80
Name: www.google.com
Address: 74.125.227.84
Name: www.google.com
Address: 74.125.227.82
Name: www.google.com
Address: 74.125.227.83
Name: www.google.com
Address: 74.125.227.81
$ nslookup Tycho.localnet
Server: 192.168.11.1
Address: 192.168.11.1#53
Name: Tycho.localnet
Address: 192.168.11.2
どうしたの?