linux下iptables+rt_tables实现用户分流
原理:使用iptables将用户流量打标记,然后通过rt_tables配置策略路由,匹配不同标记的流量走不同的路由
一、配置iptables
使用iptables owner模块匹配用户uid,并设置流量标记
iptables -t mangle -A OUTPUT -m owner --uid-owner 1000 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 2
配置地址伪装,这一步不做会导致策略路由无法生效
iptables -t nat -A POSTROUTING -j MASQUERADE
查看配置情况
二、配置rt_tables
添加路由表
#编辑rt_tables
echo "252 user1" >> /etc/iproute2/rt_tables
echo "251 user2" >> /etc/iproute2/rt_tables
添加策略路由
# 清空user1、user2路由表
ip route flush table user1
ip route flush table user2
# 添加ip rule规则
ip rule add fwmark 1 table user1
ip rule add fwmark 2 table user2
# 添加路由到路由表
ip route add default dev ppp1 table user1
ip route add default dev ppp0 table user2
三、验证效果
切换到相关用户检验是否成功分流
# 切换到user1检查
su user1
curl ip-api.com
# 切换到user2检查
su user2
curl ip-api.com
可以看到user1,user2已经成功使用不同出口访问公网
iptables+rt_tablels能实现的功能太多,用户分流也仅仅是其中之一,还可以实现进程分流,不同运营商网络分流,不同内网ip,内网网段分流等等
转载请注明来源