답변:
좋아, 전체 공개 우선 : 나는 현재 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>
응용 프로그램은 자동으로 네트워크 장치 이름을 추측 이러한 모바일 네트워크가 활성화됩니다 때마다 명령이 적용됩니다.
iptables 규칙을 사용하여 모든 포트 53 연결을 원하는 DNS 서버로 전달함으로써이 문제를 "해결했습니다". 3G에 연결된 상태에서 DNS 설정을 수정하려는 Android 4.4.2에서의 나의 경험은 Leo가 설명한 것과 정확히 같습니다. 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 모든 앱은 / dev / socket / dnsproxyd unix 소켓을 통해 netd를 통해 DNS 조회를 수행합니다. 이 스레드는 시스템 속성이 무시되는 이유도 설명합니다.
이 작업을 취소하려면
iptables -t nat -L OUTPUT -n -v --line-numbers
, udp dpt : 53 ~ : xxx.xxx.xxx.xxx : 53에 해당하는 줄 번호를 찾아서
iptables -t nat -D OUTPUT *linenumber*
안타깝게도 지금 당장은 불가능할 수도 있지만 DNS Changer 를 사용해 볼 수도 있습니다 . 당신이 뿌리를 내렸을 때 효과가있을 수 있지만 보장은 없습니다.
사용하기에 좋은 DNS 서비스는 Google의 퍼블릭 DNS 서비스입니다. 이 유형의 문제에 대해서는 여기에서 매우 잘 작동하는 경향이 있습니다.
이 방법으로도 효과가 없으면 계속 답을 찾으십시오. 이와 같은 사이트는 XDA 개발자 입니다. 그들은 안드로이드에 대한 많은 답변을하는 경향이 있습니다.
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 resolve 's ...를 테스트하십시오 .NXDOMAIN 응답을 얻었습니다. 이것은 내가 설정 한 OpenDNS 네임 서버에서 온 것이 아님을 의미합니다 (대체 IP로 응답을 반환하고 추가를 제공하기 위해).
할 때
getprop | grep dns
내가 구성한 것만 볼 수 있습니다. 그러나 WiFi에서 모바일 (3G 또는 4G / LTE)로 전환 할 때 이동 통신사에 할당 된 것으로 인식하는 IP가 보입니다. "DNSwitch"또는 "DNS 체인저"와 같은 앱은 네트워크 변경시 해당 리졸버를 자동으로 재설정 할 수 있습니다. 그러나 getprop
나를보고하는 것은 여전히 진정으로 해결하는 것이 아닙니다.
두 번째 방법 [a] :
내가 시도한 또 다른 방법은 /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
고정 된 설정을 수정하는 것입니다 (그러나 네트워크 이름과 확인 자의 수는 다를 수 있음을 알고 있어야 함). 성공없이.
두 번째 방법 [b] :
그리고 /system/etc/dhcpcd/dhcpcd.conf
DHCP 협상에서 리졸버를 허용하는 매개 변수를 제거했습니다. 성공도 없습니다.
세번째 방법 :
지금까지 조금만 작동하는 유일한 것은 "가난한 사람 VPN"을 사용하고, "SSH 터널"앱을 사용하고, SOCKS4를 사용하는 것이지만, 그 결과를 사용하면 좋은 결과를 얻지 못했습니다.
이력서:
다른 곳에서 설정 한 DNS처럼 보이거나 네트워크가 이동하자마자 모두 전달 (도용)됩니다.
어떻게 오세요? 네트워크 중립을 철거하는 도구를 통신 사업자에게 제공하는 또 다른 더러운 방법입니까?
귀하의 경우 귀하의 질문은 그 때문이었습니다. SSHTunnel이 이동 통신사 검열을 둘러 볼 수있는 대체 솔루션인지 SSH를 사용해 보시겠습니까?
현재 모바일 데이터에서 DNS를 변경할 방법이 없다고 생각합니다. 그러나 휴대 전화가 루팅 된 경우 DNS 설정 과 같은 앱을 사용할 수 있습니다 .
ndc resolver setifdns <iface> <domains> <dns1> <dns2> ...
. 예 :ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4