1. 工具安装
yum install iproute
查看工具是否安装
ip -V
2. ip rule 和 ip route
ip命令中和策略路由相关的OBJECT有 rule 和 route。
查看所有的 rule
ip rule show
优先级 判断条件 动作 表ID
0: from all lookup local // 任何源地址的包,都查询,local表 32766: from all lookup main 32767: from all lookup default
local:路由表local包含本机路由及广播信息。 例如,在本机上执行ssh 127.0.0.1时,就会参考这份路由表的内容, 在正常情况下,只要配置好网卡的网络设置, 就会自动生成local路由表的内容,我们应该也不必修改其内容。 main:使用传统命令route -n所看到的路由表就是main的内容。 Linux系统在默认情况下使用这份路由表的内容来传输数据包, 因此,其内容极为重要,在正常情况下,只要配置好网卡的网络设置, 就会自动生成main路由表的内容。 default:最后是default路由表,这个路由表在默认情况下内容为空; 除非有特别的要求,否则保持其内容为空即可。
查看route
ip route show table main // 显示 表main 的 route
default via 172.17.0.1 dev eth0 // 其他包,发给 172.17.0.1 主机,通过 设备 eth0 169.254.0.0/16 dev eth0 scope link metric 1002 // 目的地址为 169.254.0.0/16 网段的包,使用 eth0 设备发出 172.17.0.0/20 dev eth0 proto kernel scope link src 172.17.0.12 // 目的地址为 172.17.0.0/20 网段的包,通过 eth0 发出。发出的源接口的IP地址是 172.17.0.12
一个包,先查看策略 rule,根据优先级 和 判断条件 找到 路由表,再按照 路由表的路由规则,获得下一跳 IP地址和输出接口,又通过ARP表,获得目的MAC地址和源MAC地址,发包
3. rule 的添加与删除
3.1 添加规则
判断条件 表ID 优先级
ip rule add from 192.168.3.1 table 10 prio 199 // 添加规则,源地址为192.168.3.1的包,使用表10
如果不显示添加优先级,默认优先级数字从32766 (也就是main table) 依次递减,即优先级越来越高。
其他添加示例
ip rule add to 168.95.1.1 table 10 // 目的地址是 168.95.1.1 使用 table 10 ip rule add dev eth2 table 1 // dev eth2 输入的数据,使用 table 1 ip rule add dev eth3 table 3 // dev eth3 输入的数据,使用 table 3
fwmark 和 iptables
iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 80 -j MARK --set-mark 1 // eth3输入的HTTP协议数据,标记为 mark 1 iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 25 -j MARK --set-mark 2 // eth3 输入的SMTP协议数据,标记为 mark 2 iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 110 -j MARK --set-mark 2 // eth3 输入的POP协议数据,标记为 mark 2 iptables -t mangle -A FORWARD -i eth3 -j MARK --set-mark 3 // eth3 输入的其他数据,标记为 mark 3 ip rule add fwmark 1 table 1 // fwmark 1 的数据,使用 table 1 ip rule add fwmark 2 table 2 ip rule add fwmark 3 table 3
3.2 删除规则
ip rule del prio 10 ip rule del from 192.168.1.0/24 ip rule del table 1 ip rule del from 192.168.1.0/24 table 1 prio 10
删除规则,可以使用 优先级,源地址,目的地址,路由表 等信息作为判断条件。
4.1 添加表
ip route add 192.168.1.0/24 dev eth1 table 10 // 任意添加一条路由,以创建表 10. 新建的表10里的路由条目为空
4.2 添加路由
ip route add 192.168.2.0/24 via 10.10.15.50 table main // 添加,目的地址为 192.168.2.0/24网段的包,网关为 10.10.15.50。添加到表 main
添加路由前,必须保证表已经存在,否则只是创建表。
4.3 删除路由
ip route del default table 10 ip route del 192.168.1.0/24 table 10 // 在表10中,删除目的地址为 192.168.1.0/24 网段的路由