这里缺乏经验的系统管理员。
我计划通过 OpenVPN 在 FreeBSD jail 中运行网络守护程序,但希望能够直接通过 SSH 进入 jail 并使用守护程序的 Web 界面守护程序,而无需通过 VPN。据我了解,OpenVPN 隧道通常设置为默认虚拟互联网接口,因此传入流量将默认通过 OpenVPN 接口发出(这很成问题,因为这会导致延迟)。
我想“好吧,显然,由于所有这些流量都是从少数几个端口发出的,我只需将它们重定向到非 VPN 网关即可。”我尝试寻找解决方案,但几乎所有解决方案都涉及 iptables 而不是 ipfw(这是 FreeBSD 的默认设置),并且解决的问题略有不同。还有替代解决方案,例如使用多个默认路由确保任何接口上的传入流量始终从同一接口发出似乎意义深远,并且需要对所涉及的所有工具有深入的了解。
是否有一种优雅的方法可以确保使用 ipfw 从特定端口流出的流量在指定的非默认接口上退出?
答案1
除非使用多路径 TCP 之类的东西,否则 TCP 连接永远不会改变其接口。如果流量从远程主机 A 到达接口 Y,则答案(通常)将通过接口 Y 离开,即使最佳匹配路由(到主机 A)可能通向其他地方。当然,前提是接口 Y 有一条通向主机 A 的路由。
OpenVPN 在其最常用的redirect-gateway def1
配置中不会覆盖路由。相反,它利用路由匹配的方式:选择最具体的匹配路由。通常,您会有一个0.0.0.0/0
指向互联网网关(或其他网关)的路由(也称为默认路由)。此路由匹配所有内容。通常还存在更具体的路由,通向您的本地网络。OpenVPN 创建两个新路由:0.0.0.0/1
和128.0.0.0/1
。同样,这些路由匹配所有内容,但会优先选择您之前的默认路由,因为它们更具体。底线:接口 Y 仍然可以到达“所有内容”。
通常,VPN 连接不会阻碍其他接口上的传入流量。因此,它无需额外设置即可工作。