这大概是一个月或者更久之前的事情了,,现在精准接完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: 19