网络环境
1、一台服务器中有两个网络出口,出口1为电信;出口2为联通;出口3位移动,三个网络出口通过p55p1出网只是vlan不同。默认网关在移动
2、内网出口为p55p2出网
网络需求
内网的所有80流量和443流量全部走联通口,其中内网源地址中的1.1.1.1用户80流量走电信
网络top

需要指定一个策略路由表 web 和 nw 其中web走80和443流量,nw走1.1.1.1的80流量
操作命令(linux系统)
ip route re 0/0 via 移动网关 ---->指定默认路由在移动
在策略路由表文件中添加路由表
echo "230 web " >> /etc/iproute2/rt_table
echo "240 nw " >> /etc/iproute2/rt_table
指定策略路由表的默认路由
ip route re 0/0 via 联通网关 table web
ip route re 0/0 via 电信网关 table nw


针对所有80和443流量做标签1
iptables -t mangle -A PREROUTING -i p55p2 -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x1
针对源地址1.1.1.1的流量做标签2
iptables -t mangle -A PREROUTING -i p55p2 -s 1.1.1.1 -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x2
+++++重点,需要将第二个规则放在第一个规则上面 并且第二个规则需要设定除了1.1.1.1源地址意外的所有地址,所以应如下:
iptables -t mangle -A PREROUTING -i p55p2 -s 1.1.1.1 -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x2
iptables -t mangle -A PREROUTING !-s 1.1.1.1 -i p55p2 -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x1
理论可以按照第一个方法写 本人实验没成功。不知道哪里问题


设置策略路由
ip rule add from all fwmark 0x1 table web
ip rule add from all fwmark 0x2 table nw

总结
本文章主要解决问题是mangle表规则如果写入不清晰会出现的情况。