Android KitKatでモバイル接続のDNSを変更する方法は?


24

私は地元のモバイルISPからの検閲を避けたい(それは例えば、何らかの未知の理由でimgurをブロックする)。

スクリーンショット
スクリーンショット(大きなバリアントの画像をクリック)

DNSをGoogle DNSまたはOpenDNSに変更することでこれを回避できると確信していますが、KitKatでこれを実現する方法はわかりません。

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted

回答:


18

OK、まず最初に完全な開示:私は、現在Google Playストアにあり、Android 4.4のモバイル接続のDNSを変更できるアプリの作成者です。アプリにはルートが必要で、数ドルの費用がかかり、オーバーライドDNSと呼ばれます。削除された回答について、明確に公開している限り、アプリにリンクしても問題ないと言われました。

今回のAndroid(4.4)のリリースで見つかった問題は、明らかにキャッシュの理由で、システムの動作が変更され、すべてのDNSクエリが次のシステムデーモンにリダイレクトされることですnetd(4.4より前のAndroidネットワーキングに関連するプレゼンテーションへのリンクです)ただし、これらのトピックの一部をカバーしています)。

getprop/のsetprop方法はもう動作しません。これらの値は、変更されると、netdデーモンによって単に無視されます。

/dev/socket/netdソケットを介してデーモンと直接通信する必要があります。Androidにndcは、まさにこの仕事をするというツールがあります。

DNS関連のものの構文は次のとおりです。

# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>

アプリが自動的にネットワークデバイス名を推測し、これらはモバイルネットワークがアクティブになるたびにコマンドを適用します。


setifdnsの正しい構文は次のとおりですndc resolver setifdns <iface> <domains> <dns1> <dns2> ...。例:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
クリスチャンドゥルーズ

@ Christiand'Heureuseあなたは正しい、私は答えを更新した、ありがとう。
MaxChinni

13

iptablesルールを使用してすべてのポート53接続を目的のDNSサーバーに転送することにより、この問題を「解決」しました。3Gへの接続中にDNS設定を変更しようとしたAndroid 4.4.2での私の経験は、レオが説明したとおりです。getprop | grep dns [0-9] \]:およびdhcpd.confの値が無視されます。

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53

ここで説明するような理由は次のとおりです。http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6すべてのアプリDO DNSルックアップNETDによっては/ dev /ソケット/ dnsproxyd Unixソケット経由。このスレッドは、システムプロパティが無視される理由も説明します。

これを元に戻すには、次の操作を行います

iptables -t nat -L OUTPUT -n -v --line-numbers

、udp dpt:53 to:xxx.xxx.xxx.xxx:53に対応する行番号を見つけて

iptables -t nat -D OUTPUT *linenumber*

2
ありがとう!また、理由の要約:Googleは広告ブロッカーとの軍拡競争を行っています。現在の手段を無効にしようとすると、広告ブロッカーが機能し、広告ブロッカーは別のブロックに移動しましたが、すべてのユーザーは(広告ブロッカーを使用するかどうかに関係なく)そのGoogleの動きに永遠に悩まされます。...誰もが広告ブロッカーとの戦いが今では馬鹿げた動きだと知っていたと思いました。愚かなグーグル。(また、オープンソースアプリAFWALLは、このカスタムルールを簡単に追加する便利な方法です)
gcb 14

このようなカスタムiptablesルールを適用する方法についてのAfWall + wiki
betatester07

1

残念ながら、現時点では不可能な場合がありますが、DNS Changerを試すことは可能です。あなたが根ざしている場合、これは動作する可能性がありますが、保証はありません。

使用するのに適したDNSサービスは、GoogleのパブリックDNSサービスです。この種の問題については、ここでうまく機能する傾向があります。

これでもうまくいかない場合は、答えを探し続けてください。このようなものに適したサイトはXDA Developersです。彼らは、Androidに関して多くの答えを持っている傾向があります。


1

私はKitKat Cyanogenmod 11を使用しています。つまり、デフォルトでルート化されています。それにもかかわらず、私は失敗のみを報告することができます:

第一の方法:

