我有两个客户端需要连接到一个 OpenVPN 服务器。是否可以在 ifconfig 参数中为两个客户端使用相同的网关?
Client A config file
[...]
ifconfig 10.0.0.2 10.0.0.1
Client B config file
[...]
ifconfig 10.0.0.3 10.0.0.1
服务器上的情况如下:
tun0
inet 10.10.0.1 destination 10.10.0.2
tun1
inet 10.10.0.1 destination 10.10.0.3
现在一切都运行良好,但它是否会带来一些问题?
我被告知要使用这样的不同网关:
Client A config file
[...]
ifconfig 10.0.0.2 10.0.0.1
Client B config file
[...]
ifconfig 10.0.1.2 10.0.1.1
但是我认为不同的网关只是为了路由目的而需要,如果我想添加路由并在特定的 tun 接口上转发我的流量,我确实需要不同的网关,否则服务器不知道向哪一个发送数据包,但如果我不需要特定的路由,我可以使用我的第一个配置吗?
谢谢
答案1
这是可能的,也是正确的。网关参数定义了客户端上用于将数据发送到 VPN 的配置,以便能够像在 IP 中一样定义路由。一旦数据包被发送到 OpenVPN 进程,它就会负责其路由(直到它离开其他 OpenVPN 进程)。
特别是,你定义:
ifconfig 10.10.0.3 10.10.0.1
这仅有的该命令的结果就像你在客户端运行以下命令:
ip address add 10.10.0.3 dev tun0
ip route add 10.10.0.1 dev tun0
就这些。其他客户端、服务器、外部系统 — 没有其他人知道此客户端配置。
唯一使用网关的地方是像这样写入通向 VPN 的路由:
ip route add 192.168.0.0/24 via 10.10.0.1
例如,将此网络设置为可通过 VPN 访问。例如,到 VPN 服务器和其他客户端的路由就是这样完成的。当然,如果您有多个客户端,您可以在它们上使用相同的网关地址(您自然会这样做,例如,对于同一 LAN 中的邻居计算机)。
同样的事情也适用于服务器。例如,我在一台机器上运行多个 VPN(一个通过 UDP,另一个通过端口 443 上的 TCP 和端口共享选项 - 能够潜入阻止常用端口但允许 443 的防火墙,甚至检查是否有网络服务器)。这些服务器都具有相同的当地的地址配置,并有所不同偏僻的(这使得可以设置通过哪个 VPN 路由数据包)。
现在谈谈您将遇到的问题。当然,使用功能齐全的 Linux OpenVPN 不会有问题。如果您要使用“OpenVPN 客户端”,无论是 Linux、Windows、iOS/iPadOS/macOS 还是 Android 客户端,都取决于您设置了哪个topology
。在net30
拓扑中,它们会拒绝此类配置,认为其无效。在这种情况下,客户端地址及其远程地址应属于同一 /30 子网。
答案2
通常,点对点接口(例如tun0
或任何其他类似隧道的接口)只需要本地地址以用于隧道管理目的或特定的隧道标识。
将隧道接口视为远程连接端点。此接口有两个端点 - 您和另一端。一般来说,没有必要使用任何当只有两个连接的方参与数据交换时,接口上的地址就是这样的 - 您只需通过此接口发送一个数据包,它将被传送到另一端,没有其他办法。
如果第三方需要能够访问您的远程连接端点,事情就会变得稍微复杂一些。要访问此端点,他们需要远程地址作为数据包目的地。相反,远程端使用您的本地地址来识别其版本的另一端当需要时,即它会安装默认路由;但是,它可以使用隧道接口本身作为路由目的地,甚至无需知道您的本地地址,并且它仍然可以工作。
因此,除非您需要通过本地端点来识别隧道接口(即将其用作隧道上某些动态路由协议场景的源地址),否则您可以使用任何您希望的地址作为隧道上的本地地址 - 它甚至不需要与远程地址位于同一子网。