来自 OpenVPN 隧道的数据包的 SNAT

来自 OpenVPN 隧道的数据包的 SNAT

配置如下:

    LAN 1                                     LAN 2
address is not                            192.168.0.0/24 
  important
                                          192.168.0.1/24
172.16.0.2/24  <-->  172.16.0.0/24  <-->  172.16.0.1/24
    client                LAN                 server
                        OpenVPN

因此,有一个通往 192.168.0.0/24 网络的网关,地址为 192.168.0.1。并且有一个通过 OpenVPN 隧道连接的客户端。客户端应该能够访问 192.168.0.0/24 网络中的任何服务器,就像它在这个网络中一样。我在 iptables 中添加了一条规则

iptables -t nat -A POSTROUTING -p tcp -s 172.16.0.0/24 \
         -d 192.168.0.0/24 -j SNAT --to-source 192.168.0.1

在我看来,这应该将来自 OpenVPN 隧道且目的地为 192.168.0.0 网络的任何数据包的源 IP 地址转换为 192.168.0.1(即该网络中 VPN 服务器自己的内部 IP)。

但当我尝试通过 VPN 安装 CIFS 共享时,我在日志中看到

Denied connection from 172.16.0.2 (172.16.0.2)
[2016/09/30 16:59:09.395655,  0] lib/access.c:338(allow_access)

因此源 IP 地址未转换。此 CIFS 服务器在 VPN 服务器上本地运行,这可能是一个问题吗?

答案1

POSTROUTING仅用于传输中的数据包,不用于发往当前主机的数据包。INPUT如果您也需要将 NAT 规则添加到链中,以用于发往当前主机的数据包。

man iptables-extensions

SNATPOSTROUTING:此目标仅在 nat 表、和INPUT链中有效

答案2

POSTROUTING仅在路由后影响数据包。由于目标是路由器本身,因此不会进行路由,因此POSTROUTING不适用。您可能正在寻找PREROUTING,它会影响路由前的所有数据包。

相关内容