标签 分流 下的文章

使用dnsmasq基于大陆域名白名单分流解析域名

有朋友问我怎么用dnsmasq做分流解析,其实挺简单,下面介绍一下。

以下以debian系linux为例,已在路由器做ip地址分流,参考routeros配置vpn分流大陆ip

1,安装dnsmasq

apt update
apt install dnsmasq

2,配置dnsmasq,默认使用8.8.8.8和8.8.4.4解析

vi /etc/dnsmasq.conf

粘贴下面三行到文件末尾

no-resolv
server=8.8.8.8
server=8.8.4.4

3,配置dnsmasq的解析白名单
这里使用了felixonmars/dnsmasq-china-list的大陆域名白名单
这个列表使用了114.114.114.114的dns服务器,这里建议使用运营商给你的dns服务器,一是解析会快一点,二是cdn识别会更准确

这里假设拨号获得的dns服务器是223.5.5.5,可以使用下面命令来生成使用运营商dns服务器的域名列表

curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf|sed 's/114.114.114.114/223.5.5.5/g' >/etc/dnsmasq.d/accelerated-domains.china.223.5.5.5.conf

如果需要使用大陆dns服务器解析apple或者google的域名,可以使用下面命令生成对应列表,这里我不推荐。

curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf|sed 's/114.114.114.114/223.5.5.5/g' >/etc/dnsmasq.d/apple.china.223.5.5.5.conf
curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/google.china.conf|sed 's/114.114.114.114/223.5.5.5/g' >/etc/dnsmasq.d/google.china.223.5.5.5.conf

4,重启dnsmasq服务使配置生效

service dnsmasq restart

5,测试dns分流解析
首先使用大陆dns服务器解析google.com,多次测试得到的ip地址并不是google的ip,可以用ipip.net来查询ip所属

dig google.com @223.5.5.5

然后使用dnsmasq解析google.com,多次测试可以发现ip地址是google的

dig google.com @127.0.0.1

6,自己添加域名到白名单
别人制作的域名列表中如果不包含自己需要的域名,可以向列表追加

echo 'server=/你需要的域名/223.5.5.5' >>/etc/dnsmasq.d/accelerated-domains.china.223.5.5.5.conf

ipip.net数据生成Routeros的address-list大陆分流列表

原来一直使用apnic的ip地址按CN生成Routeros的address-list分流列表,偶然发现列表里有境外ip,检查发现是大陆厂商的ip宣告到美国了。
平时用ipip.net来查看ip地址所在地,通过几年使用发现ipip.net的地址库对比其他ip查询网站来说更准确些,并且ipip.net在github每月发布大陆地址列表
上述ip地址宣告变化可以从ipip.net大陆ip列表的20190304这个github commit看出,这个commit中203.20.138.0/23被删除,用ip.cn站长之家查看,发现是福建电信ip,如图
ip.cn
通过apnic最新CN列表查找发现在203.20.136.0/21这个段里面,如图
apnic
但是ipip.net查询,是印尼电信,如图
ipip.net
而且通过路由追踪到了印尼,如图
路由追踪

于是写了行命令自动从github下载并转成routeros的address-list,并添加了私有ip地址192.168.0.0/16,172.16.0.0/12和10.0.0.0/8

curl -s https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt |sed -e 's/^/add address=/g' -e 's/$/ list=CNIP/g'|sed -e $'1i\\\n/ip firewall address-list' -e $'1i\\\nremove [/ip firewall address-list find list=CNIP]' -e $'1i\\\nadd address=10.0.0.0/8 list=CNIP comment=private-network' -e $'1i\\\nadd address=172.16.0.0/12 list=CNIP comment=private-network' -e $'1i\\\nadd address=192.168.0.0/16 list=CNIP comment=private-network'>cnip.rsc

并添加了定时任务每月生成一次放在我的网站,可以在这里下载

Routeros基于shadowsocks的国际多线分流

以下内容未完全实践。

