关于校园网 DNS 解析问题求助

2015-05-27 15:20:36 +08:00
 fxxkgw

我有个域名地址,通过智能DNS会根据不同运营商把客户端数据post到不同服务器。
服务器上通过一个PHP接收数据并获取客户端地址,代码如下:

if($_SERVER['HTTP_X_FORWARDED_FOR'] && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/',$_SERVER['HTTP_X_FORWARDED_FOR'])) {
$xff = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif($_SERVER['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/',$_SERVER['HTTP_CLIENT_IP'])) {
$xff = $_SERVER['HTTP_CLIENT_IP'];
}
else {
$xff = $_SERVER['REMOTE_ADDR'];
}

现在分析获取的数据,发现获取的客户端配置的IP DNS很多是联通或者电信的,但是域名却被解析到教育网的IP上,xff获取的IP也是教育网的
其他服务器没出现这问题,比如联通的IP DNS解析域名到联通服务器,xff也是联通,唯独教育网有这个问题,请问这个要怎么解释呢?

3373 次点击
所在节点    DNS
8 条回复
Septembers
2015-05-27 15:28:58 +08:00
lsylsy2
2015-05-27 16:01:47 +08:00
很多教育网不是纯的教育网,而是类似长宽、移动这样,拉了其他宽带的线做出口。可能是这种情况。
fangjinmin
2015-05-27 16:06:12 +08:00
你要做的是不是取得用户的IP,然后根据IP,选择服务器?
HTTP_X_FORWARDED_FOR是经过了代理服务器的转发后才会有的。
说明教育网经过了代理服务器的中转。
fxxkgw
2015-05-27 16:11:07 +08:00
@fangjinmin 感谢回复。
大体流程是先获取用户IP DNS 这些不需要远程服务器的脚本,直接在客户端上处理。然后post到一个URL,只能DNS会根据用户信息解析出URL对应的IP,类似于客户端运行nslookup 或dig命令。然后发送数据到远程服务器,服务器再接收数据。
如果用户配置的DNS是电信或联通的,那为啥解析出的URL地址对应的是教育网的呢?
fangjinmin
2015-05-27 16:18:53 +08:00
@fxxkgw 我不知道你说的智能DNS是怎么做的,我觉得你要去研究一下,你说的所谓智能DNS了。你希望做的结果同一个网络的IP,POST数据到布署在这个网络的专用服务器上吧?但是有可能你说的智能DNS是否会根据网速判断呢?比如如果连接到电信的服务器更快,它是否是选择了电信的服务器?
fxxkgw
2015-05-27 16:25:32 +08:00
@fangjinmin 这个是CDN相关的,智能DNS作用就是,比如你是联通用户,访问www.abc.com时,就给你把abc.com解析到联通的服务器上,同理你是电信用户,就解析到电信服务器上。这样可以优化网站访问速度。
fangjinmin
2015-05-27 16:36:26 +08:00
其实这个就很好解释了,教育网的IP,但是出口是在电信或者联通。你客户端取到的是教育网的IP,你的程序也是取到的教育网的IP,因为程序取的是HTTP_X_FORWARDED_FOR。而CDN取到的地址用PHP里面的参数来打比方的话,就是REMOTE_ADDR。
jsq2627
2015-05-27 18:07:10 +08:00
你这个“智能DNS”的描述不清楚啊
这到底是反向代理还是 DNS?
HTTP_X_FORWARDED_FOR 是反向代理才有的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/194125

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX