[网络管理] 请教一个DNAT做负载均衡的问题

weixin_38054276 2010-03-11 11:48:11

服务器上有两个服务,  分别在6666和6667端口上listen, 但是由于某些原因, 公网上的用户只能访问该服务器上的6666端口。
想到iptables的DNAT 功能, 为了让客户端的请求大致均衡的分发到6666和6667端口,  想了一个觉得比较“傻瓜”的办法:

iptables -t nat -A PREROUTING -p tcp  --sport 1024:32767 -d 192.168.80.100 --dport 6666  -j DNAT --to-destination 192.168.80.100:6666
iptables -t nat -A PREROUTING -p tcp  --sport 32768:65535 -d 192.168.80.100 --dport 6666  -j DNAT --to-destination 192.168.80.100:6667

就是对源端口是1024-32767的, 都分发到6666, 源端口是32768-65535的请求, 都分发到6667。  不过觉得不够完美, 毕竟这种不能做到真正的负载均衡。 看了iptables的手册页
也了解DNAT能做某种类型的负载均衡“ DNAT target是非常有用的。比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就可以使用这个 target让防火墙把所有到它自己HTTP端口的包转发给LAN内部真正的Web服务器。目的地址也可以是一个范围,这样的话,DNAT会为每一个流随机分配一个地址。因此,我们可以用这个target做某种类型地负载平衡。”  手册页原话。

所以我把之前的两台规则都干掉, 用下面这一条规则, 想让iptables帮我实现真正的请求均衡的分发到6666和6667的服务:
iptables -t nat -A PREROUTING -p tcp -d 192.168.80.100 --dport 6666  -j DNAT --to-destination 192.168.80.100:6666-6667

不过这样, 发现netstat的结果是:
~$ netstat -na | grep :6666 | grep EST | wc -l
258
~$ netstat -na | grep :6667 | grep EST | wc -l
0
请求根本没有分发到6667端口上的服务哦。

在这里请教各位大拿, 我这种需求: “想到iptables的DNAT 功能, 为了让客户端的请求大致均衡的分发到6666和6667端口”, 能实现么?
先谢过了
...全文
20 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