MASQUERADE是SNAT的一种特例,MASQUERADE只能是DHCP分配的ip可以做,如PPPOE之类(对外),静态ip是不可以做。在LAN如果不是DHCP是不可以做MASQUERADE么?如果网关对外是静态ip,内部是静态ip,按理说也是不可以做,那我防火墙里的
iptables -t nat -A PREROUTING -p TCP -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -j MASQUERADE 是不是应该提示错误呢?是不是应该作成纯SNAT呢?
| 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 .
本文关键:SNAT与MASQUERADE的区别的一点疑惑
相关方案
|