pfSense book之OpenVPN(二)

本文摘要检查OpenVPN客户端和服务器的状态在系统状态 > OpenVPN 的 OpenVPN 状态页面显示每个 OpenVPN 服务器和客户端的状态。状态页面上的服务启动 / 停止控制每个单独的服务器和客户端实例。对于处于 SSL/TLS 服务器模式的 OpenVPN 服务器,状态将提供已连接的远程客户端及其用户名或证书通用名称的列表,如下图“SSL/TLS 服务器的 OpenVPN 状态(带有...

检查OpenVPN客户端和服务器的状态
在系统状态 > OpenVPN 的 OpenVPN 状态页面显示每个 OpenVPN 服务器和客户端的状态。状态页面上的服务启动 / 停止控制每个单独的服务器和客户端实例。
对于处于 SSL/TLS 服务器模式的 OpenVPN 服务器,状态将提供已连接的远程客户端及其用户名或证书通用名称的列表,如下图“SSL/TLS 服务器的 OpenVPN 状态(带有一个连接的客户端)”所示。也可以通过单击客户端行末尾的断开图标和加号图标来显示路由表。

SSL/TLS 服务器的 OpenVPN 状态(带有一个连接的客户端)

对于处于共享密钥模式的 OpenVPN 服务器,状态将指示它是否正在运行并等待连接,或者远程客户端是否已连接。
对于 OpenVPN 客户端,状态指示连接是否处于挂起或活动状态。

OpenVPN 状态显示已启动的服务器、正在等待连接的服务器以及试图重新连接的客户端

允许流量到 OpenVPN 服务器
设置 OpenVPN 服务器后,需要一个允许访问 OpenVPN 服务器的防火墙规则。

  • 导航到防火墙 > 规则策略,WAN 选项卡
  • 在列表顶部点击 添加规则图标 创建一个新规则
  • 将协议设置为 UDP
  • 将源设置为 any
  • 将目标设置为 WAN 地址
  • 将目标端口设置为 1194
  • 输入说明,例如 “允许通信到 OpenVPN 服务器”
  • 点击保存
  • 点击应用更改

设置后如下图所示:

允许通信到 OpenVPN 服务器的 WAN 防火墙规则

如果客户端源地址是已知的并且未更改,则可以更改规则的来源以限制仅来自这些客户端的流量。这比将服务器暴露给整个互联网更安全,但对于适应具有动态 IP 地址的客户端、漫游客户端等是非常必要的。使用大多数 OpenVPN 配置暴露服务的风险很小,特别是在使用 TLS 身份验证的情况下。凭借基于证书的身份验证,与基于密码的解决方案相比,受到暴力破坏的风险更低。这预示着 OpenVPN 本身缺乏安全漏洞,迄今为止它拥有稳定的安全记录。

允许流量通过 OpenVPN 隧道
默认情况下,所有流量都被阻止进入 OpenVPN 隧道。要允许来自远程 OpenVPN 节点的流量连接到本地资源,需要在防火墙 > 规则策略,OpenVPN 选项卡上配置允许通行的防火墙规则。
与防火墙的其他方面一样,这些规则只会匹配从远端进入系统的流量,而不是从服务器端流出的流量,因此需要相应地制定规则。如果两端都使用 pfSense,并且双方需要通信才能到达本地网络,则两个防火墙都需要规则。
添加 OpenVPN 规则,通过所有流量,如下所示:

  • 导航到防火墙 > 规则策略,OpenVPN 选项卡
  • 在列表顶部点击创建新规则按钮
  • 将协议设置为 any
  • 输入一个描述,例如 Allow all on OpenVPN
  • 点击保存
  • 点击应用更改

要将流量限制为仅限特定的源和目标,请根据需要调整规则。严格的规则集更安全,但配置会更复杂。

OpenVPN 客户端和 Internet 访问
对于 OpenVPN 远程访问客户端通过 OpenVPN 连接访问 Internet,需要出站 NAT 将其流量转换为防火墙的 WAN IP 地址。默认的自动出站 NAT 规则覆盖了此规则,但如果使用手动出站 NAT,则需要手动规则对来自包含 OpenVPN 隧道网络或远程网络源的流量执行出站 NAT。

分配 OpenVPN 接口
为了执行复杂的 NAT、策略路由或特定于隧道的过滤,必须将 OpenVPN 接口指定为 OPT 接口并进行相应配置。
分配 OpenVPN 接口可以对 VPN 流量进行一些更复杂的高级控制:

  • 在防火墙 > 规则策略下添加必要的规则
  • 在 VPN 接口选项卡上添加 reply-to(应答)规则,帮助返回路由
  • 为 VPN 的远端添加一个网关条目用于策略路由
  • 允许在 GUI 和插件中的其他地方选择接口
  • 允许对 VPN 的端口转发和出站 NAT 进行更精确的控制

接口分配和配置

  • 导航到网络接口 > 接口管理 (assign)
  • 在可用网络端口中选择合适的 OVPNS 或 OVPNC 接口
  • 点击 添加按钮 添加将接口分配为新的 OPT 接口(例如 OPT1)

如下图所示:

分配 OpenVPN 接口为 OPT 接口

  • 导航到接口配置页面,接口 > OPTx
  • 选中启用
  • 输入一个适当的描述,它将成为接口名称(例如 VPNServer)
  • 为 IPv4 配置类型和 IPv6 配置类型选择 none
  • 注意:这不会在接口上配置任何 IP 地址信息,这是必需的,因为 OpenVPN 本身必须配置这些设置。
  • 单击保存
  • 单击应用更改

这不会改变 OpenVPN 的功能,它使接口可用于防火墙规则、NAT 和网关等用途。
分配 OpenVPN 接口后,编辑 OpenVPN 服务器或客户端,并单击保存以重新初始化 VPN。这对 VPN 从分配过程中恢复是必需的。

对 OpenVPN 进行过滤
当分配 OpenVPN 接口时,防火墙 > 规则策略会出现专用于这个 VPN 接口的选项卡。这些规则管理从 VPN 远端进入的流量,他们甚至可以获得 pf reply-to 关键字,确保进入该 VPN 接口的流量通过相同的接口退出。这可以提供一些更高级的 NAT 和配置方案。
注意:这里添加的规则在 OpenVPN 选项卡规则之后进行处理,首先设置它们。为了匹配分配的 VPN 选项卡上的规则,流量不得与 OpenVPN 选项卡上的任何规则匹配。从 OpenVPN 选项卡中删除任何“允许所有”样式规则,并制定更具体的规则。

对 OpenVPN 进行策略路由
当分配并启用 OpenVPN 接口时,在系统 > 路由管理,网关选项卡上添加自动网关条目。可以使用 LAN 上的网关字段或其他内部接口防火墙规则将流量导入 VPN。
与 VPN 一起使用来访问 Internet 站点时,可能需要更多配置。出站 NAT 必须先在 VPN 接口上执行(对于 PIA、StrongVPN 等类似的 VPN 服务),或者 NAT 必须在达到实际 Internet 连接之前在另一端完成。
警告:不要将此自动网关用于静态路由。使用 VPN 配置中的远程网络字段。使用自动 OpenVPN 网关定义静态路由将无法正常工作。

NAT 与 OpenVPN
当分配 OpenVPN 接口时,NAT 规则也可以与任何其他接口一样应用。

NAT 与 OpenVPN 连接
对于许多使用 OpenVPN 的高级 NAT 方案,分配接口是必需的。
NAT 与 OpenVPN 的一个常见用途是在两个位置之间屏蔽冲突的局域网子网。如果两个网络使用完全相同的子网或重叠的子网作为其 LAN 或其他内部网络,则它们无法在没有 NAT 的情况下通过点对点 VPN 进行通信。
例如,如果 10.3.0.0/24 是 VPN 两侧的 LAN,则 10.3.0.0/24 子网上的主机将永远不会到达 VPN 的另一端以与远程 10.3.0.0/24 子网进行通信。客户始终将该网络视为本地网络,试图通过 ARP 访问其他系统。但是,使用 NAT 时,可以使远程端像使用不同子网一样工作。
注意:使用 NAT 将适用于许多协议,但通常需要跨 VPN 连接的一些协议(主要是 Windows 主机之间的 SMB/CIFS 文件共享)不能与 NAT 组合使用。如果使用的协议不能用于 NAT,这不是一个可行的解决方案。
如下图所示,站点 A 到站点 B 网络两端都使用相同的子网。按照接口分配和配置中所述将 OpenVPN 接口分配给两侧的 OPT 接口后,即可应用 1:1 NAT。

站点 A 到站点 B 网络两端使用相同子网的 NAT 示意图

站点 A 的流量将被转换为 172.16.1.0/24,站点 B 将被转换为 172.17.1.0/24。在每一端添加 1:1 NAT 条目来转换整个 /24 范围。要从站点 B 到达站点 A,将使用 172.16.1.x IP 地址。10.3.0.x IP 中的最后八位字节将被转换到 172.16.1.x 转换 IP 中的最后一个八位字节。要从站点 B 到达站点 A 的 10.3.0.10,请改为使用 172.16.1.10。要从站点 A 到达站点 B 的 10.3.0.50,请使用 172.17.1.50。下图显示了每一侧的 1:1 NAT 配置,其中 tun 接口被指定为 OPT1。

站点 A 1:1 NAT 配置

站点 A 1:1 NAT 配置

站点 B 1:1 NAT 配置

站点 B 1:1 NAT 配置

在双方的 OpenVPN 配置中,必须将远程网络指定为转换的 IP 子网,而不是 10.3.0.0/24。在本例中,站点 A 的远程网络是站点 B 的 172.17.1.0/24 和 172.16.1.0/24。
在应用 NAT 配置并在双方相应地配置远程网络后,网络将能够使用已转换的子网进行通信。

OpenVPN 和多 WAN
OpenVPN 具有多 WAN 功能,在某些情况下有一些注意事项。本节介绍 OpenVPN 服务器和客户端配置多 WAN 的注意事项。

将 OpenVPN 分配给网关组的
可以将网关组作为 OpenVPN 实例的接口。这样的网关组必须配置为仅故障转移,而不是负载平衡。故障转移组每层只有一个网关。在创建网关组时,还可以选择一个 VIP 用于特定网关。选择 VPN 服务器时,将首先使用组中第 1 层网关的接口或 VIP。如果该网关关闭,则它将移至第 2 层,依此类推。如果第 1 层网关恢复运行,则 VPN 将立即恢复在该 WAN 上运行。当用于 VPN 服务器时,这意味着服务器一次只能在一个 WAN 上运行。下面描述的一些其他方法可能对于大多数常见情况更好,例如需要两个 WAN 都可以与 VPN 同时使用。与 OpenVPN 客户端一起使用时,出站接口将根据网关组层进行切换。

OpenVPN 服务器和多 WAN
OpenVPN 服务器可以与任何 WAN 连接一起使用,尽管这样做的方式会根据给定配置的具体情况而有所不同。

使用 TCP 的 OpenVPN 服务器
TCP 不是 OpenVPN 的首选协议。但是,当 VPN 使用任何接口设置时,使用 TCP 可以使多 WAN OpenVPN 更容易配置。使用 TCP 的 OpenVPN 服务器可以在防火墙规则允许通向 OpenVPN 服务器的所有 WAN 上正常工作。每个 WAN 接口都需要防火墙规则。这种方法应该被认为是最后的手段,只有在其他方法不可行的情况下才会使用。
注意:这是因为 TCP 的面向连接的特性。由于 OpenVPN 是开放连接的一部分,因此 OpenVPN 可以回复到另一端,保留正确的源代码。

使用 UDP 的 OpenVPN 服务器
使用 UDP 的 OpenVPN 服务器也具有多 WAN 功能,但有一些不同于 TCP 的注意事项。
这些 OpenVPN 限制是由于 UDP 的无连接性质。OpenVPN 实例回复客户端,但操作系统根据路由表认为是到达另一端的最佳路径来选择路由和源地址。对于这是非默认的广域网,所以不会是正确的路径。

多服务器方法
在某些情况下,每个 WAN 必须有自己的 OpenVPN 服务器。所有服务器都可以使用相同的证书。只有两部分的 OpenVPN 配置必须改变:

设置说明
隧道网络每个服务器必须具有唯一的隧道网络,该隧道网络不与任何其他隧道网络或内部子网重叠。
接口每个 OpenVPN 服务器必须指定一个不同的 WAN 接口。

端口转发方法
更简单和更灵活的选择是将 OpenVPN 服务器绑定到 LAN 接口或本地主机,并使用每个 WAN 的端口转发将 OpenVPN 端口指向该服务。使用这种方法,pf 中的回复功能将确保返回流量通过预期的接口回流到适当的来源。
与客户端导出插件一起使用时,此方法需要一些较小的手动干预。“主机名称解析”选项必须设置为其中一种自动端口转发方法,否则默认导出设置会使其尝试连接到错误的地址。有关详细信息,请参阅 OpenVPN 客户端导出插件。

客户端的自动故障转移
可以在 OpenVPN 客户端上配置多个远程服务器。如果第一台服务器无法到达,则会使用第二台服务器。这可以与多广域网 OpenVPN 服务器部署结合使用,为客户端提供自动故障转移。如果 OpenVPN 服务器在 IP 地址 198.51.100.3 和 203.0.113.5 上运行,都使用端口 1194,则客户端配置文件中的 remote 行将如下所示:

remote 198.51.100.3 1194 udp
remote 203.0.113.5 1194 udp

对于在 pfSense 上配置的客户端,第一个 remote 由 GUI 中的服务器主机或地址字段进行配置。第二个 remote 在高级设置字段中指定。
这种方法有三种不同的行为:

  • 检测到故障并切换到下一台服务器至少需要 60 秒。
  • 任何连接失败都会导致它尝试连接第二台服务器,即使它不是 WAN 故障。
  • 它不会“失败”。一旦客户端连接到第二个服务器 IP 地址,它将一直处于连接状态直到断开连接。

OpenVPN 客户端和多 WAN
要使用 OPT WAN 接口,请将其选为接口。在防火墙上配置的 OpenVPN 客户端将尊重所选的接口,并在后台自动添加静态路由以确保流量采用正确的路径。
如果接口设置为 any,客户端将在连接到 OpenVPN 服务器时跟随系统路由表。在这种情况下,需要手动添加静态路由将流量引导到所需 WAN 上的远程端点。

使用多 WAN 和 OSPF 的点到点 OpenVPN 连接

涉及跨越多 WAN 的 OSPF 的 OpenVPN 安装示例

基于本章前面的概念,可以使用动态路由协议(如 OSPF)配置冗余 VPN,如上图所示。
首先,在每个广域网上为远程站点设置共享密钥的点到点 OpenVPN 实例。请勿填写任何一方的远程网络字段,只能填写隧道网络地址。

  • 在本地设置两台服务器,每台服务器位于不同的端口上。使用两个不同的非重叠隧道网络(例如 172.31.55.0/30 和 172.31.56.0/30)。
  • 在远程防火墙上设置两个客户端,每个与上述服务器中的一个配对,匹配所涉及的 IP 地址和端口号。
  • 确保客户端为其特定 WAN 设置,从下拉菜单中选择接口,或者使用其中一个 WAN 上的 CARP VIP。
  • 确保这些 OpenVPN 在客户端和服务器之间建立连接。双方的隧道地址在正常工作时会响应 ping。如果隧道没有建立,请参阅 OpenVPN 故障排查,以获取有关连接故障排除的建议。
  • 确保 OpenVPN 防火墙规则允许所有流量或至少允许来自隧道网络源的 OSPF 流量到达任何目的地。流量上的目的地将是一个多播地址,如果需要,可以使用该地址进行特别过滤,但是如果源在规则中被锁定,那么在安全方式上没有太多的收获,因为流量不能离开那个部分。

一旦两个实例连接,开始配置 OSPF。

  • 导航到两个防火墙上的系统 > 插件管理,在可用插件找到 Quagga_OSPF 插件并安装。
  • 导航到系统服务 > Quagga OSPFd,Interfaces(接口)选项卡。
  • 给每个 OpenVPN 添加接口。
  • 在主要链接上将 cost(成本)设置为 10,在次要链接上将 cost(成本)设置为 20,依此类推。
  • 将 LAN 和其他内部接口添加为 passive(被动)接口。
  • 导航到 Global Settings(全局设置)选项卡。
  • 输入 Master Password(主密码)。在这里,主密码并不重要,它只在内部用于访问状态守护进程。
  • 将 Router ID 设置为类似 IP 地址的值(例如 10.3.0.1)。Router ID 在每个设备上都是唯一的,这就是将路由器 ID 设置为路由器的 LAN IP 地址的原因。
  • 设置 Area ID 也是类似 IP 地址的值。Area ID 通常设置为 0.0.0.0 或 0.0.0.1,但可以使用任何格式正确的值。此 VPN 中涉及的所有路由器的 Area ID 都相同。
  • 点击保存。

一旦在所有路由器上配置了 OSPF,它们将尝试形成邻居关系。
在两端都设置了 OSPF 之后,如果状态选项卡连接正确,它将显示与每个广域网上的每个实例的完全对等关系,并且将列出通过 OSPF 获得的路由。一旦发生这种情况,尝试拔掉 / 重新插入广域网并刷新状态,同时在终端上运行一些测试,如 ICMP ping。

OpenVPN 和 CARP
OpenVPN 在使用 CARP 的高可用性方面效果很好。要为 CARP 提供高可用性 OpenVPN 解决方案,请在配置 OpenVPN 服务器或客户端时使用带接口选项的 CARP VIP,并将客户端配置为连接到该 CARP VIP。
当启用 XMLRPC 配置同步设置时,OpenVPN 实例将自动同步。主机之间不保留连接状态,因此发生故障转移后客户端必须重新连接,但 OpenVPN 将在一分钟左右的故障转移内检测到连接故障并重新连接。高可用性和 CARP 将在高可用章节中进一步讨论。
当选择 CARP VIP 作为 OpenVPN 实例的接口时,当 CARP 节点处于 BACKUP 状态时,防火墙将根据需要自动关闭 OpenVPN 客户端实例。这可以防止 OpenVPN 在客户端模式下进行不必要的出站连接。当 CARP VIP 状态转变为 MASTER 时,OpenVPN 实例会自动启动。

桥接 OpenVPN 连接
为此所讨论的 OpenVPN 配置都使用 tun 接口进行路由。这是更好的方法,但 OpenVPN 还提供了将 tap 接口和桥接客户端直接连接到局域网或其他内部网络的选项。这可以使远程客户端显示在本地 LAN 上。

OpenVPN 服务器设置
对于传统的远程访问 VPN,桥接远程访问 VPN 的大多数设置与上述相同。但要注意不同之处。

设置说明
设备模式要创建桥接连接,必须将其设置为 tap。
隧道网络从 IPv4 隧道网络和 IPv6 隧道网络框中删除值,使它们为空。由于 OpenVPN 不使用与 tun 模式相同的地址分配,因此 Tap VPN 的功能不需要隧道网络。
桥接 DHCP选中后,DHCP 将传递到稍后配置的桥接接口。在最常见的情况下,这是局域网。使用此方法连接客户端将从直接有线 LAN 客户端使用的相同 DHCP 池接收 IP 地址。
桥接接口此设置不会创建网桥,它只会向 OpenVPN 指示将用于网桥的接口。在大多数情况下,这是局域网。这将控制 OpenVPN 为桥接使用哪个现有 IP 地址和子网掩码。将其设置为 none 将导致下面的服务器桥接 DHCP 设置被忽略。
服务器桥接 DHCP 开始 / 结束地址将 tap 模式用作多点服务器时,可以将 DHCP 范围配置为在此 tap 实例桥接的接口上使用。如果这些设置保留为空白,则 DHCP 将传递到网桥接口,并且上面的接口设置将被忽略。这允许将一系列 IP 地址留给 OpenVPN 客户端使用,以便它们可以包含在内部网络的一部分中,而不是从现有 DHCP 池中消耗 IP 地址。根据需要输入服务器桥接 DHCP 启动和服务器桥接 DHCP 结束 IP 地址值。

创建网桥
一旦 OpenVPN tap 服务器被创建,OpenVPN 接口必须被分配并且桥接到内部接口。

分配 OpenVPN 接口
为了将 VPN 接口包含在网桥中,必须对其进行分配。本章前面的“分配 OpenVPN 接口”中介绍了分配接口的过程。

创建网桥
一旦分配了 VPN 接口,请按如下所示创建网桥

  • 导航到接口 > 接口管理(assign),Bridges 选项卡
  • 点击添加按钮添加网桥
  • 按住 Ctrl 键同时单击 VPN 接口和将要桥接的接口(例如 LAN)
  • 点击保存

更多信息请参阅网桥。

客户端连接
连接到 VPN 的客户端也必须设置为使用 tap 模式。一旦设置好了,连接一个客户端,比如使用 OpenVPN 客户端导出插件导出的客户端。客户端将在内部子网内收到一个 IP 地址,就好像它们在 LAN 上一样。他们也将接收广播和多播流量。

自定义配置选项
OpenVPN 提供了许多配置选项,其中许多超出了 GUI 中最常用的字段。这就是高级配置选项存在的原因。可以使用此输入区域配置其他配置选项,以分号分隔。
本部分分别介绍最常用的自定义选项。虽然还有更多,但一般很少需要。可以在 OpenVPN 手册页中查询详细信息。
警告
在添加自定义选项时请务必小心,不要使用输入验证来确保所用选项的有效性。如果选项使用不当,OpenVPN 客户端或服务器可能无法启动。在状态 > 系统日志,OpenVPN 选项卡下查看 OpenVPN 日志,以确保使用的选项有效。任何无效的选项都会导致一条日志消息,然后是导致错误的选项:
Options error: Unrecognized option or missing parameter(s)

路由选项
要为特定的 OpenVPN 客户端或服务器添加其他路由,请根据需要使用本地网络和远程网络框,输入使用逗号分隔的网络列表。
(route)路由自定义配置选项也可以使用,但不再需要。但是,有些用户更喜欢这种方法。以下示例为 10.50.0.0/24 添加路由:
route 10.50.0.0 255.255.255.0;
要添加多个路由,请用分号分隔它们:
route 10.50.0.0 255.255.255.0; route 10.254.0.0 255.255.255.0;
路由配置选项用于在本地为通过 VPN 可达的网络添加路由。对于使用 PKI 的 OpenVPN 服务器配置,还可以将其他路由推送给客户端。GUI 可以使用本地网络字段进行配置。要为所有客户端手动推送 10.50.0.0/24 和 10.254.0.0/24 的路由,请使用以下自定义配置选项:
push "route 10.50.0.0 255.255.255.0"; push "route 10.254.0.0 255.255.255.0";

重定向默认网关
OpenVPN 还允许在 VPN 上重定向默认网关,因此来自客户端的所有非本地流量均通过 VPN 发送。这对不受信任的本地网络(如无线热点)非常有用,因为它可以防止在不受信任的网络上被大量攻击的风险。这可以在 GUI 中使用 OpenVPN 实例配置中的重定向网关复选框进行配置。要手动执行此操作,请添加以下自定义选项:
push "redirect-gateway def1"
通过在不指定推送的情况下输入 redirect-gateway def1,可以将相同的值用作客户端的自定义选项。(请注意,选项是字母 “def” 后跟数字 1,而不是字母 “L”。)

OpenVPN 和 Web 服务器共享端口
为了让 OpenVPN 服务器使用更加隐蔽和安全,可以利用 OpenVPN 中的端口共享功能,允许它将任何非 OpenVPN 流量传递到防火墙后的另一个 IP 地址。通常的用法是在端口 tcp/443 上运行 OpenVPN 服务器,同时让 OpenVPN 将 HTTPS 流量切换到网络服务器来代替端口转发。
在锁定网络上,出于安全原因,只有端口 80 和 443 将被允许出现,并且在这些允许的端口上运行 OpenVPN 实例可以帮助用户摆脱限制访问的情况。
要设置此项,请将 OpenVPN 服务器配置为侦听 TCP 端口 443,并添加防火墙规则将流量传递到使用端口 443 的 OpenVPN 的 WAN IP 地址或 VIP。无需额外的端口转发或防火墙规则来传递流量到内部 IP。
在 OpenVPN 实例的自定义选项中,添加以下内容:
port-share x.x.x.x 443
其中 x.x.x.x 是非 VPN 流量将转发到的 Web 服务器的内部 IP 地址。
现在,如果 OpenVPN 客户端指向公共地址,它将连接并正常工作,并且如果 Web 浏览器指向相同的 IP 地址,则它将连接到 Web 服务器。
注意:这需要使用 TCP,并可能导致 VPN 性能下降。

通过 RADIUS 控制客户端参数
将 RADIUS 用作 VPN 的身份验证源时,pfSense 支持从 RADIUS 服务器接收某些客户端配置参数作为回复属性。可以指定以下值:

属性说明
Cisco-AVPair inacl=入站防火墙规则来管理从客户端到服务器的流量。以 Cisco 风格的 ACL 格式给出(例如,允许 tcp 从 any 到 any),子网掩码是指定的通配符风格。
Cisco-AVPair outacl=出站防火墙规则用来管理从服务器到客户端的流量。格式化与 inacl 参数相同
Cisco-AVPair dns-servers=将 DNS 服务器推送到客户端。可以指定多个服务器,以空格分隔。
Cisco-AVPair route=使用额外语句将路由推送给客户端。指定为 x.x.x.x y.y.y.y,其中第一个参数是网络地址,第二个参数是子网掩码。
Framed-IP-Address=要分配给客户端的 IP 地址。当使用子网样式拓扑时,RADIUS 服务器还必须为 VPN 的隧道网络发回适当的掩码。当使用 net30 风格的拓扑时,客户端接收到这个 IP 地址,服务器端被设置为一个比给客户端地址低的 IP 地址。

OpenVPN 故障排查
如果在使用 OpenVPN 时遇到问题,请参阅本节以获取有关解决常见问题的信息。

检查 OpenVPN 状态
首先看看系统状态 > OpenVPN。这里会显示每个 VPN 的连接状态。如 VPN 已连接、正在等待、重新连接等。

检查防火墙日志
如果连接未建立,或建立但未没有流量通过,请在系统状态 > 系统日志,防火墙选项卡下检查防火墙日志。如果隧道本身的流量被阻止,例如端口 1194 上的 WAN IP 地址流量被阻止,请相应地调整 WAN 防火墙规则。如果流量在 OpenVPN 接口上被阻止,请将规则添加到 OpenVPN 选项卡以允许流量通过。

只有部分主机工作
如果 VPN 上只能部分主机流量正常,这通常有以下四种原因:

原因说明
缺少,不正确或忽略的默认网关如果设备没有默认网关,或者有一个指向 pfSense 以外的设备,则它不知道如何正确返回到 VPN 上的远程网络。有些设备即使使用指定的默认网关,也不使用该网关。这已经出现在各种嵌入式设备上,包括 IP 摄像机和一些打印机。除了修改固定设备上的软件外,没有任何事情可以做。这可以通过在连接到包含设备网络的防火墙内部接口上运行数据包捕获来验证。使用 tcpdump 进行故障排除,在命令行中使用 tcpdump。如果观察到流量离开防火墙内部接口,但没有回复,设备将无法正确路由其返回流量,或者可能被设备上的本地防火墙阻止。
不正常的子网掩码如果一端使用的子网为 10.0.0.0/24,另一端为 10.254.0.0/24,并且主机的子网掩码为 255.0.0.0 或 /8,则永远无法通过 VPN 进行通信 因为它认为远程 VPN 子网是本地网络的一部分,因此路由将无法正常工作。
主机防火墙如果目标主机上有防火墙,则可能不允许连接。
pfSense 上的防火墙规则确保两端的防火墙规则允许所需的网络流量通行。

检查 OpenVPN 日志
导航到系统状态 > 系统日志,然后单击 OpenVPN 选项卡查看 OpenVPN 日志。连接后,OpenVPN 将记录如下类似的信息:

openVPN[32194]: UDPv4 link remote: 1.2.3.4:1194
openVPN[32194]: Peer Connection Initiated with 192.168.110.2:1194
openVPN[32194]: Initialization Sequence Completed

注意:openVPN 后面的数字会有所不同,它是进行连接的 OpenVPN 进程的进程 ID。
如果尝试连接时未显示链接远程和对等连接初始化消息,则原因可能是客户端配置不正确,因此客户端不会尝试连接到正确的服务器,或者导致阻止客户端连接的防火墙规则不正确。

确保没有重叠的 IPsec 连接
由于 IPsec 绑定到 FreeBSD 内核的方式,任何与 IPsec 启用时存在的本地和远程子网匹配的已启用 IPsec 连接(即使未启用)都会导致该流量永远不会通过 OpenVPN 连接进行路由。任何指定相同本地和远程网络的 IPsec 连接都必须禁用。如果最近禁用或删除了 IPsec 隧道,请通过查看系统状态 > IPsec,SPD 选项卡来检查其 SPD 条目是否已被删除。如果他们仍存在,请将其从该页面上移除。

检查系统路由表
导航至系统诊断 > 路由并查看防火墙已知的路由。对于点到点 VPN,远程网络的路由将出现在相应的 tun 或 tap 接口上。如果路由丢失或不正确,则本地网络、远程网络或自定义选项配置不正确。如果共享密钥设置正在使用中而不是 PKI,请确保 “push” 命令未被使用。

从不同位置进行测试
如果根据防火墙日志显示,已成功连接,但从局域网却 Ping 不通,请从防火墙本身进行测试。这些测试可以使用防火墙上的系统诊断 > Ping 页面轻松执行。
首先使用 OpenVPN 内部流量连接(通常是 LAN)的内部接口作为 ping 源。如果这不起作用,请使用默认源地址再次尝试,以便防火墙从 OpenVPN 接口本身获取 ping。
如果默认的 ping 工作正常,但内部网络 ping 不成功,请检查远端的防火墙规则和路由。

用数据包捕获跟踪流量
使用数据包捕获来确定流量在哪里或不流动是最有帮助的故障排除技术之一。从流量启动端的内部接口(通常是 LAN)开始,进入该防火墙的 tun 接口,然后进入远程防火墙的 tun 接口,最后进入远程防火墙的内部接口。确定流量在哪里以及哪里不流通可以大大缩小问题所在的位置。

路由不能推送到客户端

  • 尝试使用本地网络设置或推送语句将路由推送到客户端,如果客户端没有正确接收它们,请使用以下方法进行排除:
  • 检查 SSL/TLS 服务器设置是否与大于 /30 的隧道网络一起使用。OpenVPN 中的服务器模式仅在使用足以容纳多个客户端(如 /24)的子网时才会生效。
  • 如果客户端在 Windows 10 或类似版本上运行,请尝试以管理员身份运行客户端。某些版本的 OpenVPN 客户端需要管理员模式才能将路由应用到客户端 PC 路由表。
  • 当使用共享密钥设置时,推送路由不起作用。在两侧(客户端和服务器)使用远程网络框或路由语句将流量引导到隧道另一端的子网。

为什么我不能 Ping 一些 OpenVPN 适配器地址?
在使用 net30 风格拓扑的 SSL/TLS 服务器模式下,OpenVPN 将不会对仅用于路由端点的某些虚拟地址进行响应。不要依赖 Ping OpenVPN 端点地址作为确定隧道是否正确传输流量的手段。相反,在远程子网中 ping 一些地址,例如服务器的 LAN IP 地址。
根据 OpenVPN 常见问题,在标题为:为什么 OpenVPN 的 “ifconfig-pool” 选项在 tun 模式下使用时使用 /30 子网(每个客户端有 4 个私有 IP 地址)?
由于 192.168.1.5 只是 OpenVPN 服务器内部的一个虚拟 IP 地址,作为路由的端点,OpenVPN 不会在这个地址上应答 ping,而 192.168.1.1 是服务器 O/S 中的真实 IP 地址,所以它会回复 ping。
这可能看起来有点不直观,因为在服务器上,ifconfig 输出看起来类似于:

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
      inet6 fe80::202:b3ff:fe03:8028%tun0 prefixlen 64 scopeid 0xc
      inet 192.168.100.1 --> 192.168.100.2 netmask 0xffffffff
      Opened by PID 27841

客户端显示:

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
      inet6 fe80::202:b3ff:fe24:978c%tun0 prefixlen 64 scopeid 0xa
      inet 192.168.100.6 --> 192.168.100.5 netmask 0xffffffff
      Opened by PID 1949

在这种情况下,.5 或 .1 地址可能不会回应 ping。.5 地址不会响应,因为它是一个虚拟地址,.1 因为没有直接到达它的路由。.5 和 .6 地址是从 .4 到 .7 的 /30 的一部分,并且尝试 ping .1 会替代掉默认路由。
有很多情况下,OpenVPN 隧道的远端会响应 ping,但不是本地。这也是违反直觉的,但特别适用于存在点到点连接的情况。如果服务器将其 tun 地址显示为 x.x.x.1 -> x.x.x.2,并且客户端显示反向 - x.x.x.2 -> x.x.x.1,则远端会响应来自两端的 ping。

无法在 SSL/TLS 点到点隧道上路由到客户端
如果使用 SSL/TLS 点到点隧道,并且所有路由显示正确,但流量仍无法正常流动,请检查隧道网络大小。如果这是仅在两个位置之间的点到点设置,则隧道网络应该是 /30,以便它不需要 iroute 语句来访问客户端网络。将多个站点连接到单个服务器实例时,请检查针对点到点示例配置(SSL/TLS)的设置,特别是客户端特定覆盖和 iroute。

客户特定覆盖 iroute 条目似乎不起作用
在配置点到点 PKI OpenVPN 设置时,必须使用“客户端特定覆盖”条目集上的“远程网络”字段配置 iroute 语句以获取客户端证书的通用名称。
首先,确保通用名称与证书匹配,并确保正在按照预期学习 / 添加内部路由。OpenVPN 中的日志详细程度可能需要增加以查看这是否正在工作。
此外,对于客户端特定覆盖远程网络条目(iroute)中使用的每个网络,服务器中也需要远程网络(路由)。服务器设置上的远程网络(路由)定义是让防火墙操作系统知道网络将从其他地方路由到 OpenVPN。客户端特定替代条目上的远程网络(iroute)选项是 OpenVPN 内部的,因此它知道哪些网络路由到了特定的证书。

为什么 OpenVPN 客户端都获得相同的 IP 地址?
如果所有客户端都使用相同的证书(我们强烈建议不要这么做),那么客户端在连接时都会分配相同的 IP 地址。要解决此问题,请检查服务器配置上的“重复连接”选项。

导入 OpenVPN DH 参数
将现有 OpenVPN 设置导入 pfSense 时,不需要导入 DH 参数。DH 参数并非特定于证书或密钥的方式。
简而言之,DH 参数是一些额外的随机性位,可以在密钥交换过程中提供帮助。他们不需要在隧道两侧相匹配,并且可以随时制造新的。不需要导入现有的一组 DH 参数。
注意:默认情况下,pfSense 使用一组预先生成的 DH 参数。如果需要,可以手动生成新的集合,详情请参阅 DH 参数长度。

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~