Chinaunix

标题: 多IP进行SNAT的问题 [打印本页]

作者: wchun    时间: 2006-09-29 11:51
标题: 多IP进行SNAT的问题
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 900
net.ipv4.netfilter.ip_conntrack_buckets = 1048576
net.ipv4.netfilter.ip_conntrack_count = 56567
net.ipv4.netfilter.ip_conntrack_max = 1048576


由于网络规模大,有几千台机器吧。高峰时期ip_conntrack_count 可以到20万。使用6个公网地址做SNAT.

/sbin/iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j SNAT --to-source xxx.xxx.xxx.1-xxx.xxx.xxx.6

现在使用起来没有任何问题。使用中发现公网地址是随机的,浏览器刷新一次就会换一个。

统计/proc/net/ip_conntrack ,6个公网IP 利用均摊。

现在的问题是登陆论坛 邮箱等会不断提示未登陆,无法通过验证。估计是服务器端发现来源ip改变的缘故。

不知道能否给小弟些建议?
作者: platinum    时间: 2006-09-29 12:29
针对特定的 destination 使用固定的 IP 去 SNAT
作者: wchun    时间: 2006-09-29 12:42
谢谢大哥回复,这个工作也太大了。
好多使用diz 的论坛存在这个问题,21cn的邮箱也有这个问题。
也想过不同的来源使用不同的公网IP进行NAT,只因为经过两层NAT,有几个来源地址本身就是下一级的NAT,不好分。

不知道能不能netfiter处理snat的时候,使用完一个IP再去使用下一个IP,不出现随机 平均使用的问题。

[ 本帖最后由 wchun 于 2006-9-29 12:47 编辑 ]
作者: platinum    时间: 2006-09-29 13:17
我有个问题
为何要浪费那么多 IP 去 SNAT 呢?是怕 sock 不够用吗?
作者: wchun    时间: 2006-09-29 13:39
最理想的情况,只有65535个端口可以使用,我定义的是1024-65500,当conntrack超过65535-的时候.发现.丢包严重无法上网。
一个IP显然是不够的。
也不知道是不是我的理解不对,请指教。
作者: platinum    时间: 2006-09-29 13:47
1、“我定义的是1024-65500” 没必要,画蛇添足多此一举
2、可以将网络分成若干的段,分段做固定 IP 的 SNAT,这样出了问题也相对好追究
作者: wchun    时间: 2006-09-29 13:52
谢谢回复,我进行的NAT是在核心层,下面其中两个区域已经是通过NAT上来的,相当于是两次NAT。
作者: wchun    时间: 2006-09-29 13:57
^_^
默认状态,cat /proc/sys/net/ipv4/ip_local_port_range
1024    65000
想再增加500,呵呵。
作者: ttvast    时间: 2006-09-30 05:32
60000个端口,表示你可以向同一个ip地址同一个端口发起60000个连接,还不够吗?
你这种情况,请考虑使用iptables SAME target,不知道为什么这么重要的东西man里面没有

SAME v1.2.11 options:
--to <ipaddr>-<ipaddr>
                                Addresses to map source to.
                                 May be specified more than
                                  once for multiple ranges.
--nodst
                                Don't use destination-ip in
                                           source selection
作者: wchun    时间: 2006-09-30 09:44
60000个端口,表示你可以向同一个ip地址同一个端口发起60000个连接?

好像不是这样子的吧?

NAT必须要建立一个会话表来对应数据包与内部真实主机的对应关系.
作者: wchun    时间: 2006-09-30 09:49
11.16. SAME target
The SAME target works almost in the same fashion as the SNAT target, but it still differs. Basically, the SAME target will try to always use the same outgoing IP address for all connections initiated by a single host on your network. For example, say you have one /24 network (192.168.1.0) and 3 IP addresses (10.5.6.7-9). Now, if 192.168.1.20 went out through the .7 address the first time, the firewall will try to keep that machine always going out through that IP address.


谢谢,看起来很不错,等我试试~
作者: wchun    时间: 2006-09-30 10:13
Option --to
Example iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j SAME --to 10.5.6.7-10.5.6.9
Explanation As you can see, the --to argument takes 2 IP addresses bound together by a - sign. These IP addresses, and all in between, are the IP addresses that we NAT to using the SAME algorithm.  
Option --nodst
Example iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j SAME --to 10.5.6.7-10.5.6.9 --nodst
Explanation Under normal action, the SAME target is calculating the followup connections based on both destination and source IP addresses. Using the --nodst option, it uses only the source IP address to find out which outgoing IP the NAT function should use for the specific connection. Without this argument, it uses a combination of the destination and source IP address.
作者: wchun    时间: 2006-09-30 11:33
谢谢,现在已经正常了。

把原先的
/sbin/iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j SNAT --to-source xxx.xxx.xxx.1-xxx.xxx.xxx.6
修改为
/sbin/iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j SAME --to xxx.xxx.xxx.1-xxx.xxx.xxx.6

没有使用参数 --nodst
不知道加不加参数有什么实质上的不同。
作者: ttvast    时间: 2006-09-30 14:44
nodst我估计是应用在如下情况
用户要访问的是一个服务器群组,有很多个ip,而这些服务器群组形成一个应用。如果某一个用户用不用的ip去访问这个服务器群组中的不同服务器也会发生错误。
那么nodst可以让NAT无论某一用户访问什么网站,他第一次用什么ip出去以后还是用这个ip出去




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2