OpenWRT之ipset

什么是ipset

IP sets are a framework inside the Linux kernel, which can be administered by the ipset utility. Depending on the type, an IP set may store IP addresses, networks, (TCP/UDP) port numbers, MAC addresses, interface names or combinations of them in a way, which ensures lightning speed when matching an entry against a set.

ipset类型

基于bitmap

  • bitmap:ip - 每个bit代表一个IP,可存储65535个IP
  • bitmap:ip,mac - 每8个字节代表一个IP和MAC组合
  • bitmap:port - 每个bit代表一个TCP/UDP端口

基于hash

动态哈希表,优秀的查找能力

  • hash:ip
  • hash:net
  • hash:ip,port
  • hash:ip,port,ip
  • hash:ip,port,net
  • hash:net,port
  • hash:net,iface

基于list

将不同ipsets存在另一个ipset中

  • list:set

ipset操作

安装ipset

1
opkg install ipset

查看ipset

1
2
3
4
5
# 查看存在的ipset
ipset list -name 

# 查看ipset内容
ipset list <name>

增删ipset

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建ipset
ipset create test hash:ip

# 创建ipset,如果存在,则忽略
ipset -exist create test hash:ip 

# 创建ipset,并定义默认timeout
ipset create test hash:ip timeout 300

# 删除ipset
ipset destroy test

修改ipset

1
2
3
4
5
6
7
8
# 增加/修改记录
ipset -exist add test 10.10.10.1 timeout 600

# 删除记录
ipset -exist del test 10.10.10.1

# 清空记录
ipset flush test

保存ipset

1
2
3
4
5
# 保存ipset
ipset save test > test.ipset

# 恢复ipset
ipset restore < test.ipset 

与iptables的配合

iptables与ipset配合使用需要安装kmod

1
opkg install kmod-ipt-ipset kmod-ipt-nat
1
2
3
4
5
# --match-set setname flag[,flag]...
ipset create test hash:ip timeout 60
ipset -exist add test 10.10.10.99 
iptables -A INPUT -m set --match-set test src -j DROP
# 我们成功把自己给屏蔽了1分钟

应用

智能路由

安装完整版iproute命令

1
opkg install ip-full net-tools-route 

将指定流量导向n2n0接口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ipset create n2n hash:ip
ipset -exist add n2n 142.250.207.68
ipset -exist add n2n 142.250.204.69

# 标记流量
iptables -t mangle -A PREROUTING -m set --match-set n2n dst -j MARK --set-mark 1

# 增加一个路由表并将标记的流量转发到n2n0
ip route add default via 10.20.30.1 dev n2n0 table 110
ip rule add fwmark 1 table 110
  • mangle: 这个table专门用于数据包更改,chains包含PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING

  • route table: /etc/iproute2/rt_tables:

    1. 255 - local : 本地和广播IP路由表,自动设置,请勿修改
    2. 254 - main : routeip route默认操作对象
    3. 253 - default : 保留的

查看所有table ip route show table all

参考

  1. https://ipset.netfilter.org/

小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次