免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 枫影谁用了
打印 上一主题 下一主题

[网络管理] 郁悶了,越來越蠢了,問個SNAT的問題 {已解決} [复制链接]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
71 [报告]
发表于 2006-03-02 17:01 |只看该作者
原帖由 skylove 于 2006-3-2 16:58 发表


外网的肯定是动态指到你的ppp0上这个没疑问

问题是内部用的这个dns到底是把abc.com解析到ppp0上还是192.168.0.1 上是有2种可能的,而依据2种可能,就造成了client事实上访问的是不同的2个ip(虽然都在同一机器 ...


是的是的.我也在想这个问题.

我在客户机 ping abc.com等於192.168.0.1
我在gw上ping abc.com等於 外網ip

我們想到一塊了。

论坛徽章:
0
72 [报告]
发表于 2006-03-02 17:11 |只看该作者
原帖由 skylove 于 2006-3-2 17:01 发表


你这个固然简单,但是内网client访问的时候来回的时候,都去gw的外网ip那里绕了一圈呢~~~~多了2个环节(从eth0到ppp0)

会吗?不妨说说怎么绕的?为何会绕?
你可知 SNAT 与 MASQUERADE 的区别在哪里?
你可知“直通路由”的概念是什么?

说到效率问题,其实也有办法,不过你要先解答我上面的问题才可以,因为和上面的问题有关 ^_^

论坛徽章:
0
73 [报告]
发表于 2006-03-02 17:19 |只看该作者
原帖由 枫影谁用了 于 2006-3-2 17:01 发表


是的是的.我也在想这个问题.

我在客户机 ping abc.com等於192.168.0.1
我在gw上ping abc.com等於 外網ip

我們想到一塊了。


我觉得还是把问题拆解开成2块来看比较合适

1.由于你的client用到的dns是内部,那么事实上来,这个abc.com我们就可以直接看作192.168.0.1;而对外我们就直接把你的abc.com看做aa.aa.aa.aa. 注意,要满足这个条件,则你内部的client,只可以使用一个dns,就是你内部的这个dns server.

2.不管对内访问,对外访问,事实上都是伪装包

   1.对内: 将来自eth0接口上的除192.168.0.3以外的192.168.0.0/24段访问192.168.0.1 的8000端口的tcp请求伪装成由192.168.0.1对192.168.0.3:8080发出的tcp请求包;

    2.对外:将来自ppp0接口上的非192.168.0.0/24段以外的访问aa.aa.aa.aa的8000口的tcp请求,伪装成aa.aa.aa.aa对192.168.0.3:8080口的请求;

    (以上的192.168.0.1和aa.aa.aa.aa分别是可以与内网/外网直接通信的网卡接口的ip地址)

    根据以上2句来看,的确是需要做snat才对的...而且第一方式该是做到snat 192.168.0.1这个ip上才能解释地过去~~~之所以第2方式不用显性地做snat,是因为我们正好做了NAT代理功能,等于做了个隐性的snat给第2情形

论坛徽章:
0
74 [报告]
发表于 2006-03-02 17:26 |只看该作者
原帖由 platinum 于 2006-3-2 17:11 发表

会吗?不妨说说怎么绕的?为何会绕?
你可知 SNAT 与 MASQUERADE 的区别在哪里?
你可知“直通路由”的概念是什么?

说到效率问题,其实也有办法,不过你要先解答我上面的问题才可以,因为和上面的问题有关 ...



用不着这么麻烦,根据楼主的情形简单分析一下就知道绕没绕了.

假设将ppp0停掉,此时在内网里任何一台client上进行对web的访问

如果用我的方案,是依然可以访问到web的,因为我在snat的时候只snat到eth0这里;而根据您的方案会无法访问到,因为经过了ppp0.

论坛徽章:
0
75 [报告]
发表于 2006-03-02 17:40 |只看该作者
原帖由 skylove 于 2006-3-2 17:26 发表



用不着这么麻烦,根据楼主的情形简单分析一下就知道绕没绕了.

假设将ppp0停掉,此时在内网里任何一台client上进行对web的访问

如果用我的方案,是依然可以访问到web的,因为我在snat的时候只snat到eth0这 ...

你对“直通路由”的理解有问题,按你的意思:
假如有一台机器 1.1.1.1,他的网关是 1.1.1.254,而 1.1.1.254 上双网卡,另一个地址是 2.2.2.254
那么,从 1.1.1.1 ping 2.2.2.254 比从 1.1.1.1 ping 1.1.1.254 对网关那台机器来说负载要大很多,理由是“绕了一圈”?

另外,你对 nat 和 routing 也有理解上的问题,SNAT 只是修改源地址,不负责选路,选路是 routing 的事
所以,我实在想不通你说的“如果用我的方案,是依然可以访问到web的,因为我在snat的时候只snat到eth0这里”是什么意思

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
76 [报告]
发表于 2006-03-02 17:49 |只看该作者
原帖由 skylove 于 2006-3-2 17:19 发表


我觉得还是把问题拆解开成2块来看比较合适

1.由于你的client用到的dns是内部,那么事实上来,这个abc.com我们就可以直接看作192.168.0.1;而对外我们就直接把你的abc.com看做aa.aa.aa.aa. 注意,要满足这个条 ...



感謝你很詳細的講解。這個我理解。

可就是寫出的腳本不行。以前確實是一個DNAT(外網用)和一個SNAT(內網用)即可。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
77 [报告]
发表于 2006-03-02 17:50 |只看该作者
原帖由 platinum 于 2006-3-2 17:40 发表

你对“直通路由”的理解有问题,按你的意思:
假如有一台机器 1.1.1.1,他的网关是 1.1.1.254,而 1.1.1.254 上双网卡,另一个地址是 2.2.2.254
那么,从 1.1.1.1 ping 2.2.2.254 比从 1.1.1.1 ping 1.1.1.25 ...


白金說的沒錯。

但是我想說的是白金大人,用了你的規則還是外網可以訪問,內網不能訪問。:em12::em12::em12:

论坛徽章:
0
78 [报告]
发表于 2006-03-02 18:01 |只看该作者
原帖由 枫影谁用了 于 2006-3-2 17:50 发表


白金說的沒錯。

但是我想說的是白金大人,用了你的規則還是外網可以訪問,內網不能訪問。:em12::em12::em12:

不会吧
麻烦你贴一下下列信息
1、nat 那台机器的 iptables-save
2、nat 那台机器的 ifconfig(重要信息可屏蔽)
3、nat 那台机器的 ip r(重要信息可屏蔽)
4、192.168.0.3 的 route print
5、内网随便一台要访问 192.168.0.3 的 route print
6、内网随便一台机器的 ping www.abc.com(你公司的域名)

论坛徽章:
0
79 [报告]
发表于 2006-03-02 18:02 |只看该作者
原帖由 platinum 于 2006-3-2 17:37 发表

你对“直通路由”的理解也有问题,按你的意思
假如有一台机器 1.1.1.1,他的网关是 1.1.1.254,而 1.1.1.254 上双网卡,另一个地址是 2.2.2.254
那么,从 1.1.1.1 ping 2.2.2.254 比从 1.1.1.1 ping 1.1.1.25 ...



看来你理解错我的意思了.

1. 关于路由的理解我跟你是一样的,但是有区别的是我认为经过的路由经过不稳定的环节,出错的可能性越高;(下面会提到)

2. 根据你的3句nat,是将所有访问web的地址,全都掩成ppp0作为snat地址的没错吧? 这在ppp0,eth0 都是正常的情况下,是没问题的; 但由于用的是ppp0,很容易看出是拨号上网方式,那么这类拨号上网方式就存在着一定的断网可能.

那么当ppp0一旦断开的情形下,此时不光是公网用户无法访问内网的0.3了,而且内部网络的机器由于这3句的作用也是无法访问到0.3的(因为断网后snat后的源地址ppp0根本已经不存在的了).


当然,如果您觉得ppp0连接出问题的概率很小,或者说每次断网后通知内网用户使用192.168.0.3直接访问,或者是此时在nat机上临时修改snat命令,那么就当我没提吧. 我只是基于工作环境而论的.

我所说的"绕"或许用词不准确,但实在是没找到更好的词语来表达. 因为我觉得在
外--ppp0--nat--eth0---web

这样一个环境中,对于内网对web的访问,是可以在eth0环节完成snat的,没有必要...(这里该怎么用词才贴切??) 到ppp0上snat.因为会有我上面提到的问题.

=======================================
顺便请您注意一下楼主的问题和其他类似做透明映射的问题有略微区别
1.楼主的内网是通过192.168.0.1:8000访问这台web的
2.其他朋友时常提出的问题是怎么和外网一样访问这台web(等于是从nat公网ip:8000 访问这台web)

您的解答用在第2类朋友问题的解答上无疑是高效简洁而正确的,但对这个第1问题事实上我认为我的解决在实际应用中效果会更好.

论坛徽章:
0
80 [报告]
发表于 2006-03-02 18:07 |只看该作者
2. 根据你的3句nat,是将所有访问web的地址,全都掩成ppp0作为snat地址的没错吧?

也许你应该先回答我 SNAT 和 MASQUERADE 的区别是什么
理解了 SNAT 和 MASQUERADE 的区别后,区分开 nat 和 routing 的区别后,问题自然迎刃而解了

说到负载的问题,还是要说 SNAT 和 MASQUERADE 的区别,不过也涉及到 netfilter 的问题
不过我还是想让你先回答完上面的问题后再讨论,当你自己回答完那个问题,也许你会突然发现想通了一个东西 ^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP