在iptables的上下文中,MASQUERADE是什么意思?

在iptables中,我经常看到目标MASQUERADE。那是什么意思?我搜索了很多东西,但我需要有人以简单易懂的方式解释一下MASQUERADE是什么?
一个例子(摘自this answer)是:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
3个回答

这是一个依赖于iptables实现的算法,它允许在不中断原始流量的情况下进行流量路由。
当我想创建一个虚拟的WiFi适配器并共享我的WiFi时,我使用masquerade算法。
我不是在谈论通过WiFi共享以太网连接,而是通过将WiFi连接伪装到虚拟适配器上来共享WiFi连接。这实际上可以让你通过WiFi共享你的WiFi连接。

.

.

阅读此内容并向下滚动至MASQUERADE: http://billauer.co.il/ipmasq-html.html 深入了解请阅读此内容:http://oreilly.com/openbook/linag2/book/ch11.html 所有关于“Connectify for linux”的问题都可以通过实施MASQUERADE算法来解决。
直接示例请访问此页面:http://pritambaral.com/2012/05/connectify-for-linux-wireless-hotspot/ 我没有阅读最后一个链接!!!但以下是准确的摘录/示例。
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i wlan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我真的不喜欢搜索引擎把算法说得像是一种邪恶的黑客行为。我只是用它来与我的安卓手机分享互联网而已。
最终编辑:这个链接是最好的 http://gsp.com/cgi-bin/man.cgi?section=3&topic=libalias

就像你第一个链接一样——完美无缺——这正是我正在寻找的东西 :) - Mohammad Reza Rezwani
2我已经测试了你代码清单中的第三行MASQUERADE规则,链接确实被分享并在各个接口上可用。因此,我对第二行的FORWARD规则有些困惑,它是用来做什么的? - 千木郷

MASQUERADE是一个iptables目标,可以在编写规则时(当服务器动态获取外部IP时)代替SNAT目标(源NAT),以防止不知道inet接口的外部IP。

1当已知IP地址时,应该使用什么? - Luc
8@Luc,SNAT目标(源网络地址转换)用于定义应该放置在原始主机的IP数据包中的源IP而不是原始源IP。就像这样-j SNAT --to-source xx.xx.xx.xx其中xx.xx.xx.xx是所需接口的外部IP。 我不能说它_应该_在已知外部IP时使用。我更喜欢使用MASQUERADE而不是SNAT来使规则灵活,并且不受我当前拥有的特定外部IP的限制。 - Sergey P. aka azure

经过对以上答案的研究,我明白了以下原因:
伪装允许整个内部IP地址网络通过一个外部IP地址进行操作,并且伪装允许从一种协议转换到另一种协议(有线/无线)。
当MASQUERADE链从计算机发送数据报时...
1. 记录数据报的类型,如“TCP”,“UDP”,“ICMP”等。注意:未知类型可能无法正确通过伪装。 2. 修改数据报,使其看起来像是由路由器机器自身生成的(即外部地址)。 3. 记住已经这样做,并记录本地源和外部目标IP地址。 4. 使用单个外部IP地址将数据报传输到互联网上。
注意:当目标主机接收到此数据报时,它会认为数据报来自一个路由主机,并将任何回复数据报发送回该地址。
当Linux的MASQUERADE链从其互联网连接接收到数据报时,
  1. 它会在其已建立的伪装连接表中查看这个数据报是否实际属于局域网上的一台计算机。
  2. 如果是的话,它会撤销在正向路径上所做的修改,并将数据报传输给局域网上的计算机。

MASQUERADE链对于内部创建整个私有IP地址空间以及转发可能不兼容的数据包非常有用。

以太网或有线协议假设数据包来自源地址并进行报告。无线协议则假设数据包正在重复发送并进行报告,同时还保留了原始源地址。

因此,Wifi和以太网不能直接桥接,因为它们是不兼容的。伪装将导致数据包被重建,并能处理有线和无线标准之间的转换。注意:有办法使计算机在内部接受不兼容性并进行桥接,但如果没有完整的伪装,桥接欺骗将从外部视为安全风险,并且那些请求将被拒绝。


3好的解释,但从技术上讲,MASQUERADE 是一个目标,而不是一个链。 - toppur