web-dev-qa-db-ja.com

構成Android 7.1デバイスでローカルDNSサーバーを使用する

LAN上のDNSサーバーを使用してサーバーのホスト名をローカルアドレスとして解決するためにAndroidデバイスを取得しようとしていますが、機能しません。

DHCPアドレスを渡すときに、ルーターをだまして(*)DNSサーバーのローカルIPアドレス(192.168.1.99)を渡すようにしました。 Windows 10を実行しているデバイスからこれが当てはまるのは、ネットワークプロパティの下を見ると、必要なプライマリとセカンダリのDNS IPアドレスを使用していることと、ローカルサーバーを正しく表示されているホスト名からローカルアドレスに解決しているためです。

(*)基本的に、ルーターはDNSサーバーを設定させず、ラジオボックスは選択しません。 JavaScriptを検査すると、ブレークポイントを設定できるため、私が持っていない静的IPアドレス(および静的IPを設定するためのラジオボックス)がある場合にのみDNSサーバーを設定できるロジックをバイパスできますとにかく選択されます!)。フォームを送信したところ、変更が反映されていないように見えましたが、一部のデバイスは適切なDNSサーバーを取得しています。更新:DHCPアドレスを割り当てるときにDNSサーバーを通過させるためにトリックを必要としない別のルーターを見つけましたが、Android stillはDNSサーバーを使用していません戻る!

しかし、Androidでは機能せず、ホスト名を世界に見えるIPアドレスに解決し、DHCPが提供しているDNSサーバーを使用していないことを示します。 (そして、不可解なことに、外部IPアドレスを介してサーバーにアクセスする stopped working 、これがホスト名を取得して内部アドレスに解決する必要がある理由のすべてでした!)

私は Termux を使用して問題のトラブルシューティングを試みたところ、_getprop net.dns1_および_getprop net.dns2_がIPv6アドレスを返したことがわかりました。 ISP。それで、ルータで使用したトリックがAndroidで機能しなかったのは、おそらく何らかの理由であると思いました。

そのため、デバイスのDNSサーバーを手動で構成してみました。 Settings -> WiFi -> (long press network name) -> Modify network -> IP settings: Staticを使用して、デバイスがDHCP経由で取得しているものと同じネットワーク構成を入力しました。

_IP address: 192.168.1.2
Gateway: 192.16.8.1.1
Network prefix length: 24
DNS 1: 192.168.1.99
DNS 2: 8.8.8.8
_

しかし、この手動構成では、LAN上の何にもアクセスできません。たとえば、192.168.1.1にあるローカルルーターのWebページにアクセスできません。ブラウザからアクセスできません。 Termuxで同じIPアドレスにpingできない。「ネットワークに到達できません」と表示されます。 termuxで_ifconfig wlan0_およびrouteを実行すると、DHCPを介してIP設定を構成した場合の出力と同じように見えます。ただし、_getprop net.dns1_は引き続きIPv6アドレスを返すため、コマンドが有効なデータを返すことが信頼できるかどうかはわかりません。更新:OK、実際には4つのDNSアドレスがあります。最初の2つは何らかの形でリークしているISPからのIPv6アドレスで、最後の2つは設定した2つのIPv4アドレスです。

これは、新しいAndroidバージョン、古いAndroid 4.3デバイスに問題がないようです(ホスト名を正しく解決するために静的IP構成を必要としません)。

この問題のトラブルシューティングを行い、DNSを適切に機能させるには、他にどのようなことができますか?

更新: この投稿 が見つかりました:

  • 2つのDNSサーバー、ローカルIPv4サーバー(192.168.1.230)とISP IPv6サーバー(2a01:e00 :: 1)があります。
  • IPv4 DNSサーバーはローカルドメインを認識していますが、IPv6は認識していません。
  • AndroidはたまたまIPv6 DNSサーバーを使用しているため、ローカルネットワークのホストを解決できません。

これは、私の設定で見ているものと一致します。しかし、ポスターは私が問題を抱えている「これは設計どおりに機能している」と主張しています。次に、4つの可能な回避策を示します。

  • 可能であれば、ローカルDNSサーバーにIPv6アドレスを追加し、そのアドレスをIPv6 DNSサーバーとしてアナウンスするようにルーターを構成します。 ルーターはDNSのIPv6アドレスを指定できないため、これは機能しません。
  • 可能であれば、ルーターのローカル名を構成します。 これが何を意味するのかわかりません。ルーター自体はDNS機能を提供しません
  • パブリックドメインを使用して、ISPルーターが内部名を解決できるようにします。 これが何を意味するのかわかりません-パブリックドメインはどのようにして内部IPアドレスを参照できますか???
  • ルーターでIPv6 DNSを無効にする(またはIPv6を無効にする)。 ルーターは、IPv6に関して無効化またはその他の構成を行う方法を提供していません

そのため、ネットワーク上の一部のデバイスが機能するために必要なリソースを認識できないため、効果的にDOAであるシステムでまだ立ち往生しています。

