![具有多个目标的 Linux 2.6/Netfilter/Netmap](https://linux22.com/image/690871/%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E7%9B%AE%E6%A0%87%E7%9A%84%20Linux%202.6%2FNetfilter%2FNetmap.png)
我想创建与另一个网络的 VPN 连接,但我们必须将我们的地址 (172.16.0.0/22) 映射到新 IP,因为目标网络也在使用我们的 IP。因此,我们尝试使用 NETMAP 目标设置此连接。我们想访问目标处的 3 个网络中的服务:1.1.0.0/17、3.3.0.0/16、5.5.0.0/16(仅作为示例!)此外,我们无法 1:1 映射网络,但我们只有一个 IP 地址被目标网络接受(192.168.72.1)。我配置了以下 nat 规则:
Chain eth0_in (1 references)
target prot opt source destination
NETMAP all -- 1.1.0.0/16 192.168.72.1 172.16.0.0/22
NETMAP all -- 3.3.0.0/16 192.168.72.1 172.16.0.0/22
NETMAP all -- 5.5.0.0/16 192.168.72.1 172.16.0.0/22
Chain eth0_masq (1 references)
target prot opt source destination
MASQUERADE all -- 172.16.0.0/16 anywhere policy match dir out pol none
SNAT all -- 172.16.0.0/16 anywhere policy match dir out pol none to:192.168.72.1
Chain eth0_out (1 references)
target prot opt source destination
NETMAP all -- 172.16.0.0/22 1.1.0.0/16 192.168.72.1/32
NETMAP all -- 172.16.0.0/22 3.3.0.0/16 192.168.72.1/32
NETMAP all -- 172.16.0.0/22 5.5.0.0/16 192.168.72.1/32
这部分有效。iptables 重新加载后访问的第一个地址有效,但所有其他地址均无效。例如
telnet 1.1.0.1 works
telnet 3.3.0.1 fails
-- 重新加载所有 iptables
telnet 3.3.0.1 works
telnet 1.1.0.1 fails
出了什么问题?是否可以将一个网络映射到一个 IP 以用于多个目的地?
答案1
系统上还配置了 ipsec 隧道,但存在一些不必要的交互。禁用它后,netmap 可以按预期完美运行。经过一番检查,我们发现策略级别存在错误,该级别设置为必需,而不是唯一。再次使用“唯一”启用 ipsec 隧道解决了该问题。