iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储在ipset中,所以使用dnsmasq+ipset就可以实现iptables对域名的转发。
  
  Dnsmasq接收到一个DNS查询请求,首先匹配配置文件中的域名列表,如果匹配成功某域名,就把IP的查询结果存储在一个或几个ipset集合中,然后使用iptables对这个ipset中的全部ip进行匹配并做相应的处理,如DROP或者REDIRECT。
  
  ipset是 Linux 防火墙iptables的一个伴随工具。 除了其他众多功能,它允许你建立规则来轻松愉快地屏蔽一组IP地址。
  
  步骤
  
  dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset
  
  wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.71.tar.gz
  
  tar xzf dnsmasq-2.71.tar.gz
  
  cd dnsmasq-2.71
  
  make && sudo make install
  
  1.1 加入dnsmasq-full的ipset对应配置
  
  /etc/dnsmasq.conf
  
  conf-dir=/etc/dnsmasq.d
  
  1.2 加入dnsmasq_list.conf到/etc/dnsmasq.d/
  
  git clone https://github.com/ yongshiyule178.com cokebar/gfwlist2dnsmasq.git
  
  cd gfwlist2dnsmasq
  
  python2 gfwlist2dnsmasq.py
  
  mkdir /etc/dnsmasq.d
  
  cp dnsmasq_list.conf /etc/dnsmasq.d
  
  1.3 dnsmasq_list.conf格式
  
  #使用不受污染的DNS解析该域名,可以将此IP改为自己使用的DNS服务器
  
  server=/google.com/127.0.0.1#5353
  
  #将解析出来的IP保存到名为gfwlist的ipset表中
  
  ipset=/google.com/gfwlist
  
  安装SS
  
  https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-6/librehat-shadowsocks-epel-6.repo
  
  mv librehat-shadowsocks-epel-6.repo www.gcyl152.com /etc/yum.repos.d/
  
  yum update
  
  yum install shadowsocks-libev
  
  wget https://cokebar.info/wp-content/uploads/2014/11/shadowsocks-libev
  
  mv shadowsocks-libev /etc/init.d/
  
  2.1. 修改SS配置文件,并启动
  
  cat /etc/shadowsocks-libev/config.json
  
  {
  
  "server":"x.x.x.x",
  
  "server_port":xxxx,
  
  "local_address":"127.0.0.1",
  
  "local_port":1080,
  
  "password":"********",
  
  "timeout":300,
  
  "method":"rc4-md5"
  
  }
  
  命令行执行并打开debug log来查看
  
  ss-redir -c /etc/shadowsocks-libev/config.www.mcyllpt.com json -b 0.0.0.0 -v
  
  ss-tunnel -c /etc/shadowsocks-libev/ www.tongqt178.com config.json -b 0.0.0.0 -l 5353 -L 8.8.8.8:53 -u -v
  
  安装ipset工具
  
  yum install ipset
  
  3.1 创建对应的ipset
  
  #创建名为gfwlist,格式为iphash的集合
  
  ipset -N gfwlist iphash -!
  
  创建iptables表
  
  #匹配gfwlist中ip的nat流量均被转发到shadowsocks端口
  
  iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
  
  #匹配gfwlist中ip的本机流量均被转发到shadowsocks端口
  
  iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1080
  
  NOTE:如果INPUT链被默认DROP还需要打开1080端口
  
  iptables -A INPUT -p tcp -m state -www.ysyl157.com-state NEW -m tcp --dport 1080 -j ACCEPT
  
  iptables -A INPUT -p udp -m udp --dport 1080 -j ACCEP

dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset的更多相关文章

  1. 树莓派安装DNSMASQ服务

    功能: DNSMASQ是一款高性能的.小型的DNS服务器软件. * 缓存域名.IP地址,本地缓存解析的地址. * DHCP服务 1.安装 sudo apt-get update sudo apt-ge ...

  2. centos6编译安装zabbix3.0和中文支持整理文档

    编者按: 最近公司部分业务迁移机房,为了更方便的监控管理主机资源,决定上线zabbix监控平台.运维人员使用2.4版本的进行部署,个人在业余时间尝鲜,使用zabbix3.0进行部署,整理文档如下,仅供 ...

  3. Vim 8.0 版本安装方法及添加Python支持

    利用Git安装 最简单也是最有效的方法 1. 获取Vim仓库: git clone https://github.com/vim/vim.git 2. 升级到最新的版本: cd vim git pul ...

  4. 【Nginx】之安装使用和配置SSL支持

    本文采用的是nginx源码安装 1.下载nginx源码包 wget http://nginx.org/download/nginx-1.8.0.tar 或者登录nginx官网下载更高版本 2.ngin ...

  5. Sublime text3:安装插件SublimeREPL解决不支持input

    Sublime text3:安装插件SublimeREPL解决不支持input 安装SublimeREPL 1,调用ctrl+shift+p 输入install回车: 2,输出:sublimerepl ...

  6. centos7安装dnsmasq局域网dns

    Dnsmaq介绍: Dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能. Dnsmasq可以解决小范围的dns查询 ...

  7. Centos 6.4 安装dnsmasq

    1 下载源码 wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.45.tar.gz cp dnsmasq-2.45.tar.gz /usr/src ...

  8. CentOS 7 安装 dnsmasq 服务 实现内网DNS

    目录 安装 配置 服务管理 测试解析 安装 废话不多述,上来就安装 yum install -y bind-utils dnsmasq 配置 [root@jenkins ~]# rpm -ql dns ...

  9. ubuntu14.04上Virtualbox安装win7(使用Ghost镜像安装,启用USB设备支持,设置共享目录)

    由于某些软件只有windows版本,于是只好安装个虚拟机win7 /**************************安装*************************************/ ...

随机推荐

  1. MAthJax入门教程(五分钟上手)

    最近在研究,在页面中显示一些数学公式.搞得我很头疼. 据说MathJax会统一这已领域.所以去学了学.网上教程特别多.繁杂. 说的清楚的特别少. 我是这么跑通的,: 1.在官网下载代码地址为:http ...

  2. Python学习:for 循环 与 range()函数

    for 循环   For … in 语句是另一种循环语句,其特点是会在一系列对象上进行迭代(Iterates),即它会遍历序列中的每一个项目 注意:  1.else 部分是可选的.当循环中包含它时,它 ...

  3. Python学习之魔法方法

    Python中会看到前后都加双下划线的函数名,例如 __init__(self),这类写法在Python中具有特殊的含义.如果对象使用了这类方法中的某一个,那么这个方法将会在特殊的情况下被执行,然而几 ...

  4. PHP.41-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

     添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...

  5. 【转】在Ubuntu 16.10 Server 上部署 Moodle

    第一步 安装 Ubuntu 16.10 Server LTS Moodle 的官方文档肯定了Ubuntu Server LTS 是适合运维Moodle平台的. 1.使用纯代码交互的服务器Ubuntu更 ...

  6. 创龙DSP6748开发板驱动LCD屏

    1. DSP6748内部有2个LCD控制器,Raster Controller 光栅控制器和the LCD Interface Display Driver (LIDD) controller 控制器 ...

  7. MyEclipse - 问题集 - 创建Maven项目,JDK版本默认是1.5

    修改Maven的配置文件settings.xml,增加profile节点,如下所示: <profile> <id>jdk-1.8</id> <activati ...

  8. Leetcode 简略题解 - 共567题

    Leetcode 简略题解 - 共567题     写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...

  9. [网站日志]当Memcached缓存服务挂掉时性能监视器中的表现

    我们用的Memcached缓存服务是阿里云OCS,今天晚上遇到了一次OCS挂掉的情况(计划中的升级),看一下性能监视器中的表现,也许对分析黑色1秒问题有帮助. 应用日志中错误: 2014-06-05 ...

  10. Redis进阶:数据持久化,安全,在PHP中使用

    一.redis数据持久化 由于redis是一个内存数据库,如果系统遇到致命问题需要关机或重启,内存中的数据就会丢失,这是生产环境所不能允许的.所以redis提供了数据持久化的能力. redis提供了两 ...