重叠MASQUERADE和DNAT

我如何在内部IP空间上使用iptables将IP伪装(PAT / Overload)与目标NAT重叠?

我想要的是一个私有networking,即10.0.0.0/24 ,其中一些公共IP被映射到其内部的各种地址。 但是,如果有一个来自10.0.0.0/24的连接,不pipe是否有DNAT公共IP,它将被重载到特定的公共IP。

我希望我也能理解你的问题。 你对卢克的回应在baumgart回答的评论中让我猜想我的理解你的要求,但是我要发布这个。

Baumgart告诉你在他的答案中会做些什么,但他最后一段谈到“…可能会导致客户端 – 服务器应用程序出现问题…”是不正确的。 他忘记了Netfilter的NAT实现是有状态的。 Netfilter中NAT引擎的有状态是你的朋友。

当互联网主机和你的一个公共IP之间的对话被取名为私有IP地址时,Netfilter不会将来自私有IP的响应包“MASQUERADE”回送到互联网主机。 这并不是说响应数据包没有NAT,但它们不是“MASQUERADED”。 相反,Netfilter暗示“做正确的事情”,SNAT将来自专用IP的响应数据包回送到互联网主机发起对话的公共IP地址。 这真的很光滑。

同时,对于源自私有IP地址到因特网的会话(不响应来自因特网的传入请求),将应用“MASQUERADE”规则。

基本上,Netfilter做你想要的“开箱即用”。 我花了一些时间在testing设置上嘲笑这一点,只要我能正确理解你的要求,它就是在做你正在寻找的东西。

(对不起,今天早些时候不能回答 – 我今天早些时候忙于一些事情,不能,你知道,尽可能多地玩服务器错误。)

我希望我能理解你的问题

听起来就像你想从外部的内部networking到外部的一个IP地址有一个标准的NAT – 是的? 这部分是用这个来实现的:

iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -j MASQUERADE

至于将公有IP映射到内部IP,这应该适用于每一个:

iptables -t nat -A PREROUTING -d $EXTERNAL_IP -j DNAT --to $INTERNAL_IP

这会给你一个从外部到内部IP的单向映射。 来自一个公共IP的stream量将被发送到内部框中,然后它会响应,但响应将通过默认外部IP进行响应。 它可能不是一回事。 这可能会导致客户端服务器应用程序出现问题。