pfSense book之OpenVPN(二)

检查OpenVPN客户端和服务器的状态

在系统状态> OpenVPN的OpenVPN状态页面显示每个OpenVPN服务器和客户端的状态。状态页面上的服务启动/停止控制每个单独的服务器和客户端实例。

对于处于SSL / TLS服务器模式的OpenVPN服务器,状态将提供已连接的远程客户端及其用户名或证书通用名称的列表,如下图“SSL / TLS服务器的OpenVPN状态(带有一个连接的客户端)”所示。 也可以通过单击客户端行末尾的

图标断开连接。 对于这些服务器,单击
显示路由表图标,,将显示通过每个客户端证书连接的网络和IP地址表。

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

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

对于OpenVPN客户端,状态指示连接是否处于挂起或活动状态。

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

允许流量到OpenVPN服务器

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

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

设置后如下图所示:

如果客户端源地址是已知的并且未更改,则可以更改规则的来源以限制仅来自这些客户端的流量。 这比将服务器暴露给整个互联网更安全,但这对于适应具有动态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)
  • 在可用网络端口中选择合适的CVPNS或OVPNC接口
  • 点击
     添加将接口分配为新的OPT接口(例如OPT1)

如下图所示:

  • 导航到接口配置页面,接口> 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的流量将被转换为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配置

站点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参数长度。

上一篇
下一篇