免费注册 查看新帖 |

Chinaunix

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

面临的挑战: 双ISP=>1个内网IP的SNAT/DNAT是否可能? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-18 11:22 |只看该作者 |倒序浏览
有人做过类似的事情吗?

一台电脑3个网卡.1个网卡eth0接内网,其余2个分别接2个不同的ISP. 不同ISP都分别给了不同的公网IP.目的是无论用户访问那个IP都可以通过iptables的设置把数据转发给内网的WWW服务器. 同时内部员工可以用更好的带宽上网.


我实现了合并2个ISP带宽供内部员工上网,参考如下网址:
http://www.chinaitpower.com/2005September/2005-09-13/207221.html

我实现了允许外网访问内部的WWW服务器:

#10.134.1.200 is the DMZ WWW server.
#for ISP1

iptables -A PREROUTING -t nat -i eth1 -d 97.158.253.26 \ --dport 80 --sport 1024:65535 -j DNAT --to-destination 192.168.1.100

iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth1 \
-j SNAT --to-source 97.158.253.26

iptables -A FORWARD -p tcp -i eth1 -o eth0 -d 192.168.1.100 \ --dport 80 -m state --state NEW -j ACCEPT

# Allow forwarding for all New and Established SNAT connections
# originating on the home network AND already established
# DNAT connections
iptables -A FORWARD -t filter -o eth1 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

# Allow forwarding for all 1:1 NAT connections originating on the Internet that have already passed through the NEW forwarding statements above

iptables -A FORWARD -t filter -i eth0 -m state \
--state ESTABLISHED,RELATED -j ACCEPT

注意:上面2个任务是分别实现的.

问题出现在当我同时在这台LINUX,UBUNTU 5.10/KERNEL 2.6.20,上实现上面2个任务时. 外部互联网用户无法再正常访问我们的内部WWW服务器.

我用TCPDUMP检查发现只能收到通过连接ISP网关进来的包:
22:38:41.582040 IP 208.13.87.119.42929 > 65-115-71-34.www: S 2305269667:2305269667(0) win 5840 <mss 1460>

但是没有内部的应答包. 在那台WWW服务器上用TCPDUMP监听没有收到任何包.

因为执行PREROUTING,POSTROUTING和FORWARD的代码我觉得没有问题(如果有,欢迎批评).我怀疑问题处在内部的路由上.但是不能确定.


谢谢,

论坛徽章:
0
2 [报告]
发表于 2006-04-18 13:15 |只看该作者

回复 1楼 cefs99 的帖子

我现在能考虑到的一个可能问题就是.如果给予2个ISP的网关同样的权重,也就是理论上的完全负载平衡(基于round robin随机算法),那么从互联网进来访问WWW服务器的路由就会出现问题.

譬如说table 10 和table 20,这2个路由表,分别用不同的ISP 网关.

如果ISP1给了一个公网IP 211.157.99.11,用eth1, 我做了SNAT/DNAT使得所有访问这个IP 80端口的数据都转发到内部WWW服务器10.134.1.100/eth0上.

如果ISP2给了一个公网IP 211.170.43.88/eth2, 我做了SNAT/DNAT使得所有访问这个IP 80端口的数据同样都转发到内部WWW服务器10.134.1.100/eth0上.

现在有一个来自72.140.176.65的包访问211.157.99.11. 理论上会出现这种情况:

这个包的原始源地址和目标地址为
packet source address         Interface                  packet destination address
72.140.176.65                 来自   eth1                   211.157.99.11
               
经过DNAT转换,这个包的源地址和目标地址变为
packet source address                           packet destination address
72.140.176.65                                       10.134.1.100

根据内部路由,所有到10.134.1.0/24的包走eth0.正常到达内部WWW服务器

那么在回来的时候有可能会这样:


内部WWW服务器的应答包的原始源地址和目标地址为
packet source address         Interface                  packet destination address
10.134.1.100                 来自   eth0                   72.140.176.65
               
这时查询内部路由表如何处理到72.140.176.65的包. 因为是基于round robin的随机负载均衡算法, 2个ISP的路由表应该是等价的.就可能会说走ISP2的网关,eth2!

经过SNAT转换,在到达eth2之前,这个包的源地址和目标地址变为

packet source address           Interface                packet destination address
211.170.43.88                    从 eth2 出去                    72.140.176.65

这就乱套了. 72.140.176.65根本没有向ISP2 的211.170.43.88这个地址发送过包!

所以我的初步结论是,如故连接2个ISP的网关同时为内网用户提供浏览网站以及发布内部WWW等服务器供外部用户访问, 只能指定唯一的路由. 或者ISP1,或者ISP2.不能同时用.

论坛徽章:
0
3 [报告]
发表于 2006-05-08 18:18 |只看该作者
你搞错了NAT的概念
你文中的内部WWW服务器的应答包只可能根据DNAT规则转换成
packet source address           Interface                packet destination address
211.157.99.11                  从 eth2 出去                    72.140.176.65

论坛徽章:
0
4 [报告]
发表于 2006-05-19 17:32 |只看该作者
不好意思,我在外地干活,没仔细看你那么多字。
我个人看法:
因为我刚做过一个与你同样应用的项目,所以发表浅见;你试试配置策略路由看看应该没问题了,另外怀疑你2个公网dnat到一个ip可能还存在问题,可把服务器配置2个ip(可以是同一个网卡)。

有问题再讨论。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP