做了个DNS查询工具 & Switch 下载加速



之前为了自己方便,造了个 dig web interface 的轮子,查询 DNS 记录。

这次简单粗暴地做了个工具,找了个预生成的 dns 服务器 IP 列表,把要查询的域名记录循环扔给各个服务器去查,拿到的最终 A 记录去重做列表,网页测速度。地址在:https://ip.rst.im/dns/

然后,可能是有效的 Switch 会用到的服务器列表:

atum.hac.lp1.d4c.nintendo.net

dragons.hac.lp1.dragons.nintendo.net

bugyo.hac.lp1.eshop.nintendo.net

aqua.hac.lp1.d4c.nintendo.net

storage.lp1.scsi.srv.nintendo.net

receive-lp1.dg.srv.nintendo.net

bcat-topics-lp1.cdn.nintendo.net

其中,*.cdn.nintendo.net 和 *.d4c.nintendo.net 目测都是在 akamai 的cdn 上,理论上拿路由器把这些域名都扔给香港的服务器去解析就会好很多。



做了个DNS查询工具 & Switch 下载加速 by @sskaje: https://sskaje.me/2020/08/dns-query-tool-switch-download-accelerating/

Incoming search terms:

JavaScript DNS-SD



用了 npm 包 multicast-dns https://www.npmjs.com/package/multicast-dns 。其他几个包也试过了,各种残废,要不想太多要不瞎搞,还是这个单纯。

核心的环节是,正确地响应 “_services._dns-sd._udp.local” 的query。

响应的包 answers 放 PTR,additional records 放 SRV、TXT、A。TXT可以放多个 key=value,来处理自定义配置,例如端口、是否加密,认证等信息。

Gist: https://gist.github.com/sskaje/974ec85b39f51dd3a4c6734c2bfb214f



JavaScript DNS-SD by @sskaje: https://sskaje.me/2020/05/javascript-dns-sd/

北京联通IPv6 DNS



之前google搜的时候,看到有人说一个 好像是 dnslab.net 的,千万别用!!!



北京联通IPv6 DNS by @sskaje: https://sskaje.me/2018/12/beijing-china-unicom-ipv6-dns/

Incoming search terms:

DNSMASQ Send Different DHCP Options by Hosts

I choose DNSMASQ as DHCP server, and I want to push different ‘router’ setting to clients.

DNSMASQ supports tagging on hosts/ip ranges/subnets, I tag my mac address (with static ip-mac binding) as ‘prx’ and set ‘option:router’ to 192.168.1.20 if tag matches ‘prx’.

Here is my configuration:

DNSMASQ Send Different DHCP Options by Hosts by @sskaje: https://sskaje.me/2016/10/dnsmasq-send-dhcp-options-hosts/

Incoming search terms:

内网半透明代理

因为不是传统意义上的透明代理,但是基本体验又差不多,姑且称之半透明代理。

背景

公司网络差,内网服务器的微信页面开发经常会被外网带宽影响到,一方面是因为引用了微信、阿里的js、css、字体等资源文件,另一方面,因为早前开发团队留下的坑,存在七牛云上的静态文件从接口端下发的url都带了实时的时间戳。

思路

先处理图片url带时间戳的坑,一方面接口是公共的,我在中间加了一层代理后,把无用的参数过滤掉,强制对结果做了一次小缓存;再安排接口端的同学改造遗留问题,确定了有意义的数据作为版本参数。这样至少保证终端用户能看到304,而不是每次都是200。

然后,所引用的静态文件,都是长时间不会修改的,公司网络如此糟糕的情况下,完全可以在本地搭建一个代理,把请求文件缓存下来。

方案

HTTP的代理很简单,nginx配置一个反向代理即可。
之前某些原因,nginx外边还加了一个haproxy,具体原因会在其他文章里解释。
haproxy可以作为 SNI proxy 使用,而流入的请求无非是http明文传输,或者https传输,需要代理的都是TCP的,所以 nginx 处理 http请求,haproxy 判断 SNI,转发tcp到定制的backend。

在此之前,需要在内网搭建 DNS 服务器,(这里我用了 dnsmasq),可以选择将内网 DHCP 的DNS服务器指向这里,或者把非 DNS 所在服务器的所有UDP 53的包转发到这个服务器上。

我的方案里,所有的服务都在内网的一台机器上。haproxy 监听了 内网IP的80,443端口,nginx 监听了 127.0.0.1:80,还有127.0.0.1:443给gitlab使用。

nginx配置很简单:

haproxy的配置同样:

需要指出的是,我ssl的backend的server,都是 dig 实际域名,拿第一级cname来用的。

最后 dnsmasq 劫持你所需要的域名的解析即可。

内网半透明代理 by @sskaje: https://sskaje.me/2016/10/semi-transparent-proxy/

Incoming search terms: