分支到实验室链路:路由式 VPN 还是桥接 LAN
给每个站点自己的前缀,只路由你需要的实验室子网。桥接 LAN 会买来设备发现能力,同时把两个站点的每一次广播都交给你。
让分支访问家庭实验室有两种做法,差别不在某个设置。你可以让两个不同的前缀之间做路由,这样每个站点保留自己的广播域;也可以把两个 LAN 桥接成一个,让广播和发现流量表现得像所有人都在同一个房间里。路由是经得起真实网络接触的设计。桥接让第一周很轻松,也让第一次故障变得有趣。下面的比较谈的是各自给你什么、代价是什么,以及如何让路由式方案可验证。
两种连接方式,一个明显的取舍
路由式链路把家庭实验室当作拥有自己地址规划的远程网络。分支请求实验室的前缀,隧道承载这些数据包,实验室网关从自己的子网应答。分支的 ARP 表没有任何变化,实验室的 DHCP 作用域也到不了分支。
桥接式链路把一个 2 层域扩展到两个站点。发现协议可用,设备会自动出现,而每一次广播、每一个 ARP 请求和每一个组播数据包都成了穿越隧道的候选,也就是大量为本地网段而非 MTU 不同、往返时延可变的广域网设计的协议所承载的流量。
路由给你什么
第一个好处是影响范围。环路、不受欢迎的 DHCP 服务器或广播风暴都留在产生它的站点内,因为路由器不转发广播。第二个是地址清晰:分支前缀与实验室前缀不同,所以数据包的目的地会告诉你哪个站点应当应答,防火墙规则可以写「分支到实验室子网」而不是「任意到任意」。
第三是它与隧道实际承载的东西一致。IPsec 策略是一对前缀,而每一侧的转发路径都是网关上启用了转发的普通 IP 路由:
sysctl -w net.ipv4.ip_forward=1
ip route add 10.20.0.0/24 via 192.168.50.1
ip route get 10.20.0.40
你放弃的是通过广播进行的发现。这是实打实的损失,应当有意替换,而不是靠桥接一切来绕开。
桥接的代价
桥接必须通过隧道承载 2 层帧,这意味要在 IPsec 之上做 GRE 或 VXLAN 之类的封装,而不是简单的策略型隧道。一旦如此,两个站点就共享同一个故障域。生成树把隧道当作一条链路,广播流量消耗隧道带宽,任何假定低时延网段的设备都会以难以从任何一端定位的方式出错。
它还取消了让你保持诚实的地址检查。在单一扁平前缀下,重复地址不是路由错误,而是两台主机在悄悄互偷流量;分支与实验室前缀重叠在家庭实验室里很常见,所以桥接并没有解决这个冲突,而是把它分散了。
安全论证往往是决定性的。网桥扩展了链路本地协议运行所在的网段,于是分支里的设备可以与从未打算从外部访问的实验室设备通信。如果实验室在同一扁平网络上还有管理程序、存储控制台和管理接口,那现在它们与分支同属一个网段。
没有广播的名字
人们桥接的原因通常是发现:某台打印机、媒体设备或实验室主机从不出现在列表里。路由式的答案是名称服务。把实验室主机发布到分支解析器可以到达的区域,然后让用户按名字连接,而不是扫描网络。这在开始时更费事,在每一次后续变更中省事得多。
组播发现是更难的场景,值得精确对待。mDNS 这类协议使用链路本地组播,而路由器默认不转发,所以不在发现列表里的实验室主机,仍可能在其文档化的地址上可达。如果某项服务确实需要组播,就只针对那一个协议做规划,用反射器或有针对性的转发规则,而不是把整个 LAN 桥接起来当作通用修复。
反射器也不是白捡的胜利。它会把你正想避开的健谈流量一个一个服务地引进来,而且需要一个会注意到设备开始宣告更多内容的所有者。按服务逐个选择,并写下理由。记录哪项服务需要它、它宣告了什么,因为一次固件更新就可能悄悄改掉那份清单。
让路由式设计可验证
选一个目标,例如实验室在独立服务器子网上的 Web 界面,并在两个方向上验证。从分支主机本地确认地址和监听服务,然后通过隧道连接并重复。隧道是通的只证明两端网关达成一致,对主机防火墙或回程路由什么也证明不了。
实验室的常规网关需要一条回到分支前缀的路由,除非设计有意转换源地址,而且服务器自身的防火墙必须接受允许的远端范围。这两样都不是一条成功的隧道能配置的。strongSwan 的转发说明描述了两侧都必须工作的数据包路径。
然后也测试一个被拒绝的目标。只需要一个应用的分支用户并不需要管理程序控制台,而要知道策略是真的,唯一的办法正是去试它应当拒绝的东西。记录前缀、对解析器的依赖和测试结果,那么任何一侧未来的变更都能在几分钟内复核,而不必凭记忆重建。