一个 TAP 服务器还是多个?桥上的 OpenVPN 客户端
TAP 客户端共享一个网桥和一个服务器进程,这也意味着共享一个广播域。选择之前,先比较桥接以太网与路由式 TUN。
多个 TAP 客户端并不需要各自拥有一个服务器进程、一个 UDP 端口和一块宿主机 TAP 设备。OpenVPN 服务器以以太网模式运行一次,就可以接纳许多通过认证的客户端并把它们接入同一个网桥,而这正是扩展 2 层网段的既有做法。单进程设计是手册记载的做法,通常也是正确的默认值。
真正的问题在于,这些客户端是否应当共享那个网段。进程数量回答不了这个问题,因为隔离特性来自拓扑,而不是来自运行了多少个守护进程。这次比较的其余部分讲的是两种拓扑,以及各自让什么变得容易。
两种架构,而不是两个开关
路由式 TUN 部署为每个客户端提供一条点对点链路,接入服务器的路由域。广播在服务器处终止,客户端看不到彼此的帧,客户端之间的流量如果存在,就必须显式地路由和过滤。
桥接式 TAP 部署让客户端成为同一个以太网段的成员。它们能看到广播,可以用 ARP 互相解析,并且依靠网桥和防火墙策略而不是路由来彼此隔离。当客户端必须表现得像是插在同一台交换机上时,这种做法很有用。
因此,这次比较关注的是客户端需要到达什么,而不是性能。先选层,再决定用多少个进程来服务它。
server-bridge 辅助工具做什么
server-bridge 辅助工具配置多客户端以太网模式。它的地址池形式接收网关、子网掩码以及桥接子网内的一段专用范围,例如网关为 192.168.50.1,地址池从 192.168.50.160 到 192.168.50.199。
要把这段范围保留在其他任何 DHCP 或静态分配之外。辅助工具会从中分配地址,但它不会与同一网段上的另一个分配器协调,两个重叠的地址池会产生重复地址,看起来就像随机的连接故障。把保留范围写进站点的地址规划,以免下一个人再次使用。服务器配置里的注释,远不能代替那份记录。
对于由外部服务器分发地址的部署,还存在 DHCP 代理形式。它有自己的前提条件,而混用两种形式恰好会产生文档所警告的冲突。桥接子网只选一个分配器。
隔离并不来自进程数量
八个 OpenVPN 进程接入同一个不受限制的网桥,仍然共享一个广播域。客户端可以跨网桥互相发送 ARP,监听者的数量对此毫无改变。
如果要求是各组客户端在 2 层互不可见,设计就需要独立的网桥或 VLAN 接入,以及随之而来的访问规则。这是网络设计决策,无论涉及一个还是八个服务器进程,决策都一样。网桥过滤可以限制部分流量,但不会创造独立的广播域。把它视为分段的补充,而不是替代。
如果要求只是客户端能到达某些 IP 服务,路由式 TUN 设计通常比桥接加过滤更简单。每个客户端都有自己的链路,策略存在于路由和防火墙规则中,而不是网桥内部。
什么时候多进程仍然合适
独立进程可以用运维需求来论证:不同的认证后端、不同的证书颁发机构、各自的升级周期,或者互不兼容的选项集合。这些是真实的理由,与客户端数量无关。
如果使用多个进程,请给每一个自己的监听器和设备归属,并协调地址范围。两个都认为自己拥有同一网桥上同一个地址池的服务器,最终必定会分发同一个地址。
然后用多个客户端同时验证设计。检查地址是否唯一、预期的客户端间流量是否可用,以及本不该通信的那一对是否确实不通。单个客户端 ping 成功,完全检验不到多客户端设计。
在相信图之前,从运行中的主机读取网桥和服务器模式。真正重要的是内核和守护进程实际加载的配置,那也是评审者能够检查的配置。