上级代理、本地DNS二三事

这大概是一个月或者更久之前的事情了,,现在精准接完ATRI的两刀才过来把这个坑填上,,

首先是上级代理相关的问题,之前装openstack的时候就发现,没有稳定好用的命令行全局代理软件,下载源又大多数是国外源,再加上openstack脚本必须一次成功,最后就显得上级代理是一个刚性需求。

这里中间也经过了各种手动调试配置,最后还是用了一个叫做ss-tproxy的项目(Github链接),用来解决上级代理机的网络配置部分,这里官方教程给的很详细,就不再细说。

当然iptables或者其他防火墙的规则可以自己配,不过前提是确保能配好不出问题,,

本地DNS就是之后的事情了,当时才知道CloudFlare可以特挑IP作为节点地址(不过现在会出现全部连不上的情况,可能是CloudFlare加以管控),现此方法使用CloudFlare可能已经失效。

所以最后DNS服务器用了dnsmasq,由脚本批量ping CloudFlare节点IP,挑出当前时间当前网络下最优的IP,然后把这个IP和需要使用CloudFlare代理的域名绑定,所有客户机将DNS指向负责DNS的主机,避免每次都更新。需要注意的是,dnsmasq在非纯IPv4环境下,直接使用自定义hosts将会返回特调的IPv4和解析出来的IPv6,所以直接使用address语句强制定义。

下面贴出来批量ping脚本(Python)

from multiping import *

iplist = []

for i in range(208, 212):
    for j in range(4, 104):
        ts = "162.159." + str(i) + "." + str(j)
        #print(ts)
        iplist.append(ts)

for i in range(0, 255):
    ts = "104.16.160." + str(i)
    iplist.append(ts)

#iplist.append("162.159.208.4")
#iplist.append("104.16.160.125")

#mp = MultiPing(iplist)

avgping = {}
success_count = {}
total_num = 120

for i in range(0, total_num+1):
    #mp.send()
    #resp, no_resp = mp.receive(1)
    resp, no_resp = multi_ping(iplist, timeout=1.5, retry=1, ignore_lookup_errors=True)
    #print(i)
    for addr, rtt in resp.items():
        #print("%s %s" % (addr, rtt))
        if addr in avgping:
            avgping[addr] = avgping[addr]+rtt
        else:
            avgping[addr] = 0
        if addr in success_count:
            success_count[addr] = success_count[addr]+1
        else:
            success_count[addr] = 0

for addr, scount in success_count.items():
    if scount > 0:
        avgping[addr] = avgping[addr]/scount
        avgping[addr] = avgping[addr]*1000
        print("%s %s %s" % (addr, str((total_num-scount)/total_num*100), avgping[addr]))

#print(success_count)
#print(avgping)

Views: 20

发布者:Tabing010102

???

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据