免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3774 | 回复: 7

[网络子系统] iptables 打标记+iproute2 fwmark 方式做双出口负载均衡 返回数据包无法进行nat转换 [复制链接]

论坛徽章:
0
发表于 2016-02-25 16:55 |显示全部楼层
5可用积分
实际测试的服务器采用debian6(内核2.6.32)

配置如下:
eth0:外网1,接口IP:10.0.1.2/24 网关:10.0.1.1
eth1:外网2,接口IP:10.0.2.2/24 网关:10.0.2.1
eth2:内网,接口IP:192.168.10.0/24
内网测试PC ,IP:192.168.10.120 通过交换机连接到eth2



设置iptables:对内网IP 192.168.10.120 打标签1
iptables -t mangle -A  PREROUTING -s 192.168.10.120    -j MARK --set-mark 0x1


设置nat:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE

设置两个策略路由表table10和table20:
ip route add default via 10.0.1.1 table 10   
ip route add 192.168.10.0/24 dev eth2 table 10
ip route add default via 10.0.2.1 table 20   
ip route add 192.168.10.0/24 dev eth2 table 20

设置策略路由规则:、标志位1的走出口eth0
/bin/ip rule add fwmark 1 priority 100 table 10

通过以上配置后发现无法上网,tcpdump显示返回数据包无法进行nat转换!
例如 在PC 上  ping 218.201.25.131
在eth2 上只能抓到 源地址为192.168.10.120 目的地址为218.201.25.131 的request 包  没有reply包
在eth0 上可以抓到 源地址为10.0.1.2 目的地址为218.201.25.131 的request 包  和 源地址为218.201.25.131 目的地址为10.0.1.2 的reply  包

最佳答案

查看完整内容

检查一下conntrack,按理说conntrack会把返回报文的目的ip改成内网ip的(关注一下应答方向的的counter是不是在增加)。同时检查一下ip route cache,对应答报文(注意是dnat后的,即目的ip已被修改为内网ip)的路由是不是eth0?会不会是反向路由检查的限制(检查一下接口的rp_filter配置)?对于dnat之后的应答报文(来自eth0)218.201.25.131 -> 192.160.10.120,如果rp_filter开启,会内部检查一下,逆向的报文(192.160.10.120- ...

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-02-25 16:55 |显示全部楼层
检查一下conntrack,按理说conntrack会把返回报文的目的ip改成内网ip的(关注一下应答方向的的counter是不是在增加)。

同时检查一下ip route cache,对应答报文(注意是dnat后的,即目的ip已被修改为内网ip)的路由是不是eth0?

会不会是反向路由检查的限制(检查一下接口的rp_filter配置)?

对于dnat之后的应答报文(来自eth0)218.201.25.131 -> 192.160.10.120,
如果rp_filter开启,会内部检查一下,逆向的报文(192.160.10.120->218.201.25.131)是不是从eth0出去。
注意这个过程没有iptables的参与,也就打不上mark,也就无法进入table10/20,只能走默认路由eth1,
这跟eth0不匹配, 相应的rt_cache的in_martian_src计数会增加。

搜素fib_validate_source
http://lxr.free-electrons.com/source/net/ipv4/fib_frontend.c#L409

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-02-26 18:17 |显示全部楼层
本帖最后由 nswcfd 于 2016-03-02 10:39 编辑

负载均衡在哪里体现的?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-02-26 18:40 |显示全部楼层
默认路由是什么?

论坛徽章:
0
发表于 2016-03-02 09:45 |显示全部楼层
默认路由设置的eth1 口

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-03-02 10:29 |显示全部楼层
不好意思,之前没看到table 10、table 20里的default路由。

招聘 : c/c++研发
论坛徽章:
0
发表于 2016-03-15 17:55 |显示全部楼层
-MARK是将对应的数据包打上mark值
-CONNMARK是将数据包对应的流打上mark值
你这里用-MARK只是对出去的数据包打了mark,对返回的数据包,由于没有匹配iptables -t mangle -A  PREROUTING -s 192.168.10.120    -j MARK --set-mark 0x1,所以返回的数据包没打上mark,自然也没法在table 10里面找路由了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP