配置如下:
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
:
SNAT
POSTROUTING
:此目标仅在 nat 表、和INPUT
链中有效
答案2
POSTROUTING
仅在路由后影响数据包。由于目标是路由器本身,因此不会进行路由,因此POSTROUTING
不适用。您可能正在寻找PREROUTING
,它会影响路由前的所有数据包。