Dnsmasq+ipset+iptables基于域名的流量管理

原创 2016年11月04日 10:06:24

iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储在ipset中,所以使用dnsmasq+ipset就可以实现iptables对域名的转发,可以实现很多功能,比如:

禁止浏览某些网站,如taobao.com

对国内和国外的流量进行不同路径的转发或者代理,可以应用在ss或者SSH这样的代理中,加速某些网站访问速度。

原理很简单,就是Dnsmasq接收到一个DNS查询请求,首先匹配配置文件中的域名列表,如果匹配成功某域名,就把IP的查询结果存储在一个或几个ipset集合中,然后使用iptables对这个ipset中的全部ip进行匹配并做相应的处理,如DROP或者REDIRECT。

下面来看一下Dnsmasq+ipset的工作过程

首先Ubuntu16.04自带dnsmasq-full,Openwrt 15.05等较新的版本的dnsmasq也支持ipset,并将本机的dns服务器设置为dnsmasq(/etc/resolv.conf中将域名服务器设置为127.0.0.1遍指向了本地的dnsmasq服务)。

其中ipset默认没有被安装,Ubuntu和Openwrt均可使用自带的软件包安装源进行安装,具体步骤这里就不细说了,就像安装普通的包一样。

我们可以通过dnsmasq -v来查看当前主机的dnsmasq是否添加了ipset支持


首先我们编辑dnsmasq的配置文件,Ubuntu和Openwrt的目标均为/etc/dnsmasq.conf

添加如下黄线中的几句


前两句的意思是将所有.com和.hk结尾的域名请求都发往OpenDNS的服务器,端口5353,这样可以防止ISP和GFW的一些域名污染,防止请求的页面被误导或者页面上出现莫名其妙的广告

最后一行是指将yahoo.com和google.com的域名解析IP结果存储到vpn和search的ipset结果中,准备交给iptables识别和转发。

而且在此之前我们需要建立v*n和search两个ipset表,可以使用如下语句

sudo ipset create 列表名 hash:ip

然后我们建立完成之后可以列出这个表的所有ip记录,目前当然是空的了

sudo ipset list 列表名
然后我们可以使用nslookup命令查询我们上面规定好的yahoo.com和google.com,然后dnsmasq就会自动的将这两个域名的解析结果存放到我们刚刚建立的ipset中去,该过程如下图


如上图,在查询玩yahoo之后,雅虎的两个IP就被存放到了我们设置的ip集合中去了

同样我们可以再查询一下google.com的域名并把这个域名放到ip集合中


看,这么多的ip都被放到vpn这个ip集合中了。

然后我么再使用iptables做相应的规则转发即可,比如我们把目标地址为这两个域名的流量转发到1080端口进行SSH或者SS代理

sudo iptables -t nat -I PREROUTING -m set --match-set 列表名 dst -j REDIRECT --to-ports 1080
当然,如果你是黑名单可以做DROP或者RETURN处理

sudo iptables -t nat -I PREROUTING -m set --match-set 列表名 dst -j RETURN
如果IP集合不是目标地址而是原地址,可以把dst换成src


如果你要处理的域名很多,那么写在/etc/dnsmasq.conf会显得凌乱不堪,所以我们不妨另起一个或多个文件存放这些域名配置

首先我们可以找个目录随便起名建立一个文件,目录我们就选/home/alex/config/dnsmasq.d好了,其中alex是我Ubuntu系统的用户名

然后再这个目录下建立一个文件,比如ip_filter.conf

然后把上面黄线的内容写入进去,比如我要建立一个国内常用网址的就可以像下面这么写


然后再/etc/dnsmasq.conf中添加如下


这样就可以可以实现和直接写在配置文件中相同的效果


参考文章:https://hong.im/2014/07/08/use-ipset-with-shadowsocks-on-openwrt/

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

针对域名做iptables

前景: 很偶然,由于业务需求,需要对现有的一台核心设备做安全防护,然后第一念头就想到了iptables,接着全网统计ip段,各种INPUT链各种添加规则,很兴奋的就上了线。 第一天运行正常,没有发现异...

CentOS下配置iptables碰到域名解析失败的问题

1,问题背景。 在阿里ECS上调用第三方短信接口,始终无法成功。接口不是IP地址,而是一个带域名的 URL接口。 2,问题原因 网络调测,首先便是两头一掐,确认别人根本没有收到我的请...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

使用Hadoop API访问Kerberos 安全HDFS

使用kerberos下安全Hadoop时,通常是在linux系统下使用kinit命令进行身份认证,下面提供一种在java api中认证的方式

于Linux-2.6.32内核上编译ipset-6.23的坎坷经历

新版本的ipset上周在儿童医院给小小看病等待叫号的间隙,收到了Netfilter邮件列表的推送消息,一览了ipset最新的6.23版本的新特性,很多正是我目前所需要的,特别是timeout和skbi...
  • dog250
  • dog250
  • 2014-11-14 21:15
  • 4462

HiPAC高性能规则匹配算法之查找过程

收到一封邮件,有位朋友觉得我误解了nf-HiPAC,如此的一个高性能算法怎能被什么传统的hash,tree之类的胁迫。是啊,HiPAC是一个很猛的算法,文档也比较少,这就更加增加了其神秘感,但是这决不...
  • dog250
  • dog250
  • 2014-11-17 22:23
  • 4137

C语言冒泡法排序[经典]

C语言冒泡法排序[经典] 冒泡法排序的算法思想是:        通过无序区中相邻记录关键字间的比较和位置交换,使关键字的记录如气泡一般逐渐往上“漂浮”至“水面”。整个算法是从最下面的记录开始,对...

在 Linux 下利用ipset大量屏蔽恶意 IP 地址

很多情况下,你可能需要在Linux下屏蔽IP地址。比如,作为一个终端用户,你可能想要免受间谍软件或者IP追踪的困扰。或者当你在运行P2P软件时。你可能想要过滤反P2P活动的网络链接。如果你是一名系统管...

如何在Linux下大量屏蔽恶意IP地址(ipset)

转自:http://www.kuqin.com/shuoit/20150225/344886.html 很多情况下,你可能需要在Linux下屏蔽IP地址。比如,作为一个终端用户,你可能想要免受间...

Innodb中的事务隔离级别和锁的关系

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)