iptables:按照官方文档,是一个ipv4 包过滤和NAT的管理工具

先开始好像使用iptables命令时,报错,提示没有netfilter模块

后来make maenuconfig添加后,重新编译一遍,就OK了

其实这个问题折腾了半天,好像是参考这篇:
Iptables for newbies

一些术语

Chain

Each chain is a list of rules which can match a set of packets.

Table

filter
nat
mangle
raw
security

Example

iptables -L
iptables -F
iptables -X

iptables 配合 iproute2 实现多线策略

一台内网网关机器, 有三个网卡(以下ip为臆造):

内网用户连接网关

对于网段 192.168.1.0/24 的内网用户,从eth1走

对于网段 192.168.2.0/24 的内网用户,从eth2走

使用 iproute2 配合 iptables 可以处理这种情况.

添加俩个table, wan-ctc和wan-cuc

$ more /etc/iproute2/rt_tables
#
# reserved values
#
200     wan-cuc
201     wan-ctc

255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep

添加两条路由:

ip route add default via 1.1.1.1 dev eth1 table wan-cuc
ip route add default via 2.2.2.2 dev eth2 table wan-ctc

添加策略路由:

ip rule add fwmark 0x1 table wan-cuc prio 200
ip rule add fwmark 0x2 table wan-ctc prio 201

配合 iptables mangle 表的 --set-mark 可以给来自某网段的包加上标记:

*mangle
[0:0] -A PREROUTING -i eth0 -s 192.168.1.0/24 -j MARK --set-mark 1
[0:0] -A PREROUTING -i eth0 -s 192.168.2.0/24 -j MARK --set-mark 2

标记从192.168.1.0/24过来的内网用户,标记为1,从192.168.2.0/24过来的标记为2. 对应 ip rule 里 fwmark 0x1fwmark 0x2

另外这里还得做好SNAT:

*nat
[0:0] -A POSTROUTING -o eth1 -s 192.168.0.0/16 -j SNAT --to-source 1.1.1.1
[0:0] -A POSTROUTING -o eth2 -s 192.168.0.0/16 -j SNAT --to-source 2.2.2.2

Read More