platinum 回复于:2005-03-08 09:34:30 |
[quote:d344b6f38e="zhanglei590"]MASQUERADE只能是DHCP分配的ip可以做,如PPPOE之类(对外),静态ip是不可以做。..[/quote:d344b6f38e] 你说错了,可以 MASQUERADE只是不用指明源地址而已,其他和SNAT没什么区别 所以为了方便,我无论做什么NAT的时候,都用MASQUERADE,除非一些特殊情况 |
双眼皮的猪 回复于:2005-03-08 09:38:08 |
MASQUERADE是针对网络接口的, SNAT是针对ip的... 个人理解. 做SNAT要注意,假如同时存在SNAT和MASQUERADE,请注意顺序.如果MASQUERADE在前边而且没有什么规则控制的话,SNAT可能就起不到作用了... |
zhanglei590 回复于:2005-03-08 09:39:12 |
那就是NAT的时候默认就是MASQUERADE? 但是我在www.netfilter.org上看的NAT HOWTO上说的,做MASQUERADE只能是DHCP获得的ip才可以做。静态ip需要用别的方法做SNAT... |
双眼皮的猪 回复于:2005-03-08 09:41:35 |
MASQUERADE适合动态ip,譬如adsl,pppoe之类.而SNAT需要有一个或一些固定已经分配给你的ip. 不一定只能是DHCP.也许netfilter上只是举个例子,或者是您英文不大好:) |
platinum 回复于:2005-03-08 09:43:34 |
[quote:cf961dc1f4="双眼皮的猪"]MASQUERADE适合动态ip,譬如adsl,pppoe之类.[/quote:cf961dc1f4] 应该说“更适合” :mrgreen: |
双眼皮的猪 回复于:2005-03-08 09:45:09 |
啊~偶错了~呵呵~ 应该是更适合:) |
双眼皮的猪 回复于:2005-03-08 09:45:46 |
啊~偶错了~呵呵~ 应该是更适合:) |
zhanglei590 回复于:2005-03-08 09:45:59 |
.....我看的是中文版的啊,老大! 它说的很清楚,MASQUERADE是SNAT的一种特例。如同MASQUERADE是SNAT的一个子集一样,做MASQUERADE肯定就做SNAT。(我是这样理解的) |
双眼皮的猪 回复于:2005-03-08 09:47:10 |
可以这么理解~呵呵:) 上面说过,MASQUERADE 更适合 动态ip. 多试几次就好了~光看不行 |
zhanglei590 回复于:2005-03-08 09:50:08 |
那就是如果没有DHCP的话,那还不如直接做SNAT,更合适一些? |
双眼皮的猪 回复于:2005-03-08 09:51:33 |
您用ADSL的时候有固定ip吗?呵呵.. 因为没有固定ip时用MASQUERADE,所以叫做 更适合 如果有固定ip,SNAT跟MASQUERADE效果就一样了~ |
zhanglei590 回复于:2005-03-08 09:53:54 |
嘿嘿~~~我是光纤接入,有固定ip的。 我想,如果是我们这个样子,那还不如直接做SNAT的好,做MASQUERADE还要多判断一次。 |
双眼皮的猪 回复于:2005-03-08 09:56:08 |
OK,祝顺利:) 呵呵~ |
zhanglei590 回复于:2005-03-08 09:59:45 |
说详细一点啊.... 我想既然MASQUERADE是SNAT的特例,那么系统在读到规则时可能先看到的是MASQUERADE,然后一看没有DHCP,就回到做SNAT。(应该提示出错吧...) |
双眼皮的猪 回复于:2005-03-08 09:59:50 |
我不知道他的意思是不是要判断接口的ip...呵呵... 楼主出来讲讲吧 |
zhanglei590 回复于:2005-03-08 10:02:17 |
我也是刚开始看,想向大家请教一下,看我理解的对不... |
双眼皮的猪 回复于:2005-03-08 10:03:14 |
我不懂~你们两个讨论~俺晚上来看结果~哈~ |
platinum 回复于:2005-03-08 10:05:17 |
MASQUERADE不管你的地址转换成什么出去,他只以当前网关的DEFAULT GATEWAY做为伪造的源地址,SNAT 实际上MASQUERADE是先取当前网关IP,然后作为源地址出去 SNAT是读取你的配置里面的地址,然后作为源地址出去 |
platinum 回复于:2005-03-08 10:07:23 |
多WAN的时候,MASQUERADE必不可少 他会自动根据设置的多路由自动选择一条能出去的,作为自己的源端口 |
zhanglei590 回复于:2005-03-08 10:10:03 |
那么SNAT的配置地址,我是不是可以任意给呢?但是它用的是网关地址,在ip数据包里源地址显示的是我给的地址? |
platinum 回复于:2005-03-08 10:13:43 |
只要你任意给的SNAT源地址能被你上一层的设备路由到你的网关上,你就能用 |
zhanglei590 回复于:2005-03-08 10:21:02 |
[quote:873832bad1="platinum"]MASQUERADE不管你的地址转换成什么出去,他只以当前网关的DEFAULT GATEWAY做为伪造的源地址,SNAT 实际上MASQUERADE是先取当前网关IP,然后作为源地址出去 SNAT是读取你的配置里面的地址,然后作为源地址出去[/quote:873832bad1] 那这里的MASQUERADE网关是哪个网关呢?内还是外? |
双眼皮的猪 回复于:2005-03-08 10:27:07 |
MASQUERADE就是SNAT,你前边不是说过了吗? MASQUERADE只是更适合动态ip。其他一样的。 至于上面所说到的,只是nat的概念,了解一下就可以了~ |
platinum 回复于:2005-03-08 10:42:37 |
[quote:7edf1b8aa2="zhanglei590"] 那这里的MASQUERADE网关是哪个网关呢?内还是外?[/quote:7edf1b8aa2] 你做LINUX的机器有几个网关? 他要SNAT的地址应该是能被上一层设备路由到你LINUX上的一个地址 有2种接入方式 1、你的WAN口是一个公网IP,那么,你设置SNAT或者MASQUERADE都可以 2、你的WAN口是一个私网IP,而你的网关也是一个私网IP,但是,ISP给你一些公网IP地址,对于这种情况,你就需要用SNAT来伪造源地址为ISP给你的那些公网IP了,因为只有那些公网IP才可以被ISP路由到你的私网IP来,这种情况下,MASQUERADE就不适合了 |
急不通 回复于:2005-03-08 10:49:07 |
MASQUERADE和SNAT所做的事情基本上是一样的,不过snat要指定出口的ip地址,而配置masquerade时不用指定出口IP地址,可以自动查找出口IP地址用作SNAT,所以不管外网口的地址是静态还是动态,配masquerade都可以工作,很方便(另一方面,方便也是有一定的系统开销作为代价的) |
zhanglei590 回复于:2005-03-08 12:19:39 |
按照双眼皮的意思就是,如果是动态获得的ip的话,做MASQUERADE是最合适的,如果说是静态的话,做MASQUERADE就划不来的... 那么在静态ip的情况下,platinum做哪个更好一些呢? |
platinum 回复于:2005-03-08 12:30:02 |
静态IP的话,用SNAT更直观 如果遇到我说的第二种网络的时候,必须用SNAT |
網中人 回复于:2005-03-08 12:33:56 |
[quote:4e065a5519="platinum"]MASQUERADE不管你的地址转换成什么出去,他只以当前网关的DEFAULT GATEWAY做为伪造的源地址,SNAT 实际上MASQUERADE是先取当前网关IP,然后作为源地址出去 SNAT是读取你的配置里面的地址,然后作为源地址出去[/quote:4e065a5519] 嗯? 上面說的有點不怎麼對哦... 不管 MASQUERADE 還是 SNAT, 都是對 source socket 的改寫. 差別是: SNAT 可改寫為你所指定的 IP MASQUERADE 則是根據 output 界面當時的 IP 來改寫. 在效能上, SNAT 比 MASQUERADE 要快些, 因為可省掉 IP 判斷的動作. 但從便利來看, 則 MASQUERADE 更為靈活, 無需事先抓出界面的 IP . 然而, 在多個 ip alias 的情況下, MASQUERADE 只能使用原生 IP, 而 SNAT 則可讓你指定你想要的 IP . 之前就討論過了: http://bbs.chinaunix.net/forum/viewtopic.php?t=343664 |
双眼皮的猪 回复于:2005-03-08 12:36:44 |
网哥的界面,大陆叫接口~说明一下:) |
網中人 回复于:2005-03-08 12:42:26 |
感謝說明! ^_^ |
platinum 回复于:2005-03-08 12:44:46 |
[quote:1f04228697] 有2种接入方式 1、你的WAN口是一个公网IP,那么,你设置SNAT或者MASQUERADE都可以 2、你的WAN口是一个私网IP,而你的网关也是一个私网IP,但是,ISP给你一些公网IP地址,对于这种情况,你就需要用SNAT来伪造源地址为ISP给你的那些公网IP了,因为只有那些公网IP才可以被ISP路由到你的私网IP来,这种情况下,MASQUERADE就不适合了 [/quote:1f04228697] 这个说法对不对呢? |
zhanglei590 回复于:2005-03-08 12:46:24 |
呵呵~~~~怎么像我在前边所理解的.... |
双眼皮的猪 回复于:2005-03-08 12:48:25 |
我想platinum说明的应该是针对pppoe的(猜).一般来说在isp的局端设备上都加了到pppoe client网段的返回路由~所以这种情况是wan是私网ip,内网口是另外一个网段的私网ip就行。 pppoe是转发的,而不是做nat...所以会有问题... 但是我不明白既然网关是私网ip,为什么isp又给公网ip呢?没见过,能不能讲详细点? |
platinum 回复于:2005-03-08 12:56:58 |
我是这样理解的,不知道对不对 ISP他们负责把私网IP给你路由[color=red:07748fbcad](这里错了,修正一下,应该是NAT)[/color:07748fbcad]出去,然后做一个公网IP的回址路由,这样别人访问公网IP的时候,就能通过私网IP的链路连到客户的路由器上了 |
zhanglei590 回复于:2005-03-08 13:00:14 |
谢谢网中人,你给的链接我看了,又学了一点东西... 请大家继续.... |
双眼皮的猪 回复于:2005-03-08 13:00:26 |
私网地址是不予路由的吧~我觉得应该在外面应该还有一次nat,不然你不可能以私网ip的形式在网络上流通的~ |
zhanglei590 回复于:2005-03-08 13:08:11 |
[quote:be5a878f20="platinum"]鋈ィ?缓笞鲆桓龉?鳬P的回址路由,这样别人访问公网IP的时候,就能通过私网IP的链路连到客户的路由器上了[/quote:be5a878f20] 说的是isp路由我们的外网ip么? |
双眼皮的猪 回复于:2005-03-08 13:09:04 |
[quote:6c736a09e2="platinum"]鋈ィ?缓笞鲆桓龉?鳬P的回址路由,这样别人访问公网IP的时候,就能通过私网IP的链路连到客户的路由器上了[/quote:6c736a09e2] 后面这句话我没看懂,通过私网ip的链路连到客户的路由器上? |
双眼皮的猪 回复于:2005-03-08 13:12:29 |
我睡觉了~各位慢慢聊~这些天老失眠~多梦~烦躁啊~哎~ 各位多多讨论~我过会过来学习,嘿嘿 |
platinum 回复于:2005-03-08 13:14:03 |
我在研究网兄给我的文章 [quote:3d34529397] iptables -t nat -A POSTROUTING -o ppp0 \ -s 192.168.100.0/24 -j MASQUERADE 事實上﹐這是一個 SNAT 的經典例子了﹕當 NAT 處理一個封包的時候﹐如果發現它是來自 192.168.100.0/24 這個網路﹐並且經由 ppp0 送出的話﹐那麼它的來源位址則換成 ppp0 的 IP 位址( socket 的元素之一)。 [/quote:3d34529397] 看来MASQUERADE是不能用于第二种网络结构的? |
双眼皮的猪 回复于:2005-03-08 13:27:09 |
哈~睡不成了~上班上班~ 针对网哥的都是改写“source socket”的,其实我有异议,我觉得source address及source port更合适...BSD的Socket一般用来说明传输层上建立的连接.所以我觉得source socket不够贴切,若有错误,请指出... |
platinum 回复于:2005-03-08 13:37:40 |
看完那个文档,针对第二种网络拓扑(指ISP给私网IP和私网网关,同时给了一个公网地址池),我认为ISP那边实际又做了一次NAT |
zhanglei590 回复于:2005-03-08 14:30:04 |
我想他们应该是做路由吧...nat是不是会负担太重呢? |
網中人 回复于:2005-03-08 14:30:26 |
在一個 packet 裡, source socket 就是 source port + source address. 請理解一下 socket pair 在 packet 中的定義. |
双眼皮的猪 回复于:2005-03-08 14:48:17 |
原来Source Socket=Source address+Source port & ^_^ 我猜 Destination Socket=Destination address+Destination port ^_^ Thanks:) |
網中人 回复于:2005-03-08 15:13:55 |
更精確來講, 解開 tcp packet 最前面 16 個 bit 與 ip packet 的第 96 到第 127 個 bit , 就是 source socket . 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 |
呵呵~~~看来我的观点是对的 |