@Alex-Zhao
2021-02-07T13:45:05.000000Z
字数 2693
阅读 134
网络
dnsmasq: 用于域名解析缓存和ipset转发
ipset: 用于存储IP集合,可以存储IP网段或者IP地址
ipset-service: 用于管理ipset的服务。
iptables: 使用mangle进行流量mark。
策略路由: 为指定的流量制定相关路由策略
# /etc/dnsmasq.conf
port=53
domain-needed
resolv-file=/opt/dnsmasq/resolv.dnsmasq.conf
strict-order
#interface=eth2
no-hosts
cache-size=1000000
log-queries
log-facility=/var/log/dnsmasq/dnsmasq.log
log-async=100
conf-dir=/etc/dnsmasq.d
# /opt/dnsmasq/resolv.dnsmasq.conf
nameserver 114.114.114.114
// 更新DNS策略域名
// 可以通过Github中的脚本更新 https://github.com/cokebar/gfwlist2dnsmasq.git
// 然后通过命令行更新dnsmasq_gfwlist文件
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
// 解释:
// -d:指定DNS解析转交的上级DNS
// -p: 上级DNS端口
// -s: 本地的ipset的名称
// -o: 生成的文件绝对路径
// --extra-domain-file:附增的本地外部域名文件,一行一条域名记录
# /etc/sysconfig/ipset-config
IPSET_SAVE_ON_STOP="yes"
ipset create gfwlist hash:net
# 解释:
# method: bitmap, hash, list, datatype: ip, net, mac, port, iface
# ipset的名称叫gfwlist,后边的iptables和策略路由会使用这个名称
# 这里使用hash:net格式,hash是因为速度会快一些切长度会长。net是因为可以兼容网段和IP地址。
由于ipset是在内存中进行缓存的ip集合,并不会文件保存,当服务器关闭或者重启,ipset缓存的ip集合会消失。使用我们使用ipset-service来进行维护。每次ipset.service启动时会自动加载/etc/sysconfig/ipset.d/*.set
文件中的配置和集合信息,每次服务停止,也会将ipset的集合导出到文件中。
systemctl start ipset.service
systemctl enable ipset.service
systemct stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
iptables -P FORWARD DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -P INPUT DROP
iptables -A FORWARD -i eth2 -j ACCEPT
iptables -t mangle -A PREROUTING -m set --match-set gfwlist dst -j MARK --set-xmark 77
iptables -t mangle -A PREROUTING -m mark --mark 77 -j ACCEPT -t mangle //此条感觉加不加并没有啥作用,目的是所有打77标记的流量放行
ip route add table gfwtable default via 172.16.254.2 dev bond4
//创建gfwtable路由表,默认路由从bond4设备出,下一跳地址是172.16.254.2
ip rule add fwmark 77 table gfwtable
//mark 77的流量走gfwtable路由表
echo "77 gfwtable" >> /etc/iproute2/rt_tables
# /etc/rc.local
ip route flush table gfwtable
ip route add table gfwtable default via 172.16.254.2 dev bond4
ip rule add fwmark 77 table gfwtable
注意把文件修改可执行。不然不会执行
PS: chmod +x /etc/rc.d/rc.local