如何用iptables实现两次nat

我想做两次NAT

devise是:

LAN - A 192.168.1.10/24 OpenSwan VPN Public IP 5.5.5.5 <------VPN-----> Public IP 6.6.6.6 Open Swan --- > LAN B 192.168.1.20/24 

当我从源192.168.1.10 ping我要改变源1.1.1.x/24和目的地2.2.2.10/24

因此,机器在局域网192.168.1.10将ping目的地2.2.2.10源IP NAT 1.1.1.10和数据包将命中192.168.1.20

由于子网重叠,我不能在局域网路由表中放192.168.1.20的路由,所以我想ping一个虚拟IP 2.2.2.10 ,当数据包到达Openswan VPN的时候,它的目的地址是192.168.1.20

那么SiteS OpenSwan上的NAT语句是什么?

(注意我没有访问B站点的网站,所以网站A上的所有更改都打开了)

是否需要LAN A和LAN B使用相同的子网,还是可以更改?

我也衷心希望你给出的1.1.xx和2.2.xx IP只是一个例子 – 在现实世界中,你会想使用RFC1918地址。

在基本层面上,您所描述的是应用源NAT和目标NAT,即SNAT和DNAT。

所以在理论上,下面应该工作:

 -t nat -A PREROUTING -d 2.2.2.10 -j DNAT --to-destination 192.168.1.20 -t nat -A POSTROUTING -s 192.168.1.10 -j SNAT --to-source 1.1.1.10 

不幸的是,如果你没有访问网站B的VPN服务器,那么这是行不通的。

而它不起作用的原因是,当局域网A上的机器试图达到1.1.1.10时,你的局域网一台VPN服务器需要把它转换回192.168.1.20。 还有一个问题,即LAN B的VPN服务器应该如何处理1.1.1.10的源IP – 你需要将数据包发送回原始发件人,而且对于我来说,看起来要简单得多只有局域网A使用10.1.1.1/24

正如你所提到的,你不能让你的局域网一个VPN服务器的路由正确到192.168.1.20,因为你的局域网VPN服务器认为该局域网是它的子网。

添加一个特定的路线可能会有所帮助(例如ip r通过IP添加192.168.1.20/32),但这听起来有点脆弱 – 我以为一个更可行的解决scheme将是分割你的/ 24,并分配一个/ 25 (如果你必须在两端保持相同的局域网IP地址)。

所以我会倾向于认为你最好的select是试图改变LAN A.

与B不同/ 24将会起作用,而且在隧道的任一侧也会有一个/ 25。