虽然技术上可行,但不要使用 IP MASQ 来做这件事。对于这种网络设计,有更好的解决方案。
MASQ 是一种 1:多 NAT 设置,它不是执行您想要操作的正确工具。您需要的是多:多 NAT 解决方案或桥接设置。
注意:对于那些考虑在内部网卡上使用“IP 别名”启用多个 IP 地址,然后仅仅端口转发所有这些端口 (0-65535),并最终使用 IPROUTE2 来维护正确的源/目标 IP 对的用户。这在 2.0.x 内核上已成功完成,在 2.2.x 内核上不太成功。无论成功与否,这不是正确的方法,这完全是黑客行为,而且它不是受支持的 MASQ 配置。请认真考虑 2.4.x 内核上的 IPTABLES,或者在较小程度上,对于 2.2.x 内核,查看第 7.30 节 IPROUTE2。
无论如何,对于将外部 IP 地址转发到内部主机,您基本上有三种可能性。
1. Route the external IPs (This does NOT involve IPMASQ at all but requires special WAN addressing and routing setup from your ISP): Internet -- Some public WAN -- Linux -- DMZ segment IP address Server PUBLIC IPs | +------ Internal net private IPs |
2. 1:1 NAT (Most easily done via IPTABLES or with IPCHAINS and IPROUTE2 but still some protocols cannot deal with NAT) Internet -- Linux -- DMZ segment Server Private IPs natted to 1:1 PUBLIC IPs | +------ Internal net private IPs |
3. Bridging or ProxyARP: The Bridging method is one of the more popular methods that many commercial firewalls do and it's very slick. Alternatively, you can use the ProxyARP method which works well without some of the complications (or benefits of bridging). With both solutions, all public IPs can transparently flow through the Linux server to the DMZ but via firewall inspection. Internet -- Linux -- DMZ segment Server PUBLIC IPs | +------ Internal net private IPs |
每种解决方案都有优点和缺点。
项目 #1:如果您足够幸运,您的 ISP 会为您设置好这一切(非常罕见),您只需要使用基本的 'route' 命令即可使其运行。这是最健壮的解决方案,并且不需要任何形式的 IPMASQ 或 NAT 即可工作。
项目 #2:1:1 NAT 尚未在本 HOWTO 中介绍,但如果您需要帮助,请给我发邮件,我会帮您一把。
项目 #3:ProxyARP 非常简单明了,但仅在特定情况下且仅适用于以太网网络。桥接功能更强大,但可能需要重新编译内核和进行一些高级配置。最终,这些解决方案都不再是 IPMASQ,因此我无法帮助您设置它们。幸运的是,还有其他 HOWTO 涵盖此主题。
http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.bridging.html
http://www.tldp.org/HOWTO/Ethernet-Bridge-netfilter-HOWTO.html
注意: 如果您有桥接的 DSL 或有线调制解调器连接(不是 PPPoE),情况会稍微复杂一些,因为您的设置不是路由的。不过不用担心,请查看 Bridge+Firewall Mini HOWTO 和 Bridge+Firewall+DSL Mini HOWTO。这些 HOWTO 将教您如何让您的 Linux 机器在单个接口上支持多个 IP 地址!