更新:別のDHCPサーバーをセットアップし、ルーターのDHCPサーバーを無効にしましたが、Androidデバイスがリストに2つのIPv6 DNSサーバーをまだ取得しています-1〜2秒の遅延があるようですDHCPサーバーが報告した後、IPv6サーバーが表示される前にDNSサーバーが表示され、それらがalways挿入されますの前にサーバーが報告したアドレス。レポートされたDNSサーバーの数を増やして、Androidが持つ可能性のあるすべてのテーブルを埋めようとしましたが、他の32のDNSサーバーを使用しても、最初にさらに2つ挿入され、合計34になります。 Androidがこれらのアドレスを取得する方法と、強制的に強制的にブロックする方法を教えてください。これは私を夢中にさせています!

更新:「DNSチェンジャー」と呼ばれるアプリを見つけました。問題を修正しているようですが、実際の修正が見つかるまでは回避策以上のものになるかどうかについては疑問があります。ある種のVPNを作成しているように見えますが、それがどのように機能するかについてもっと知りたいです。ファイアウォールの外にトラフィックをルーティングしていますか?どこへ?ホスト名の代わりにIPアドレスを使用して同じテストを実行する場合と比較して、自分のサーバーへの速度テストで平均転送速度の約20%が得られるため、すべてがルーティングされているのかと思います。私は約7つの異なる外部ホスト名を報告し、転送全体がそれらのそれぞれを通過したと主張する別のアプリを使用しました。さらに、ネットワークがダウンした場合、この回避策は失敗します。

更新:Android 5.1を実行しているroot化されたデバイスでもこの問題が発生します...内部サーバーを指す静的IPアドレスとDNSを設定し、setpropを使用して設定しました- every DNSサーバーから内部DNSサーバーのIPアドレスへ...それでも、termlookではnslookupを使用すると、8.8.8.8を使用して名前を検索する必要があります。指定したDNSサーバーを実際に使用するためにAndroidを取得するにはどうすればよいですか?

5
Michael

使用するDNSとAndroidデバイスはdhcpで割り当てたものを使用し、それらをの下部に追加するようですリスト、これは他のものを失敗させ、あなたが望んだものを使います、なぜグーグルがそれをしたのか分かりません

1
JS168

同じ問題が発生しています。このようなバグがAndroid=に存在し、修正されていないことは信じられません。

コマンドラインからDNSリゾルバーを手動で設定することで回避できます。問題は、これにはrootが必要なことです。

例えば

ncd resolve setifdns wlan0 8.8.8.8 4.4.4.4

この方法をサポートするために DNSman を見つけたので、パーティションを再起動または変更するたびに入力する必要はありません。これは、F-Droidで利用可能なオープンソースアプリで、ルートが必要です。

お役に立てば幸いです。

0
nachoparker

Android 6.1.xなので、テザリングされたデバイスのDNSのみを変更できます。何を設定しても、使用しているアプリに関係なく、他のすべては無視されます。

DNSの問題 から。

(ここでAndroid 6.1.x、私が思うに、Android 6.0.x)

0
Gling

私は実用的な解決策を見つけました。このアプリ https://play.google.com/store/apps/details?id=com.frostnerd.dnschanger 「オープンソース」です(引用のみ) https:// git .frostnerd.com/PublicAndroidApps/DnsChanger デバイスへのVPN接続を作成して、すべてのDNSリクエストをリダイレクトします。

社内のGitlabでホストされているため、すべてを実行して元に戻すことができるので、あまり気に入らない。

同じことを実現するためにアドホックのopenvpnトンネルを作成する方法を検討しています。

0
Alex

Android 5.1で動作することがわかったソリューションです。詳細については、この記事を参照してください[ https://developer.mozilla.org/en-US/docs/ Archive/B2G_OS/Developing_Firefox_OS/Customizing_DNS] [1]

adb pull /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf 20-dns.conf

22〜26行目を必要なものに変更します。私のデバイスでは、22〜26行目を削除し、17〜20行目を次のように変更しました。

count=1
    for i in 1 2 3 4; do
        setprop dhcp.${intf}.dns${i} ""
    done

count=1
    for i in 1 2 3 4; do
        setprop dhcp.${intf}.dns${i} "192.168.7.8"
    done

そのIPを必要なものに変更します

ファイルを変更したら、システムをアンマウントし、デフォルトファイルを変更したファイルで上書きします。

adb Shell shell mount -o rw,remount /system
adb Push /yourpath/20_dns.conf /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
adb Shell chmod 644 /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
adb Shell mount -o ro,remount /system

再マウントがここにあるようなものではない可能性があることがわかったので、adb Shell mountを実行してすべてのマウントポイントを確認し、デバイスで適切なマウントポイントを見つけます

再起動後、再起動します。 adbからデバイスのシェルに移動して機能するかどうかを確認し、tcpdump udp port 53を実行して

0
iulisiio