iptables转发与ipset地址池的使用
iptables转发有一种思想是建一条链,然后做IP的排除。IP段里面的return,非IP段里面的redirect到对应的端口上。
今天说另一种思想,类似autoproxy。用ipset建一个地址池,方法如下:
# ipset create myset-ip hash:ip
or
# ipset -N myset-ip iphash
添加任何你想要阻止的IP地址到集合中:
# ipset add myset 1.1.1.1
# ipset -A myset 2.2.2.2
关于ipset的用法,最好查看Arch Wiki,内容非常详细。
下面是实例:
ipset -N flyme iphash # flyme池
iptables -t nat -A PREROUTING -p tcp -m set --match-set flyme dst -j REDIRECT --to-port 1080 # 转发到1080端口
还要配合dnsmasq来使用,配置如下:
server=/.yourdomain.com/8.8.8.8
ipset=/.yourdomain.com/flyme
这样就可以将yourdomain通过8.8.8.8来获取DNS,最终通过1080端口出去。