を試してみるadb shell

setprop net.rmnet0.dns1 208.67.222.222
setprop net.rmnet0.dns2 208.67.222.222
setprop net.rmnet1.dns1 208.67.222.222
setprop net.rmnet1.dns2 208.67.222.222
setprop net.rmnet2.dns1 208.67.222.222
setprop net.rmnet2.dns2 208.67.222.222
setprop net.dns1 208.67.222.222
setprop net.dns1 208.67.222.222

そして、どのIP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tkが解決するのかをテストします... NXDOMAIN応答を受け取ります。これは、設定したOpenDNSネームサーバーからのものではないことを意味します(追加のIPで応答を返す)。

するとき

getprop | grep dns

設定したものだけが表示されます。ただし、WiFiからモバイル(3Gまたは4G / LTE)に切り替えると、モバイルキャリアに割り当てられていると認識するIPが表示されます。「DNSwitch」や「DNS Changer」などのアプリは、ネットワークの変更時にこれらのリゾルバーを自動的に再設定できます。しかし、getprop私に報告しているのは、まだ本当に解決していることではありません。

2番目の方法[a]:

私が試した別の方法は/system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf、そこに修正されたものを修正することです(ただし、ネットワーク名とリゾルバの数は異なる可能性があることに注意してください)。成功なし。

2番目の方法[b]:

また、/system/etc/dhcpcd/dhcpcd.confDHCPネゴシエーションでリゾルバを受け入れるためのパラメータを削除しました。成功しません。

3番目の方法:

これまでのところ、少しうまくいく唯一のことは、「貧乏人VPN」、アプリ「SSHトンネル」、SOCKS4を使用することですが、それを使用しても良い結果が得られませんでした。

履歴書:

他の場所に設定されたDNS、またはネットワークがモバイルになるとすぐにすべてが転送される(ハイジャックされる)ようです。

それで、どうして?キャリアにネットワークの中立性を破壊するツールを提供する別の汚い方法ですか?

あなたの場合、あなたの質問はそのためでした。SSHTunnelがキャリア検閲を回避するための代替ソリューションである場合、試してみるSSHがありますか?


ブロックを回避する方法を見つけましたが、それは面倒で、ケースバイケースです。私はrootsなので、hostsファイルにアクセスできます。次に、imgurの直接IPアドレスを探し、それらの値を手動でhostsファイルに入力しました。今のところ問題は解決しました。
user51893

1

今日、同じ問題に遭遇しました。輸血のおかげです。私はそれを解決するために「DNS forwarde r」というアプリを開発しようとしました。システム上のDNSサーバーは変更しませんが、DNSクエリを別のサーバーに転送します。この回避策は、Kitkat(Nexus 5 / 4.4.3およびMoto Razr / CM11)でうまく機能します。他の人にも役立つことを願っています。


これは実際に機能しますが、なぜあなたが反対票を投じたのか
わかり

0

現在、モバイルデータのDNSを変更する方法はないと思います。ただし、電話がルート化されている場合は、Set DNSなどのアプリを使用できます


悲しいことに、そのアプリはAndroid 4.3以降をサポートしていないようです:(アプリの説明から:「しばらくの間、Android 4.3にインストールしないでください。DNSの処理がカーネルで変更された方法に問題があります。 4.3デバイスの
市場からそれを引き出しました

あなたの質問は、Android 4.4。*であるAndroid KitKatに必要なのに、Android 4.3はJellybeanであると言っています。
カランラジバルア14年

既にデバイスのPlayストアでアプリのページを開いていて、一番上に「お使いのデバイスはこのバージョンと互換性がありません」と表示されています。だから、バージョン4.3からKitKatに問題が続くと確信しています。
user51893

FAQによると、アプリの推奨は実際このサイトの一部ではありません。Androidがネイティブにできるかどうかという質問に答えました。Playストアを自分で検索することをお勧めします。
カランラジバルア14年

ヒント:AppBrainのアプリページにアクセスすると、いくつかの選択肢が表示されます(右上4)。ただし、そのセクターのほとんどのソリューションにはルートアクセスが必要です。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.