前言
博主是一个广西人,回到广西以后,发现自己的cdn解析到了德国,我的网页卡的不行,今天想来解决
一下这个问题
路由追踪
我先用了ipip.net的besttrace软件,使用本地dns的时候,正常解析到广州,然后就直接飞德国了
哪有这样玩的dns啊
我觉得问题多半出在广州这个dns服务器上,他已经把cloudfront的香港域名解析给ban了,于是我从
网上找了一个绕一点的dns服务器,香港的
虽然比之前好了,但是还是没有解决问题,我的目的是让cdn直接分发香港的边缘节点给我,那该怎么
办呢,我想了一下,如果是因为cloudfront被拒绝解析了,那么我换一个域名去解析这个cloudfront不
就好了,于是去试了一下。还是不行,痛苦,先埋个坑吧
目前已经手动将cloudfront的节点ip设置成hosts,在speedtest里让延迟有所改善了,就这样吧,太玄
学了
bing重定向问题
昨天解决了类似的问题,这个问题是bing重定向过多
在国内使用魔法上网访问bing的时候,不管是美国的服务器还是香港的服务器都会出现bing重定向过
多,但是我自己亚马逊的服务器就不会出现这个问题
问题排查
ipv6导致的重定向
我登陆服务器curl了一下bing
均会返回这个重定向
但是亚马逊服务器就不会有这个问题
通过比对发现aws没有ipv6地址,而其他两个服务器都有,我就在猜测会不会是这个问题导致的重定向
尝试
curl -4 https://www.bing.com
|
这下没有返回重定向了,而是直接有结果
于是我把魔法的监听地址从0.0.0.0改成127.0.0.1
重新试了试
仍然重定向
nginx导致的重定向
我的魔法部署和亚马逊云的魔法部署还有一点不一样是nginx的配置不相同
前者的魔法使用了nginx反向代理+ws+协议
后者的魔法使用了fallback到nginx
而且我的nginx配置可能也有点问题
于是我比较了一下两者的nginx的配置
可以看到X-Real-IP写的是$remote_addr
而$remote_addr表示的是addr是连接到代理服务器前,主机的真实ip地址
我觉得是X-Real-IP的问题
还有个X-Forwarded-For的问题
这X-Real-IP的header定义是这样的:
在http经过代理服务器时,由于可能需要获取客户端自身ip的逻辑应用,于是有了X-Real-IP
将客户端自身ip加入到请求头中
X-Forwarded-For的定义和X-Real-IP的定义很相似
但不同的是X-Forwarded-For有多个ip
每当经过一个代理节点以后,就会将代理节点的ip添加到X-Forwarded-For中
例如
客户端ip为1.1.1.1
代理服务器ip为2.2.2.2
客户端通过代理服务器访问 www.baidu.com
www.baidu.com收到的header应该是这样的
header: X-Real-IP: 1.1.1.1 X-Forwarded-For: 1.1.1.1, 2.2.2.2
|
但注意,X-Forwarded-For和X-Real-IP是可以篡改的
即回到刚才的话题
我的nginx配置可能是写上了自己的客户端ip,于是被bing识别到geoip属于cn,跳回 cn.bing.com
但又因为当前代理服务器的ip已经作为代理,实际后端收到的请求ip还是代理服务器的ip
又触发了跳转到 www.bing.com
于是就反复横跳,出现了这个问题
当然以上都只是我的猜想,我把nginx配置改成了亚马逊的nginx的配置
现在变成了偶尔可以正常访问,但是还是会出现重定向的问题
我索性把X-Forwarded-For和X-Real-IP去掉
问题好多了,但是还是会重定向
魔法自带的dns问题
我把魔法的客户端和服务端配置都整改了一遍,其中服务端不使用nginx代理
配置如下
{ "log": { "loglevel": "warning" }, "inbounds": [ { "port": 443, "protocol": "****", "settings": { "clients": [ { "id": "", // fill in your UUID "flow": "", "level": 0, "email": "love@example.com" } ], "decryption": "none", "fallbacks": [ { "alpn": "h2", "dest": "****", "xver": 2 }, { "dest": "/dev/shm/h1.sock", "xver": 1 } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "alpn": [ "http/1.1", "h2" ], "certificates": [ { "certificateFile": "/etc/nginx/fullchain.cer", // Replace with your certificate, absolute path "keyFile": "/etc/nginx/cerkey.key" // Replace it with your private key, absolute path } ] } }, "tag": "****" }, { "listen": "****", "protocol": "trojan", "settings": { "clients": [ { "email":"general@trojan-tcp", "password": "", "level": 0 } ], "fallbacks": [ { // if it was not a valid trojan reuqest, for example the trojan password was wrong, pass it to the NGINX HTTP2 cleartext UDS "dest": "/dev/shm/h1.sock", "xver": 2 //Enable PROXY protocol sending, and send the real source IP and port to Nginx. 1 or 2 indicates the PROXY protocol version. Consistent with the above, configuration 2 is recommended. } ] }, "streamSettings": { "network": "tcp", "security": "none", "tcpSettings": { "acceptProxyProtocol": true //Enable PROXY protocol reception, receive the real source IP and port } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] }, "tag": "***" } ], "outbounds": [ { "protocol": "freedom", "tag": "direct", "settings": { "domainStrategy": "UseIP" } }, { "protocol": "Blackhole", "tag": "blocked", "settings": { "domainStrategy": "UseIP" } } ], "routing": { "domainStrategy": "IPOnDemand", "rules": [{ "type": "field", "domain": [ "geoip:geolocation-!cn" ], "network": "tcp", "inboundTag": [ "***" ], "outboundTag": "direct" // "balancerTag": "balancer" }, { "type": "field", "domain": [ "geosite:category-ads-all", "geosite:cn" ], "network": "tcp", "inboundTag": [ "***" ], "outboundTag": "blocked" // "balancerTag": "balancer" }] }, "dns": { "hosts": { "bing.com": "204.79.197.200", "dns.google": "8.8.8.8" }, "servers": [ { "address": "https://dns.google/dns-query", "domains": [ "domain:bing.com", "domain:geosite:geolocation-!cn" ], "exceptIPs": [ "geoip:cn" ] }, { "address": "114.114.114.114", "domains": [ "domain:geosite:cn" ] }, "8.8.8.8", "8.8.4.4", "localhost" ] } }
|
客户端使用了客户端dns本地解析(就是这一步坑的,之前没发现)
虽然已经配置好了但是问题依旧
我就在想会不会和dns解析的地域有关系呢
于是我把客户端dns给去掉,问题居然解决了
总结
一般都和魔法的dns解析策略有关系,只要好好配置就可以轻松解决,不会踩那么多坑