SNAT与MASQUERADE的区别的一点疑惑[2]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

iptables 程式在作 SNAT 或 MASQUERADE 時, 就是改那裡. 且是 routing process 處理完之後才改的.

解開 tcp packet 第 17 到 32 個 bit 與 ip packet 的第 128 到第 159 個 bit , 就是 destination socket .
那是 DNAT 修改之處. 且是 routing 之前改的.

有空, 再看看我前面貼的貼子吧.

 双眼皮的猪 回复于:2005-03-08 15:18:35 哈~晚上看~我过会儿上下cu,过会儿又上下cu~
最近很烦躁~哈~
恩~晚上下班好好学习学习..
Thanks...

 網中人 回复于:2005-03-08 15:21:59 煩燥是學習的大殺手. 先靜下來再說吧.
要不, 說話可能很容易衝動的呢~~~ 小心.

 linuxpiao 回复于:2005-03-09 08:53:12 ADSL 有固定IP,我現就在用,ISP分給你公ip,你內部的私ip和网絡拓樸,雖有router,但只要在總出口做NAT就ok.內部是不用在nat 了,設置好默認Defaut Gateway 就可了!

 platinum 回复于:2005-03-09 09:31:23 [quote:81d007b621="platinum"]看完那个文档,针对第二种网络拓扑(指ISP给私网IP和私网网关,同时给了一个公网地址池),我认为ISP那边实际又做了一次NAT[/quote:81d007b621]
我还是心里没底SNAT和MASQUERADE都是替换了SOURCE部分,而且是在路由之后才替换的,但是我还是不明白

如果做的是NAT,ISP那边负载是不是太大了?
如果做的是路由,按理说私网IP是不能路由到公网上的,但是有可能路由到ISP的出口之前,然后呢?感觉还要NAT

请网兄继续指点一下 :em16:

 網中人 回复于:2005-03-09 13:58:37 你說的第二種 case , 應該是有一個 router 吧?
router 的 wan 端是一個 private IP, 而 lan 端是一個 public IP 連著一個劃分下來的 subnet .

若是這樣的話, 其實一點也不難理解.
我們很多時候在 wan-wan 兩個 router 之間用 private IP 來連.
只要 router 收到 packet 能知到 which is next hop 就行了.
至於 packet 到了 next hop , 那是目前的 router 不必管的.
而是 next hop 去重復下一個 next hop 的判定.

假設:
你的 subnet 是 public IP, 接到 router 的 LAN port.
然後 router 的 wan 與 isp router lan port 之間接一個 private IP,
再, isp router 的 wan 再接一個 public 就到 internet 去.

你的 host 只要知到 gw 是你的 router lan port,
然後 router 轉到 isp (不必管它是 public 還是 private IP)
isp 轉到 internet. 
這是出去的 packet ...

回來的:
internet 給你的 subnet 的 packet 路由到 isp.
isp 再轉到你的 router (同樣, 別管它是 public 還是 private)
你的 router 轉到 host .
完成!

這裡並沒用到任何的 nat 處理哦...
我想, 這類問題, 轉到 network 版去問, 會有很多人可以回答你.
只是, 我不常去那邊逛啦...

 platinum 回复于:2005-03-09 14:05:34 明白了:)

 60133056 回复于:2005-03-12 11:08:57 受教了

 zhanglei590 回复于:2005-03-13 21:26:41 我想网中人讲的基本上就是tcp/ip的路由问题了,和linux主机好象没有多大关系了吧...
郁闷啊~~~~《tcp/ip协议详解》这本书的路由部分看了好长时间都没看懂...可能那时候心里太乱了吧...等过一阵再看看

 KindGeorge 回复于:2005-03-14 18:32:02 MASQUERADE这个target和SNAT target的作用是一样的,区别就是它不需要指定--to-source 。MASQUERADE是被专门设计用于那些动态获取IP地址的连接的,比如,拨号上网、DHCP连接等。如果你有固定的IP地址,还是用SNAT target吧。

伪装一个连接意味着,我们自动获取网络接口的IP地址,而不使用--to-source 。当接口停用时,MASQUERADE不会记住任何连接,这在我们kill掉接口时是有很大好处的。如果我们使用SNAT target,连接跟踪的数据是被保留下来的,而且时间要好几天哦,这可是要占用很多连接跟踪的内存的。一般情况下,这种处理方式对于拨号上网来说是较好的(这有利于已有那连接继续使用)。如果我们被分配给了一个不同于前一次的IP,不管怎样已有的连接都要丢失,但或多或少地还是有一些连接记录被保留了

即使你有静态的IP,也可以使用MASQUERADE,而不用SNAT 。不过,这不是被赞成的,因为它会带来额外的开销,而且以后还可能引起矛盾,比如它也许会影响你的脚本,使它们不能用。

 cnriver 回复于:2005-03-14 19:53:12 [quote:e67dfbebb8="KindGeorge"]MASQUERADE这个target和SNAT target的作用是一样的,区别就是它不需要指定--to-source 。MASQUERADE是被专门设计用于那些动态获取IP地址的连接的,比如,拨号上网、DHCP连接等。如果你有固定的IP地址,还是用SNAT ta..........[/quote:e67dfbebb8]

分析比较全面, 非常赞成。

 platinum 回复于:2005-03-14 20:00:22 [quote:b555afb8e6="KindGeorge"]即使你有静态的IP,也可以使用MASQUERADE,而不用SNAT 。不过,这不是被赞成的,因为它会带来额外的开销,而且以后还可能引起矛盾,比如它也许会影响你的脚本,使它们不能用。
[/quote:b555afb8e6]
后半句不是很理解

 cnriver 回复于:2005-03-14 20:17:19 其实主要区别是MASQUERADE会带来额外的开销,对计算机的负荷比snat稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。

 platinum 回复于:2005-03-14 21:28:50 [quote:62c07bdd72="cnriver"]其实主要区别是MASQUERADE会带来额外的开销,对计算机的负荷比snat稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。[/quote:62c07bdd72]
这个解释比较满意 :mrgreen:

 zhanglei590 回复于:2005-03-15 18:34:51 呵呵~~~看来我的观点是对的

本文关键:SNAT与MASQUERADE的区别的一点疑惑
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top