当两个 LAN 具有相同的地址时,创建正确的 VPN 隧道

当两个 LAN 具有相同的地址时,创建正确的 VPN 隧道

我正在关注这个教程http://wiki.debian.org/OpenVPN#TLS-enabled_VPN和这个http://users.telenet.be/mydotcom/howto/linux/openvpn.htm创建到我的远程 LAN 的 openvpn 连接。

但这两个例子都假设两个 LAN 有不同的地址(即 192.168.10.0/24 和 192.168.20.0/24,查看此图像 i.stack.imgur.com/2eUSm.png)。

不幸的是,在我的情况下,本地和远程局域网都有 192.168.1.0/24 地址。我能够直接连接到 openvpn 服务器(我可以 ping 它并使用 ssh 登录),但我看不到远程局域网上的其他设备(更不用说通过浏览器访问它们,这才是重点)。不知道寻址问题是否是造成这种情况的原因?如果不是 - 如何定义路由,以便我可以 ping 远程局域网中的其他设备?

答案1

你完蛋了。所有机器都使用同一个子网。你建议他们如何区分本地主机和远程主机?你唯一的选择可能是从每个站点的 VPN 主机进行某种形式的端口转发。这对一些服务有用,但长期支持将是一场噩梦。

您确实只需要咬紧牙关,重新对其中一个站点进行编号。

我猜你对一些核心网络基础知识没有很好的掌握。我强烈建议你阅读Serverfault 关于 IPv4 子网划分的问答。这将帮助您更好地理解为什么解决你现在遇到的困难。

答案2

即使这个问题已经有了答案,这里还有另一个选择:

  • 为一侧的网关分配一个空闲子网中的辅助 IP
  • 使用NETMAPiptables 中的目标来翻译所有内容

如果您选择 192.168.2.0/24 作为一侧的备用子网,则可以使用此规则来转换网络:

iptables -t nat -A POSTROUTING -o tap0 -j NETMAP --to 192.168.2.0/24

答案3

在我看来,NETMAP 实际上是一种非常有效的确保网络不会发生冲突的方法。许多路由器使用相同的私有地址空间,有时根本无法更改不属于您的网络的设置(例如在网吧、公共 WLAN 中)。是的,您可以更改自己的网络以使用相当不常见的地址空间,但有些提供商分发锁定的设备,无法更改,这需要您添加更多网络设备。哦,有时输入 10.0.0.x 而不是 192.168.214.x 非常方便。

TL;DR:虽然在专业设置中不建议使用,但 NETMAP 可能会派上用场。

下面是一个示例,它允许我在两端使用 10.0.0.x,并且仍然通过 OpenVPN 进行连接。您无需将真实路由推送给客户端,而是使用不常见的子网:

OpenVPN

push "route 10.11.12.0 255.255.255.0"

网络地图

iptables -t nat -A PREROUTING -d 10.11.12.0/24 -j NETMAP --to 10.0.0.0/24

源 NAT(假设您使用 OpenVPN 的默认 10.8.0.0/24 子网)

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source PUBLICIP

即使更换了默认网关,这种方法也很好用。如果你使用自己的 DNS,情况可能会变得混乱:

push "dhcp-option DNS 10.11.12.1"

这是因为,虽然您能够访问 DNS 服务器(位于 10.0.0.1),但它会根据其子网而不是 NETMAPed 子网返回地址。可能有办法解决这个问题。我正在考虑 BIND 的观点,例如,不知道 Samba 是否有这样的能力。

相关内容