一般iplc线路机场都会提供多条不通地域的线路,比如京德,沪美,沪日,深港,深新等。
以上每条线路基本都是物理上的最优线路,比如京德线路可以做到北京到欧洲120ms左右,而通过大家常用的香港出口到欧洲的话大部分是绕道美国,少部分走东南亚中东进入欧洲,前者需要250ms+,后者150ms+,还有对于大陆北方用户来说,通过沪美线路到美国比通过香港出口到美国延迟要少30ms以上。
所以如果能充分利用这些线路,能大大优化翻墙体验,自己当宽带运营商,想怎么走就怎么走。

要实现多出口分流,需要用到策略路由,以下以routeros为主路由,openwrt为旁路由,使用深港作默认线路,欧洲走京德,北美走沪美。

首先需要获取世界各地ip地址,比如欧洲都有哪些IP地址,这些地址走京德线路,北美都有哪些ip,需要走沪美线路等,我在之前文章routeros配置vpn分流大陆ip 中介绍过怎么获取大陆ip地址列表,可以通过类似方法获得。由于是分国别IP,比如欧洲列表需要合并各国IP,减少条目,加快路由查询效率。此处为难点,涉及到很多问题,比如土耳其的IP不是欧洲,但是走京德线路比深港快,对比来说,俄罗斯远东ip走京德的话会绕很长的回头路,所以IP地址的界线在哪,怎么优化,由于合并了IP地址怎么后期添加等等,所以一个这是个难点。

使用三个openwrt做旁路由,openwrt-1使用京德线路,openwrt-2使用沪美线路,openwrt-0使用深港线路

配置策略路由,目的地址是欧洲IP转发给openwrt-1,目的地址是北美IP转发给openwrt-2,目的地址是大陆ip的走默认网关,其他IP地址转发给openwrt-0

还有dns问题,怎么高效的使用全球cdn

在此抛砖引玉,欢迎大家交流分享。

routeros配置vpn分流大陆ip

20200503更新:添加dnsmasq白名单分流解析
20200416更新:添加使用ipip.net的大陆ip列表生成命令并添加了私有ip地址

ros使用pppoe连网,ros上配置vpn连接香港服务器上的ros。目标:内网需要翻墙的ip通过大陆ip列表分流,大陆ip走默认路由,境外ip走vpn。其他内网ip全部走默认路由。
首先下载大陆ip列表,推荐方法2
方法1:

curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute.txt

生成的txt文件使用sublime的多行编辑功能或其他方式转换成ros的cn-ip.rsc脚本格式。

/ip firewall address-list
add list=cn-ip address=1.0.1.0/24
add list=cn-ip address=1.0.2.0/23
。。。

方法2:使用ipip.net发布在github的大陆ip列表生成

curl -s https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt |sed -e 's/^/add address=/g' -e 's/$/ list=CNIP/g'|sed -e $'1i\\\n/ip firewall address-list' -e $'1i\\\nremove [/ip firewall address-list find list=CNIP]' -e $'1i\\\nadd address=10.0.0.0/8 list=CNIP comment=private-network' -e $'1i\\\nadd address=172.16.0.0/12 list=CNIP comment=private-network' -e $'1i\\\nadd address=192.168.0.0/16 list=CNIP comment=private-network'>cnip.rsc

以上脚本在CNIP列表里添加了私有ip地址192.168.0.0/16,172.16.0.0/12和10.0.0.0/8

方法3:下载别人制作好的脚本
http://www.iwik.org/ipcountry/mikrotik/CN

使用import cnip.rsc导入ros。添加内网需要翻墙的ip列表。
配置ip firewall的mangle
prerouting,source address list,destination address list取反,destination address type,address type local,invert,mark routing,cross-gfw。
配置ip routes的网关
0.0.0.0/0,gateway设置为vpn对端地址,routing mark 使用上面的cross-gfw。

现在解决dns问题,由于ros的dns功能比较弱,这里使用dnsmasq
内网一台linux系统,可以是虚拟机,可以是容器,安装dnsmasq。配置dnsmasq的源dns为google dns,然后使用github上的大陆网址白名单生成脚本添加需要使用大陆解析的域名。https://github.com/felixonmars/dnsmasq-china-list
具体方法参考使用dnsmasq基于大陆域名白名单分流解析域名