[网络管理]
请教一个DNAT做负载均衡的问题
服务器上有两个服务, 分别在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端口”, 能实现么?
先谢过了