如何静态NAT多个连接到iptables中的单个IP地址

我过去一直在使用ipfilter。 这是我在那里使用的:

map-block tun0 192.168.1.0/24 -> 20.20.20.0/24 

某些远程应用程序要求多个连接全部来自相同的IP地址。 所以,我想告诉iptables有一个IP地址之间的静态映射,并使用一个主机相同的IP地址(即使用一些魔术select一个端口)。 我该怎么做呢?

使用带有persistent选项的iptables SNAT目标来保持为特定客户端select的IP相同:

iptables --table nat --append POSTROUTING --out-interface tun0 --source 192.168.1.0/24 --jump SNAT --to-source 20.20.20.0/24 --persistent

你可以用netfilter做类似的事情:

 iptables -t nat -A POSTROUTING -o tun0 -s 192.168.1.0/24 -j SNAT --to 20.20.20.0/24 

你可以在这里阅读iptables NAT howto。

请参阅iptables -j SNAT – to-source [ipaddr [-ipaddr]] – 持续

我不知道这是多么“静止”。 也许映射在重新启动时丢失。 如果这是一个问题,那么你可以通过明确的规则为每个地址configuration静态映射。

IIRC有一个工具(不幸的是我不记得名字),它可以将源地址或目标地址映射到链上,这样就不需要带有254个条目的链:

 iptables ... -s 192.168.1.1 -j ... iptables ... -s 192.168.1.2 -j ... iptables ... -s 192.168.1.3 -j ...