免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2261 | 回复: 7
打印 上一主题 下一主题

[网络管理] 双线出口的内网UDP服务,需要根据源地址回应(已解决) [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:50:39
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-04 17:34 |只看该作者 |倒序浏览
本帖最后由 dbsrv 于 2013-08-06 16:36 编辑

centos 5.5,eth1接内网,2个ISP联通、电信,接入eth0,用8021q模块实现子接口,IP_UNICOM,IP_TELECOM。
用静态路由导入联通、电信的全路由表可以,但这样工作量很繁,路由表也很乱,而且对于一个客户端来说,这个双IP主机其实只有一个IP。所以用策略路由,即使当前网速很好的地址故障,通过另一个IP仍然可以接入服务端。目前,任意一个外部主机都可以同时访问到这两个IP。

联通IP走主路由表,电信IP用其他路由表
ip route add 0/0 via $GW_UNICOM
ip route add 0/0 via $GW_TELECOM table 202
ip rule add from IP_TELECOM table RT_TELECOM

现这个linux要为内网一台服务器发布一个udp端口,
PREROUTING -i eth0.201 -p udp --dport 23456 -j DNAT --to $SRV
PREROUTING -i eth0.202 -p udp --dport 23456 -j DNAT --to $SRV

想实现这样的功能:
从联通接口进入的访问,服务器回应时通过联通的接口。
从电信接口进入的访问,服务器回应时通过电信的接口。

目前的配置方式,无论是用户通过哪个接口进入,服务器回应的数据包在经过网关时,都会通过网关这个linux的默认路由表回应,即联通的出口。
FORWARD -j ACCEPT
POSTROUTING -o eth1.201 -j SNAT --to $IP_UNICOM
POSTROUTING -o eth1.202 -j SNAT --to $IP_TELECOM

mangle行么?我没思路,想不明白这个标记应该怎么打。

论坛徽章:
3
水瓶座
日期:2013-08-19 19:03:1715-16赛季CBA联赛之八一
日期:2016-02-25 18:02:4715-16赛季CBA联赛之佛山
日期:2017-03-27 14:08:12
2 [报告]
发表于 2013-08-05 15:06 |只看该作者
内网服务器上配置两个 ip,网关上 使用 ip rule from xxxx table xxx 呢?

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:50:39
3 [报告]
发表于 2013-08-05 15:42 |只看该作者
回复 2# 2008ohmygod


   好主意,去试试。谢谢。

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:50:39
4 [报告]
发表于 2013-08-05 16:16 |只看该作者
本帖最后由 dbsrv 于 2013-08-05 17:16 编辑

回复 2# 2008ohmygod


    忘了说了,后端的服务主机是windows的,配俩IP,A1/A2,这个内网主机对外的出口回包都是一个IP,到了网关,网关还是分不出来……

论坛徽章:
3
水瓶座
日期:2013-08-19 19:03:1715-16赛季CBA联赛之八一
日期:2016-02-25 18:02:4715-16赛季CBA联赛之佛山
日期:2017-03-27 14:08:12
5 [报告]
发表于 2013-08-05 17:47 |只看该作者
本帖最后由 2008ohmygod 于 2013-08-05 17:50 编辑

回复 4# dbsrv


    我感觉外网访问 windows 的回包 应该能正确路由。

windows 主动的包,ip地址源地址应该不变。

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:50:39
6 [报告]
发表于 2013-08-05 20:16 |只看该作者
本帖最后由 dbsrv 于 2013-08-05 20:42 编辑

http://www.sunjianhe.com/?p=1095
找到篇文章,摘抄并修改一下,把他的eth1电信换成了eth1.202,联通eth2换成了eth1.201。
不过没解决,用tcpdump看,反倒是两个方向的访问数据包都在一个子接口进出里了。
rt_tables和ip rule部分略

#对通过联通IP进来的数据在链接跟踪记录上打标记100,通过电信IP进来的数据在链接跟踪记录上打上标记200
iptables -t mangle -A PREROUTING -i eth1.201 -m conntrack  –-ctstate NEW  -j CONNMARK –set-mark 0x100
iptables -t mangle -A PREROUTING -i eth1.202 -m conntrack  –-ctstate NEW  -j CONNMARK –set-mark 0x200

#转发出去的数据打上标记,同上
iptables -t mangle -A POSTROUTING -o eth1.201  -m conntrack  --ctstate NEW  -j CONNMARK –set-mark 0x100
iptables -t mangle -A POSTROUTING -o eth1.202  -m conntrack  --ctstate NEW  -j CONNMARK –set-mark 0x200

#转发到内网的数据包从链接跟踪记录还原标记到数据包中的mark字段
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark

#本地出去的数据包从链接跟踪记录还原标记到数据包中的mark字段
iptables -t mangle -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark

#关键,策略路由发现标识为200的数据包走电信网关,标识为100的数据包走联通网关
ip rule add fwmark 0×100 table 201
ip rule add fwmark 0×200 table 202

4,端口映射

iptables -t nat -A PREROUTING -p udp --dport 20000 -j DNAT –to $SRV
iptables -t nat -A POSTROUTING -s $NET_LAN -o eth1.201 -j SNAT --to $IP_UNICOM
iptables -t nat -A POSTROUTING -s $NET_LAN -o eth1.202 -j SNAT --to $IP_TELECOM

论坛徽章:
3
水瓶座
日期:2013-08-19 19:03:1715-16赛季CBA联赛之八一
日期:2016-02-25 18:02:4715-16赛季CBA联赛之佛山
日期:2017-03-27 14:08:12
7 [报告]
发表于 2013-08-06 13:46 |只看该作者
2008ohmygod 发表于 2013-08-05 17:47
回复 4# dbsrv


Windows 主机对外网回应的包 tcpdump 抓过包么, IP源地址正确不?

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:50:39
8 [报告]
发表于 2013-08-06 16:39 |只看该作者
回复 7# 2008ohmygod


    我在六楼贴的方法是有效的,只是昨天用来测试的客户端工具配置有问题,导致我连哪个IP地址都显示在默认网关那个接口上进出。今天上午修改了一下客户端工具,测试通过。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP