通过 NAT 的虚拟网关

通过 NAT 的虚拟网关

我有以下网络设置:

网关:

Internet <-- eth0 : a.b.c.d (static address)
Clients <-- eth1  : DHCP at server at 172.16.0.1, leasing 172.16.0.0/24

客户:

Gateway <-- eth0: 172.16.0.0/24

客户端可以访问互联网并且转发正常。我想创建某种“虚拟”地址,客户端可以通过网关访问该地址,但该地址实际上是互联网上的某些机器。

因此,当他们连接时,172.32.1.1他们实际上连接到谷歌等。我用NAT尝试过:

TARGET=$(dig -q google.com)
VIRTUAL=172.32.1.1
iptables -t nat -A PREROUTING -d "$VIRTUAL" -j DNAT --to "$TARGET"
iptables -t nat -A POSTROUTING -s "$TARGET" -j SNAT --to "$VIRTUAL"

这种方法可行,但是当我从网关 ping 它时,我得到了

From 20.249.x.y icmp_seq=1 Destination Net Unreachable

(其中 20.249.xy 是我的网关的网关),当我从客户端跟踪到该虚拟 IP 时,我得到以下信息:

traceroute to 172.32.1.1 (172.32.1.1), 30 hops max, 38 byte packets
 1  172.32.1.1 (172.32.1.1)  31.886 ms  31.638 ms  34.029 ms
 2  172.32.1.1 (172.32.1.1)  39.660 ms  40.489 ms  39.153 ms
 3  172.32.1.1 (172.32.1.1)  41.879 ms  40.367 ms  40.436 ms
 4  172.32.1.1 (172.32.1.1)  47.375 ms  48.200 ms  48.878 ms
 5  172.32.1.1 (172.32.1.1)  47.801 ms  47.280 ms  47.405 ms

这对我来说看起来非常奇怪。有办法解决这些问题吗?我试图使用ip tunnel,但看起来它也需要不同的端设置,这显然是我做不到的。

服务器上的 iptables 配置-A FORWARD -i eth1 -j ACCEPT仅包含这两个规则。

答案1

您可能想要刷新现有的损坏的 iptables 规则,并从头开始。在充当网关的 Linux 机器上,假设以下条件:

linux网关有两个网卡; eth0 面向 LAN,而 eth1 面向 WAN。

在网关上启用 IP 数据包转发:

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

根据我们的测试计划在 eth0 上创建两个测试虚拟 IP (VIP)

$ sudo ifconfig eth0:1 10.1.1.1 netmask 255.255.255.0
$ sudo ifconfig eth0:2 10.8.8.8 netmask 255.255.255.0

按照我们的计划配置 iptables

sudo iptables -t nat -A PREROUTING -d 10.1.1.1 -j DNAT --to 1.1.1.1
sudo iptables -t nat -A PREROUTING -d 10.8.8.8 -j DNAT --to 8.8.8.8
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

在这种情况下,当用户 ping VIP 时10.1.1.1,将被重定向到 Cloudflare 的1.1.1.1

如果用户 ping VIP,10.8.8.8他们将被重定向到 Google 的8.8.8.8

10.1.1.1 ---> 1.1.1.1
10.8.8.8 ---> 8.8.8.8

答案2

我尝试使用 NAT [...],它以某种方式工作,但是当我从网关 ping 它时,我得到 [网络无法访问]

顾名思义,PREROUTING 和 POSTROUTING 链仅用于进入网关并路由到外部的数据包。

这尤其意味着它们不适用于源自网关的任何数据包,例如您正在执行的 ping。没有办法解决这个问题,过滤器链这样就很奇怪。但对于您的用例,您只需要来自客户端的 NAT,所以这并不重要。

(顺便说一句,您只需要 DNAT;这将创建一个 CONNTRACK 条目,并且反向 NAT 将自动完成)。

相关内容