shadowsocks / ChinaDNS

Protect yourself against DNS poisoning in China.
GNU General Public License v3.0
3.6k stars 1.29k forks source link

指针压缩不兼容 getaddrinfo? #58

Closed sdysj closed 9 years ago

sdysj commented 9 years ago

开启后在 OpenWRT 上 ping 和 resolveip 都不能用。

myliyifei commented 9 years ago

你是什么版本啊 2015年1月30日 下午1:47于 "sdysj" notifications@github.com写道:

开启后在 OpenWRT 上 ping 和 resolveip 都不能用。

— Reply to this email directly or view it on GitHub https://github.com/clowwindy/ChinaDNS/issues/58.

sdysj commented 9 years ago

就是最新版啊,暂时发现在路由本机 ping 是可以的就是要等10秒,而用 resolveip 除了 google 其他都不能返回。

qiukun commented 9 years ago

-> #59

sdysj commented 9 years ago

可以了,问题在于 ipv4 和 ipv6 同时存在的环境里如果 ipv6 不能连接外网的时候会出现问题,resolveip -4 强制用 ipv4 出口就行了,chinadns 本身最好也设置一个开关,不然会影响某些程序运行。

clowwindy commented 9 years ago

什么的开关

myliyifei commented 9 years ago

他想说强制用ipv4的开关 2015年2月2日 上午11:23于 "clowwindy" notifications@github.com写道:

什么的开关

— Reply to this email directly or view it on GitHub https://github.com/clowwindy/ChinaDNS/issues/58#issuecomment-72401874.

clowwindy commented 9 years ago

什么叫强制用 ipv4,ChinaDNS 要怎样才能做到这一点

sdysj commented 9 years ago

又查了一下貌似这问题很普遍。

http://www.linksysinfo.org/index.php?threads/how-to-force-to-use-ipv4-instead-of-ipv6-for-certain-domains.70297/

http://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups

我也不知道怎样表述清楚,相关代码我也不会看。

sdysj commented 9 years ago

resolveip 的代码,可以参考一下

https://github.com/openwrt-mirror/openwrt/blob/master/package/network/utils/resolveip/src/resolveip.c

clowwindy commented 9 years ago

ChinaDNS 本身没有解析 DNS,因此不知道怎么才能做到强制使用 IPv4。决定用 IPv4 还是 IPv6 的是发起 DNS 查询的程序。

本身把系统配成 IPv6 不通但又分配了 IPv6 地址和路由就是不应该的。因为根据 RFC 系统默认会优先使用 IPv6。

sdysj commented 9 years ago

对,不过有趣的是 chinadns 如果不开压缩指针就非常正常。所以我觉的压缩指针这部分的实现有点问题。

clowwindy commented 9 years ago

我没有你们的这种 “ipv4 和 ipv6 同时存在的环境里如果 ipv6 不能连接外网” 的网络环境,只能你们自己研究一下了。

aa65535 commented 9 years ago

可以看 #59 我帖的日志,启用 -m 后从 8.8.4.4 返回状态的都没有 delay pass filter 之类的提示了。 看样子是在重试,间隔时间 5s 目前发现 nslookup 和 wget 解析时会有这种问题,dig 不会。

sdysj commented 9 years ago

我想提醒下我是在 openwrt 即路由本身上操作的才有问题,你们的 openwrt 默认 lan 不是带 ipv6 的吗?

开启 -m 时:

root@OpenWrt /root [#] resolveip baidu.com
root@OpenWrt /root [#] resolveip -4 baidu.com
220.181.57.216
220.181.57.217
123.125.114.144

没开启 -m 时:

root@OpenWrt /root [#] vim /etc/init.d/chinadns
root@OpenWrt /root [#] /etc/init.d/chinadns restart
ChinaDNS 1.3.0
root@OpenWrt /root [#] resolveip baidu.com
220.181.57.216
123.125.114.144
220.181.57.217
root@OpenWrt /root [#]
clowwindy commented 9 years ago

试试 ping -n

sdysj commented 9 years ago

ping -n 在开启 -m 时一样要10秒才解析出 IP。

clowwindy commented 9 years ago

@Pentiumluyu 看起来指针压缩的兼容性还是不太好的,如果没有办法解决的话只能不再作为推荐的方法了。

sdysj commented 9 years ago

对,其实推荐用户在自己 vps 用 dnsmasq 简单搭一个非53端口的 DNS 配合 chinadns 是一劳永逸的,chinadns 本身提供延迟方法但也别设置一个默认值,当然这是个人喜好。

clowwindy commented 9 years ago

不推荐除了 chnroutes + 本地直连、国外 DNS 走 VPN/Shadowsocks 之外的任何方法,因为这个方法用起来没有一点问题,不值得浪费时间在别的方法上。

我自己就是路由器上 ShadowVPN + ChinaDNS + chnroutes,除了换 VPS 和上次 GFW 升级,万年不用动它,每次版本更新我都懒得升级我自己路由器上的版本。

sdysj commented 9 years ago

知道吗现在二三线城市用任何 VPN 都不稳定,例如现在我在广州用 ShadowVPN 不过10分钟立即 UDP 端口全丢包,只剩 ICMP 给你测试欺骗你没问题。多手段是以后翻墙常态了,如果还要顾及 DNS 设置的话就有点麻烦了,想解决好 shadowsocks 的 DNS 问题还要跑一个 ss-tunnel 就显得多余了,况且在 vps 用 dnsmasq 搭的纯 dns 结果转发起得作用和 ss-tunnel 一样的,不会有 CDN 优化的问题,当然这是个人喜好。

clowwindy commented 9 years ago

那就用 ss-tunnel 呗,装一个又不费事。

实话说我只有解决自己的问题的兴趣,帮每个地区的人解决他们的问题很无趣,建议大家多尝试,多动手,多分享自己的方法,如果会改代码就自己改代码然后发 pull request,指针压缩这个功能就是这样来的,没有更好的办法了。

ghost commented 9 years ago

我这里6in4的IPv6也会有这个问题,而且IPv6是可以连通的

cpktpoetkxwz commented 9 years ago

应该是在处理non-existent domain出的问题,希望#66 能解决 #58 和 #59 。

riveryan commented 9 years ago

非常感谢,你们的对话解决了我的问题...