[关闭]
@Alex-Zhao 2021-02-07T13:45:05.000000Z 字数 2693 阅读 134

域名智能路由系统

网络


说明

路由系统使用的相关服务

  1. dnsmasq: 用于域名解析缓存和ipset转发
  2. ipset: 用于存储IP集合,可以存储IP网段或者IP地址
  3. ipset-service: 用于管理ipset的服务。
  4. iptables: 使用mangle进行流量mark
  5. 策略路由: 为指定的流量制定相关路由策略

服务器配置

DNSmasq配置

  1. # /etc/dnsmasq.conf
  2. port=53
  3. domain-needed
  4. resolv-file=/opt/dnsmasq/resolv.dnsmasq.conf
  5. strict-order
  6. #interface=eth2
  7. no-hosts
  8. cache-size=1000000
  9. log-queries
  10. log-facility=/var/log/dnsmasq/dnsmasq.log
  11. log-async=100
  12. conf-dir=/etc/dnsmasq.d
  1. # /opt/dnsmasq/resolv.dnsmasq.conf
  2. nameserver 114.114.114.114
  1. // 更新DNS策略域名
  2. // 可以通过Github中的脚本更新 https://github.com/cokebar/gfwlist2dnsmasq.git
  3. // 然后通过命令行更新dnsmasq_gfwlist文件
  4. sh /opt/gfw/gfwlist2dnsmasq.sh -d 172.16.254.2 -p 53 -s gfwlist -o /etc/dnsmasq.d/dnsmasq_gfwlist.conf --extra-domain-file /tmp/domain.list
  5. // 解释:
  6. // -d:指定DNS解析转交的上级DNS
  7. // -p: 上级DNS端口
  8. // -s: 本地的ipset的名称
  9. // -o: 生成的文件绝对路径
  10. // --extra-domain-file:附增的本地外部域名文件,一行一条域名记录

ipset-service配置

  1. # /etc/sysconfig/ipset-config
  2. IPSET_SAVE_ON_STOP="yes"

ipset进行初始化配置

  1. ipset create gfwlist hash:net
  2. # 解释:
  3. # method: bitmap, hash, list, datatype: ip, net, mac, port, iface
  4. # ipset的名称叫gfwlist,后边的iptables和策略路由会使用这个名称
  5. # 这里使用hash:net格式,hash是因为速度会快一些切长度会长。net是因为可以兼容网段和IP地址。

启动ipset服务,进行初始化

由于ipset是在内存中进行缓存的ip集合,并不会文件保存,当服务器关闭或者重启,ipset缓存的ip集合会消失。使用我们使用ipset-service来进行维护。每次ipset.service启动时会自动加载/etc/sysconfig/ipset.d/*.set文件中的配置和集合信息,每次服务停止,也会将ipset的集合导出到文件中。

  1. systemctl start ipset.service
  2. systemctl enable ipset.service

配置iptables

  1. systemct stop firewalld
  2. systemctl disable firewalld
  3. systemctl enable iptables
  4. systemctl start iptables

配置iptables规则

  1. iptables -P FORWARD DROP
  2. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  3. iptables -A INPUT -p icmp -j ACCEPT
  4. iptables -A INPUT -i lo -j ACCEPT
  5. iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
  6. iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
  7. iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  8. iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
  9. iptables -P INPUT DROP
  10. iptables -A FORWARD -i eth2 -j ACCEPT
  11. iptables -t mangle -A PREROUTING -m set --match-set gfwlist dst -j MARK --set-xmark 77
  12. iptables -t mangle -A PREROUTING -m mark --mark 77 -j ACCEPT -t mangle //此条感觉加不加并没有啥作用,目的是所有打77标记的流量放行

配置策略路由

  1. ip route add table gfwtable default via 172.16.254.2 dev bond4
  2. //创建gfwtable路由表,默认路由从bond4设备出,下一跳地址是172.16.254.2
  3. ip rule add fwmark 77 table gfwtable
  4. //mark 77的流量走gfwtable路由表

配置开机创建策略路由

  1. echo "77 gfwtable" >> /etc/iproute2/rt_tables
  2. # /etc/rc.local
  3. ip route flush table gfwtable
  4. ip route add table gfwtable default via 172.16.254.2 dev bond4
  5. ip rule add fwmark 77 table gfwtable

注意把文件修改可执行。不然不会执行
PS: chmod +x /etc/rc.d/rc.local

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注