Linux下iptables+rt_tables实现用户分流

  1. linux下iptables+rt_tables实现用户分流
    1. 一、配置iptables
    2. 二、配置rt_tables
    3. 三、验证效果

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

查看配置情况

nat表

mangle表

二、配置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出口

可以看到user1,user2已经成功使用不同出口访问公网

iptables+rt_tablels能实现的功能太多,用户分流也仅仅是其中之一,还可以实现进程分流,不同运营商网络分流,不同内网ip,内网网段分流等等


转载请注明来源