免费注册 查看新帖 |

Chinaunix

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

[网络管理] HA双机+NAT,恳请高人指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-17 10:29 |只看该作者 |倒序浏览



环境如图,AB两机放在内网,前面firewall上只有一个公网ip 1.1.1.1,映射到A机的10.1.1.1,
需求是要AB机都能对外提供80端口服务,最好是能load balance,
目前我能想到的解决方案只有在A上做DNAT:
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.2.2.2:80
但这样写有个问题,就是流量全被转到B上面去了,我是想要AB两机都同时提供服务。
本来想找iptables有没有能实现随机对流量做DNAT的模块,但未果。

恳请大家指点NAT方式有没有办法做到流量分担,或者除了NAT的其他实现方式?感谢..

论坛徽章:
0
2 [报告]
发表于 2009-07-17 13:52 |只看该作者
我觉得,如果可以在firewall上面处理的话,只需要添加一些简单的iptables/netfilter的规则就可以了

比如有如下match
   hash(src_ip,src_port)
如果满足match的话则进行如下target处理
  如果 hash(....) = 1 则dnat 到a
   如果 hash(....) =2 则dnat到 b

这个可以根据需求进行改进和优化,实现特定的match 和target

论坛徽章:
0
3 [报告]
发表于 2009-07-17 15:14 |只看该作者
原帖由 luson.liu 于 2009-7-17 13:52 发表
我觉得,如果可以在firewall上面处理的话,只需要添加一些简单的iptables/netfilter的规则就可以了

比如有如下match
   hash(src_ip,src_port)
如果满足match的话则进行如下target处理
  如果 hash(.... ...

你说的没错,如果能动firewall,有很多办法都能解决,比如开两个公网ip,比如一个公网ip两个端口,但用户的需求很变态,就只能在防火墙上给你开一个ip+一个port,要你内部两个server都能提供服务。

论坛徽章:
0
4 [报告]
发表于 2009-07-17 17:11 |只看该作者

回复 #1 pingmm 的帖子

你说的是双机还是负载均衡,我感觉你说的好像是负载均衡。

论坛徽章:
0
5 [报告]
发表于 2009-07-17 17:21 |只看该作者
1. 你可以在firewall和服务器之间加一个中间设备,如果允许的话,再在这个新设备上做文章

2. 你还可以这样做,把你的两台服务器地址设置成10.2.2.3 和10.2.2.4
然后再在a和b服务器上做文章
在a上如果在filter表上如果match失败则丢弃
如match成功则dnat到a本身
(match中hash(...) = 1表示适合于a处理)


在b上如果在filter表上如果match失败则丢弃
如match成功则dnat到b本身
(match中hash(...) = 2表示适合于b处理)

论坛徽章:
0
6 [报告]
发表于 2009-07-17 17:24 |只看该作者
1. 你可以在firewall和服务器之间加一个中间设备,如果允许的话,再在这个新设备上做文章

2. 你还可以这样做,把你的两台服务器地址设置成10.2.2.3 和10.2.2.4
然后再在a和b服务器上做文章
在a上如果在filter表上如果match失败则丢弃
如match成功则dnat到a本身
(match中hash(...) = 1表示适合于a处理)


在b上如果在filter表上如果match失败则丢弃
如match成功则dnat到b本身
(match中hash(...) = 2表示适合于b处理)


这个时候要求a,b以及firewall 的内网口要在同一个冲突域上,即二层上是互通的

多次nat处理会损失性能

论坛徽章:
0
7 [报告]
发表于 2009-07-17 18:16 |只看该作者
原帖由 ji.hf_space 于 2009-7-17 17:11 发表
你说的是双机还是负载均衡,我感觉你说的好像是负载均衡。

是双机还是负载均衡都不是很重要了,关键是要两个都能同时提供服务,HA的问题我们有另外的解决办法。

论坛徽章:
0
8 [报告]
发表于 2009-07-17 18:18 |只看该作者
上面有几位朋友都提到在iptables中用hash??有这样的模块嘛??我找了好久没找到

论坛徽章:
0
9 [报告]
发表于 2009-07-17 18:19 |只看该作者
原帖由 luson.liu 于 2009-7-17 17:21 发表
1. 你可以在firewall和服务器之间加一个中间设备,如果允许的话,再在这个新设备上做文章

2. 你还可以这样做,把你的两台服务器地址设置成10.2.2.3 和10.2.2.4
然后再在a和b服务器上做文章
在a上如果在fil ...

1不可能。
2的话貌似你说的有点问题哦,怎么把流量分到两台?我现在最头疼的就是这点

论坛徽章:
0
10 [报告]
发表于 2009-07-17 21:54 |只看该作者
其实,“流量分到两台”这个方法2是可以做到的

我说的hash是泛指的要求你自己实现:

简单的说,现在你自己添加一个匹配规则(match)内核模块和用户态工具都有,可以参照iptables/netfilter框架添加,网上应该很容易找到,这个match要做的事情是这样的,你通过某种运算(比如hash)计算,参加运算的信息是原ip地址和源端口号,计算的最终结果只有两个1或者2

下面你就可以用这个match,现在我们叫他dispatch

你可以在server a上这么做

iptables -t filter -A -m dispatch 2 -j DROP

iptables -t nat -A -m dispatch 1 -j -to server_a_ip  (dnat)

在server b 上这么做
iptables -t filter -A -m dispatch 1 -j DROP
iptables -t nat -A -m dispatch 2 -j -to server_a_ip (dnat)

具体的iptables命令我忘记了,思想就是每个服务器丢掉自己不应该处理的,处理应该处理的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP