Intune 中的 Microsoft Tunnel 的先决条件

在安装用于Microsoft Intune的 Microsoft Tunnel VPN 网关之前,请查看并配置先决条件。 先决条件包括使用运行容器的 Linux 服务器来托管 Tunnel 服务器软件。 还计划配置网络、防火墙和代理,以支持Microsoft隧道的通信。

概括而言,Microsoft隧道需要:

  • Azure 订阅。

  • Microsoft Intune计划 1 订阅。

    注意

    此先决条件适用于 Microsoft Tunnel,不包括 Microsoft Tunnel for Mobile Application Management,这是一个需要Microsoft Intune计划 2 订阅的Intune加载项

  • 运行容器的 Linux 服务器。 服务器可以位于本地或云中,并支持以下容器类型之一:

    • Podman for Red Hat Enterprise Linux (RHEL) 。 请参阅 Linux 服务器 要求。
    • 所有其他 Linux 分发版的 Docker
  • Linux 服务器的传输层安全性 (TLS) 证书,用于保护从设备到 Tunnel 网关服务器的连接。

  • 运行 Android 或 iOS/iPadOS 的设备。

配置先决条件后,建议运行 就绪工具 ,以帮助验证环境是否配置良好,以便成功安装。

以下各部分详细介绍了 Microsoft Tunnel 的先决条件,并提供了就绪工具的使用指南。

注意

隧道和全局安全访问 (GSA) 不能在同一设备上同时使用。

Linux 服务器

设置基于 Linux 的虚拟机或要安装 Microsoft Tunnel Gateway 的物理服务器。

注意

仅支持下表中列出的操作系统和容器版本。 不支持未列出的版本。 只有在验证了测试和可支持性之后,才会将较新的版本添加到此列表中。 使用安全更新使 OS 保持最新状态。

  • 支持的 Linux 分发 - 下表详细说明了 Tunnel 服务器支持哪些版本的 Linux 以及它们所需的容器:

    分发版本 容器要求 注意事项
    CentOS 7.4 及以上 Docker CE 支持将于 2024 年 6 月结束。 不支持 CentOS 8+
    Red Hat (RHEL) 7.4+ Docker CE 支持将于 2024 年 6 月结束
    Red Hat (RHEL) 8.6 支持将于 2024 年 6 月结束 , (默认)
    Podman 3.0
    此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.0。 如果将容器从 v3 升级和更改为 v4.0,请计划创建新容器,然后卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 8.7 Podman 4.2 (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 8.8 Podman 4.4.1 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 8.9 Podman 4.4.1 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 8.10 Podman 4.9.4-rhel (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 9.0 支持将于 2024 年 6 月结束,默认) ( Podman 4.4.1 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。

    支持将于 2024 年 2 月结束。
    Red Hat (RHEL) 9.1 Podman 4.4.1 (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 9.2 Podman 4.4.1 (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 9.3 Podman 4.6.1。 (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Red Hat (RHEL) 9.4 Podman 4.9.4-rhel (默认) 此版本的 RHEL 不会自动将 ip_tables 模块加载到 Linux 内核中。 使用此版本时,计划在安装 Tunnel 之前 手动加载 ip_tables

    Podman v3 及更早版本创建的容器 不适用于 Podman v4.2 及更高版本。 如果升级和更改容器,请计划创建新容器并卸载并重新安装 Microsoft Tunnel。
    Ubuntu 20.04 Docker CE
    Ubuntu 22.04 Docker CE

    重要

    2023 年 4 月,Ubuntu 将终止对 Ubuntu 18.04 的支持。 随着 Ubuntu 终止支持,Intune还将终止对 Ubuntu 18.04 的支持,以用于 Microsoft Tunnel。 有关详细信息,请参阅 https://wiki.ubuntu.com/Releases

  • Linux 服务器的大小: 使用以下指南满足预期用途:

    # 设备 CPU 数 内存 (GB) 服务器数 站点数 硬盘空间 (GB)
    1,000 4 4 1 1 30
    2,000 4 4 1 1 30
    5,000 8 8 2 1 30
    10,000 8 8 3 1 30
    20,000 8 8 4 1 30
    40,000 8 8 8 1 30

    支持线性缩放。 虽然每个 Microsoft Tunnel 最多支持 64,000 个并发连接,但单个设备可以打开多个连接。

  • CPU: 64 位 AMD/Intel 处理器。

  • 安装 Docker CE 或 Podman:根据用于 Tunnel 服务器的 Linux 版本,在服务器上安装以下选项之一:

    • Docker 版本 19.03 CE 或更高版本。
    • Podman 版本 3.0 或 4.0,具体取决于 RHEL 的版本。

    Microsoft Tunnel 要求 Linux 服务器上的 Docker 或 Podman 提供对容器的支持。 容器提供一致的执行环境、运行状况监视和主动修正,以及干净的升级体验。

    有关安装和配置 Docker 或 Podman 的信息,请参阅:

    • 在 CentOS 或 Red Hat Enterprise Linux 7 上安装 Docker 引擎

      注意

      上面的链接会将你转到 CentOS 下载和安装说明。 对 RHEL 7.4 使用相同的说明。 默认情况下,RHEL 7.4 上安装的版本太旧,无法支持 Microsoft Tunnel 网关。

    • 在 Ubuntu 上安装 Docker 引擎

    • 在 Red Hat Enterprise Linux 8.4 及更高版本上安装 Podman (向下滚动到 RHEL8)

      这些版本的 RHEL 不支持 Docker。 相反,这些版本使用 Podman,podman 是名为"container-tools"的模块的一部分。 在此上下文中,模块是一组表示组件的 RPM 包,通常一起安装。 典型模块包含应用程序的包、具有特定于应用程序的依赖项库的包、包含应用程序文档的包以及具有帮助程序实用工具的包。 有关更多信息,请参阅 Red Hat 文档中的模块简介

      注意

      无根 Podman:Microsoft Tunnel 支持使用无根 Podman 容器。

      使用无根 Podman 需要本文详述 的其他先决条件 ,并在启动 Tunnel 安装脚本时使用修改后的命令行。 有关其他先决条件和安装命令行的信息,请参阅配置 Microsoft Tunnel for Intune 一文中的使用无根 Podman 容器

  • 传输层安全性 (TLS) 证书: Linux 服务器需要受信任的 TLS 证书来保护设备与 Tunnel 网关服务器之间的连接。 在安装隧道网关期间,向服务器添加 TLS 证书和完全受信任的证书链。

    • 用于保护 Tunnel 网关终结点的 TLS 证书的使用者可选名称 (SAN) 必须与 Tunnel 网关服务器的 IP 地址或 FQDN 匹配。

    • TLS 证书的到期日期不得超过两年。 如果日期超过两年,则 iOS 设备上不接受该日期。

    • 对通配符的支持有限。 例如,支持 *.contoso.com ,但不支持 cont*.com

    • 安装 Tunnel 网关服务器时,必须将整个受信任的证书链复制到 Linux 服务器。 安装脚本提供复制证书文件的位置,并提示你执行此操作。

    • 如果使用不公开信任的 TLS 证书,则必须使用Intune受信任的证书配置文件将整个信任链推送到设备。

    • TLS 证书可以是 PEM 格式,也可以是 pfx 格式。

    • 若要支持 TLS 证书吊销运行状况检查,请确保可从服务器访问联机证书状态协议 (OCSP) 或证书吊销列表 (CRL) 地址。

    • 使用 2048 位或更大的密钥配置 Tunnel 客户端证书。 建议使用更大的密钥,以帮助部署继续支持各种 SSL/TLS 库解决方案的未来和不断变化的 SSL/TLS 要求。

      提示

      定期查看所选 SSL/TLS 库的要求,以确保基础结构和证书仍受支持,并符合该库的最新更改,并在必要时重新颁发 Tunnel 客户端证书,以随时了解解决方案不断变化的要求。

  • TLS 版本: 默认情况下,Microsoft Tunnel 客户端和服务器之间的连接使用 TLS 1.3。 当 TLS 1.3 不可用时,连接可以回退以使用 TLS 1.2。

默认桥网络

Podman 和 Docker 容器都使用桥网络通过 Linux 主机转发流量。 当容器桥接网络与公司网络发生冲突时,隧道网关无法成功将流量路由到该企业网络。

默认桥网络为:

  • Docker: 172.17.0.0/16
  • Podman:10.88.0.0/16

为了避免冲突,可以将 Podman 和 Docker 重新配置为使用指定的桥网络。

重要

必须先安装隧道网关服务器,然后才能更改桥网络配置。

更改 Docker 使用的默认桥网络

Docker 使用文件/etc/docker/daemon.json 配置新的默认桥 IP 地址。 在文件中,桥 IP 地址必须以 CIDR(无类域间路由)表示法指定,这是一种紧凑的方式,用于表示 IP 地址及其关联的子网掩码和路由前缀。

重要

以下步骤中使用的 IP 地址就是一个示例。 请确保使用的 IP 地址不会与公司网络冲突。

  1. 使用以下命令停止 MS Tunnel 网关容器:sudo mst-cli server stop ; sudo mst-cli agent stop

  2. 接下来,运行以下命令以删除现有的 Docker 桥设备:sudo ip link del docker0

  3. 如果文件 /etc/docker/daemon.json 存在于服务器上,使用文件编辑器(如 vinano)修改文件。 使用根或 sudo 权限运行文件编辑器:

    • “bip”条目 带有 IP 地址时,请通过以 CIDR 表示法添加新的 IP 地址来修改它。
    • “bip”: 条目不存在时,必须同时添加值 “bip”: 和 CIDR 表示法中的新 IP 地址。

    以下示例显示了具有更新的“bip”的daemon.json文件的结构:使用修改后的 IP 地址“192.168.128.1/24”的条目。

    daemon.json 的示例:

    {
    "bip": "192.168.128.1/24"
    }
    
  4. 如果服务器上不存在文件 /etc/docker/daemon.json ,请运行类似于以下示例的命令来创建文件并定义要使用的网桥 IP。

    例如:sudo echo '{ "bip":"192.168.128.1/24" }' > /etc/docker/daemon.json

  5. 使用以下命令启动 MS Tunnel 网关容器:sudo mst-cli agent start ; sudo mst-cli server start

有关详细信息,请参阅 Docker 文档中的使用桥网络

更改 Podman 使用的默认桥网络

Podman 使用文件 /etc/cni/net.d as 87-podman-bridge.conflist 配置新的默认桥 IP 地址。

  1. 使用以下命令停止 MS Tunnel 网关容器:sudo mst-cli server stop ; sudo mst-cli agent stop

  2. 接下来,运行以下命令以删除现有的 Podman 桥设备:sudo ip link del cni-podman0

  3. 使用根权限和文件编辑器(如 vinano),将 /etc/cni/net.d 修改为 87-podman-bridge.conflist,通过将 Podman 默认值替换为所需的子网和网关地址来更新“subnet:”和“gateway:”的默认值。 子网地址必须在 CIDR 表示法中指定。

    Podman 默认值为:

    • 子网:10.88.0.0/16
    • 网关:10.88.0.1
  4. 使用以下命令重新启动 MS Tunnel 网关容器:sudo mst-cli agent start ; sudo mst-cli server start

有关详细信息,请参阅 Red Hat 文档中的使用 Podman 配置容器网络

Linux 系统审核

Linux 系统审核可帮助识别托管 Microsoft Tunnel 的 Linux 服务器上与安全相关的信息或安全违规。 建议对 Microsoft Tunnel 进行 Linux 系统审核,但这不是必需的。 若要使用系统审核,Linux 服务器必须将 审核 的包安装到 /etc/audit/auditd.conf

有关如何实现审核的详细信息,具体取决于使用的 Linux 平台:

  • Red Hat:Red Had Enterprise Linux 7 及更高版本默认安装 审核 包。 但是,如果未安装包,则可以在 Linux 服务器上使用以下命令行来安装它: sudo dnf install audit audispd-plugins

    通常,每个 REHL 版本的默认存储库中都提供了 审核 的包。

    有关在 RHEL 上使用系统审核的详细信息,请参阅 Red Hat 博客中的 使用审核配置 Linux 系统审核

  • Ubuntu:若要对 Ubuntu 使用系统审核,必须手动安装 已审核 的包。 为此,请在 Linux 服务器上使用以下命令行: sudo apt install auditd audispd-plugins

    通常,每个 Ubuntu 版本的默认存储库中都提供了 审核 的包。

    有关在 Ubuntu 上使用系统审核的详细信息,请参阅 如何在 Ubuntu 上安装和安装 Auditd,这是最初在 kubefront.com 发布的 dev.to 网站上提供的文章。

网络

  • 启用 IPv4 数据包转发:每个托管 Tunnel 服务器软件的 Linux 服务器都必须启用 IPv4 的 IP 转发。 若要查看 IP 转发的状态,请在服务器上以“root”或“sudo”身份运行以下常规命令之一。 对于“已禁用”,两个命令均返回值“0”,对于“已启用”,两个命令均返回值“1”

    • sysctl net.ipv4.ip_forward
    • cat /proc/sys/net/ipv4/ip_forward

    如果未启用,可以通过在服务器上以“root”或“sudo”身份运行以下常规命令之一来临时启用 IP 转发。 这些命令可以更改 IP 转发配置,直到服务器重启。 重新启动后,服务器会将 IP 转发行为返回到其之前的状态。 对于这两个命令,请使用值“1”来“启用”转发。 值为 0 会禁用转发。 以下命令示例使用值“1”来“启用”转发:

    • sysctl -w net.ipv4.ip_forward=1
    • echo 1 > /proc/sys/net/ipv4/ip_forward

    若要将 IP 转发设为永久,请在每个 Linux 服务器上编辑“/etc/sysctl.conf”文件,并从“#net.ipv4.ip_forward=1”中删除前导井号标签以启用数据包转发。 编辑后,该条目应如下所示:

    # Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=1
    

    要使此更改生效,必须重新启动服务器或运行 sysctl -p

    如果 sysctl.conf 文件中不存在预期条目,请参阅使用的分发文档,以了解如何启用 IP 转发。 通常,你可以编辑“sysctl”,以在文件末尾添加缺少的行,以将启用 IP 转发设为永久。

  • 为每个服务器配置多个 NIC (可选) :建议使用两个网络接口控制器 (每个 Linux 服务器) ,以提高性能,但使用两个是可选的。

    • NIC 1 - 此 NIC 处理来自托管设备的流量,并且应位于具有公共 IP 地址的公共网络上。  此 IP 地址是在 站点配置 中配置的地址。 此地址可以表示单一服务器或负载均衡器。

    • NIC 2 -此 NIC 处理到本地资源的流量,并且应在无网络分段的专用内部网络上。

  • 确保基于云的 Linux 虚拟机可以访问本地网络:如果将 Linux 作为虚拟机在云端运行,请确保服务器可以访问本地网络。 例如,对于 Azure 中的 VM,可以使用 Azure ExpressRoute 或类似方法来提供访问权限。 在本地 VM 中运行服务器时,不需要 Azure ExpressRoute。

  • 负载均衡器 (可选) :如果选择添加负载均衡器,请参阅供应商文档了解配置详细信息。 请考虑特定于 Intune 和 Microsoft Tunnel 的网络流量和防火墙端口。

    Tunnel 服务器使用静态页响应 GET 请求。 负载均衡器将响应用作探测,以检查 Tunnel 服务器的运行情况。 响应是静态的,不包含敏感信息。

  • 每应用 VPN 和顶级域支持 - Microsoft Tunnel 不支持将每个应用 VPN 与本地顶级域的内部使用结合使用。

防火墙

默认情况下,Microsoft Tunnel 和服务器使用以下端口:

入站端口

  • TCP 443 - Microsoft Tunnel 所必需的。
  • UDP 443 - Microsoft Tunnel 所必需的。
  • TCP 22 - 可选。 用于到 Linux 服务器的 SSH/SCP。

出站端口

  • TCP 443 - 访问 Intune 服务所必需的。 Docker 或 Podman 请求映像所必需的。

为 Tunnel 创建服务器配置时,可以指定默认端口 443 以外的端口。 如果指定其他端口,请配置防火墙以支持你的配置。

更多要求

要访问安全令牌服务和日志的 Azure 存储,请提供对以下 FQDN 的访问权限:

  • 安全令牌服务*.sts.windows.net
  • 用于隧道日志的 Azure 存储:*.blob.core.windows.net
  • 其他存储终结点 URL: *.blob.storage.azure.net
  • Microsoft Intune:*.manage.microsoft.com
  • Microsoft身份验证: login.microsoftonline.com
  • Microsoft Graph: graph.microsoft.com
  • 配置防火墙规则以支持 Microsoft 工件注册表 (MAR) 客户端防火墙规则配置中详述的配置。

代理

可以在 Microsoft Tunnel 中使用代理服务器。

注意

低于版本 10 的 Android 版本不支持代理服务器配置。 有关详细信息,请参阅 Android 开发人员文档中的 VpnService.Builder

注意

确保 Android LOB 应用程序支持 MDM 和 MAM (PAC) 的直接代理或代理自动配置。

注意

已知问题:尝试使用个人或公司帐户登录到 Edge 的用户在配置代理自动配置 (PAC) 时可能会遇到问题。 在这种情况下,登录过程可能会失败,从而阻止用户访问内部资源。

解决方法:若要解决此问题,Microsoft Tunnel 提供拆分隧道作为选项。 拆分隧道允许用户仅包括需要代理的路由,同时从通过隧道路由中排除登录服务器和身份验证路径。 此解决方法可确保登录过程不受 PAC 配置的影响,允许用户访问内部资源并浏览 Internet。

直接代理也是一种没有拆分隧道的选项,可用于使用公司帐户在 Edge 中登录。 这包括将 Microsoft Tunnel 配置为使用直接代理而不是 PAC URL。

如果 Edge 中不需要用户登录,则 PAC 支持正常浏览和访问内部资源。

以下注意事项可帮助你配置 Linux 服务器和环境以获得成功:

为 Docker 配置出站代理

  • 如果使用内部代理,可能需要通过使用环境变量将 Linux 主机配置为使用代理服务器。 若要使用变量,请在 Linux 服务器上编辑 /etc/environment 文件,并添加以下行:

    http_proxy=[address]
    https_proxy=[address]

  • 不支持经过身份验证的代理。

  • 代理无法执行中断和检查,因为 Linux 服务器在连接到 Intune 时使用 TLS 相互身份验证。

  • 将 Docker 配置为使用代理来请求映像。 为此,请在 Linux 服务器上编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并添加以下行:

    [Service]
    Environment="HTTP_PROXY=http://your.proxy:8080/"
    Environment="HTTPS_PROXY=https://your.proxy:8080/"
    Environment="NO_PROXY=127.0.0.1,localhost"
    

    注意

    Microsoft Tunnel 不支持Microsoft Entra应用程序代理或类似的代理解决方案。

为 Podman 配置出站代理

以下详细信息有助于在使用 Podman 时配置内部代理:

  • 不支持经过身份验证的代理。

  • 代理无法执行中断和检查,因为 Linux 服务器在连接到 Intune 时使用 TLS 相互身份验证。

  • Podman 读取存储在 /etc/profile.d/http_proxy.sh 中的 HTTP 代理信息。如果服务器上不存在此文件,请创建它。 编辑 http_proxy.sh 以添加以下两行。 在以下行中,10.10.10.1:3128 是一个示例地址: 端口项。 添加这些行时,请将 10.10.10.1:3128 替换为代理 IP 地址的值: 端口:

    export HTTP_PROXY=http://10.10.10.1:3128
    export HTTPS_PROXY=http://10.10.10.1:3128

    如果你有权访问 Red Hat 客户门户,则可以查看与此解决方案关联的知识库文章。 请参阅 为 Podman - Red Hat 客户门户设置 HTTP 代理变量

  • 在通过运行 mstunnel-setup 安装 Microsoft Tunnel Gateway 之前,将这两行添加到 http_proxy.sh 时,脚本会自动在 /etc/mstunnel/env.sh 中配置 Tunnel Gateway 代理环境变量。

    若要在完成Microsoft Tunnel 网关设置后配置代理,请执行以下操作:

    1. 修改或创建文件 /etc/profile.d/http_proxy.sh 并添加上一个项目符号点中的两行。

    2. 编辑 /etc/mstunnel/env.sh 并将以下两行添加到文件末尾。 与上一行一样,将示例 address:port10.10.10.1:3128 替换为代理 IP 地址:port 的值:

      HTTP_PROXY=http://10.10.10.1:3128
      HTTPS_PROXY=http://10.10.10.1:3128

    3. 重新启动 Tunnel 网关服务器: 运行 mst-cli server restart

    请注意,RHEL 使用 SELinux。 由于不在 http_port_t 的 SELinux 端口上运行的代理可能需要其他配置,因此请检查 http 的 SELinux 托管端口的使用情况。 若要查看配置,请运行以下命令: sudo semanage port -l | grep "http_port_t"

    端口检查命令的结果示例。 在此示例中,代理使用 3128,但未列出:

    显示端口检查结果的屏幕截图。

    • 如果代理在 http_port_t 的 SELinux 端口之一上运行,则可以继续执行 Tunnel 网关安装过程。

    • 如果代理未像前面的示例那样在 SELinux 端口上运行 http_port_t,则必须进行额外的配置。

      如果代理端口未列出http_port_t,检查代理端口是否由其他服务使用。 使用 semanage 命令首先检查代理使用的端口,然后根据需要稍后对其进行更改。 若要检查代理使用的端口,请运行: sudo semanage port -l | grep "your proxy port"

      检查可能使用端口的服务结果示例:

      显示服务检查结果的屏幕截图。

      • 在本示例中,预期的端口 (3128) 由 squid 使用,该端口恰好是 OSS 代理服务。 Squid 代理 SELinux 策略是许多常见发行版的一部分。 由于 squid 使用端口 3128 (我们的示例端口),我们必须修改 http_port_t 端口,并添加端口 3128,以通过 SELinux 允许 Tunnel 使用的代理。 若要修改端口使用,请运行以下命令: sudo semanage port -m -t http_port_t -p tcp "your proxy port"

        修改端口的命令示例:

        显示端口修改命令示例的屏幕截图。

        运行命令以更改端口后,运行以下命令以检查该端口是否由另一个服务使用: sudo semanage port -l | grep "your proxy port"

        修改端口后检查端口的命令示例:

        修改后检查端口的屏幕截图。

        在此示例中,端口 3128 现在与 http_port-tsquid_port_t 相关联。 预期会出现此结果。 如果你的代理端口在运行 sudo semanage port -l | grep "your_proxy_port" 命令时没有列出,那么则运行该命令以再次修改端口,但 semanage 命令中的 -m 改为 -a: sudo semanage port -a -t http_port_t -p tcp "your proxy port"

将 Podman 配置为使用代理下载映像更新

可以将 Podman 配置为使用代理下载 (拉取) 更新的 Podman 映像:

  1. 在隧道服务器上,使用命令提示符运行以下命令,为 Microsoft Tunnel 服务的替代文件打开编辑器:

    systemctl edit --force mstunnel_monitor

  2. 将以下三行添加到文件。 将 [address] 的每个实例替换为代理 DN 或地址,然后保存文件:

    [Service]
    Environment="http_proxy=[address]"
    Environment="https_proxy=[address]"
    
  3. 接下来,在命令提示符处运行以下命令:

    systemctl restart mstunnel_monitor

  4. 最后,在命令提示符处运行以下命令,确认配置成功:

    systemctl show mstunnel_monitor | grep http_proxy

    如果配置成功,则结果类似于以下信息:

    Environment="http_proxy=address:port"
    Environment="https_proxy=address:port"
    

更新隧道服务器使用的代理服务器

若要更改隧道服务器的 Linux 主机使用的代理服务器配置,请按以下过程操作:

  1. 在隧道服务器上,编辑 /etc/mstunnel/env.sh 并指定新的代理服务器。

  2. 运行 mst-cli install

    此命令使用新的代理服务器详细信息重新生成容器。 在此过程中,系统会要求你验证 /etc/mstunnel/env.sh 的内容,并确保已安装证书。 证书应已存在于之前的代理服务器配置中。

    若要确认并完成配置,请输入“是”

平台

设备必须已向 Intune 注册才支持 Microsoft Tunnel。 仅支持以下设备平台:

  • iOS/iPadOS

  • Android Enterprise:

    • 完全托管
    • 公司拥有的工作配置文件
    • 个人拥有的工作配置文件

    注意

    Microsoft Tunnel 不支持 Android Enterprise 专用设备。

所有平台都支持以下功能:

  • Microsoft Entra使用用户名和密码对 Tunnel 进行身份验证。
  • 使用用户名和密码向 Tunnel Active Directory 联合身份验证服务 (AD FS) 进行身份验证。
  • 每应用支持。
  • 通过 Tunnel 应用手动执行全设备隧道连接,用户在其中启动 VPN 并选择“连接”
  • 拆分隧道。 但是,当 VPN 配置文件使用每应用 VPN 时,将忽略 iOS 拆分隧道规则。

对代理的支持仅限以下平台:

  • Android 10 及更高版本
  • iOS/iPadOS

权限

若要管理 Microsoft Tunnel,用户必须具有 Intune 的“Microsoft Tunnel 网关”权限组中的权限。 默认情况下,Intune管理员和Microsoft Entra管理员具有这些权限。 你还可以将其添加到为 Intune 租户创建的自定义角色中。

配置角色时,展开“权限”页上的“Microsoft Tunnel 网关”,然后选择要授予的权限

Microsoft Intune管理中心中隧道网关权限的屏幕截图。

Microsoft Tunnel 网关权限组授予以下权限:

  • 创建 - 配置 Microsoft Tunnel 网关服务器和站点。 服务器配置包括 IP 地址范围、DNS 服务器、端口和拆分隧道规则的设置。 站点是支持 Microsoft Tunnel 的多个服务器的逻辑分组。

  • 更新 (修改)- 更新 Microsoft Tunnel 网关服务器配置和站点。 服务器配置包括 IP 地址范围、DNS 服务器、端口和拆分隧道规则的设置。 站点是支持 Microsoft Tunnel 的多个服务器的逻辑分组。

  • 删除 - 删除 Microsoft Tunnel 网关服务器配置和站点。 服务器配置包括 IP 地址范围、DNS 服务器、端口和拆分隧道规则的设置。 站点是支持 Microsoft Tunnel 的多个服务器的逻辑分组。

  • 读取 - 查看 Microsoft Tunnel 网关服务器配置和站点。 服务器配置包括 IP 地址范围、DNS 服务器、端口和拆分隧道规则的设置。 站点是支持 Microsoft Tunnel 的多个服务器的逻辑分组。

运行准备工具

在开始安装服务器之前,建议下载并运行 最新版本的 mst-readiness 工具。 该工具是在 Linux 服务器上运行的脚本,执行以下操作:

  • 验证用于安装 Microsoft Tunnel 的 Microsoft Entra 帐户是否具有完成注册所需的角色。

  • 确认网络配置允许 Microsoft Tunnel 访问所需的 Microsoft 终结点。

  • 检查 Linux 服务器上是否存在 ip_tables模块。 此检查在 2022 年 2 月 11 日添加到脚本中,增加了对 RHEL 8.5 的支持。 默认情况下,RHEL 8.5 之后不会加载 ip_tables 模块。 如果 Linux 服务器安装后丢失,则必须手动加载ip_tables 模块

重要

准备工具不会验证入站端口,这是常见的错误配置。 准备工具运行后,查看防火墙先决条件,并手动验证防火墙是否允许入站流量。

mst-readiness 工具依赖于 jq (命令行 JSON 处理器)。 在运行准备工具之前,请确保已安装 jq。 有关如何获取和安装 jq的信息,请参阅所用 Linux 版本的文档。

若要使用准备工具:

  1. 使用下列方法之一获取最新版本的准备工具:

    • 使用 Web 浏览器直接下载工具。 转到 https://aka.ms/microsofttunnelready,下载名为“mst-readiness”的文件。

    • 登录到Microsoft Intune管理中心>租户管理>Microsoft Tunnel Gateway,选择“服务器”选项卡,选择“创建”打开“创建服务器”窗格,然后选择“下载就绪工具”。

    • 使用 Linux 命令直接获取准备工具。 例如,可以使用 wgetcurl 打开链接 https://aka.ms/microsofttunnelready

      例如,若要在下载期间使用 wget 并将详细信息记录到 mst-readiness 中,请运行 wget --output-document=mst-readiness https://aka.ms/microsofttunnelready

    可以从与你计划安装的服务器位于同一网络上的任何 Linux 服务器运行脚本,这使网络管理员能够使用该脚本独立排查网络问题。

  2. 若要验证网络和 Linux 配置,请使用以下命令运行脚本。 这些命令设置脚本的运行权限,验证 Tunnel 是否可以连接到正确的终结点,然后检查是否存在 Tunnel 使用的实用工具:

    • sudo ./mst-readiness

    • sudo ./mst-readiness network - 此命令运行以下命令,然后报告两者的成功或错误:

      • 尝试连接到隧道将使用的每个 Microsoft 终结点。
      • 检查是否在防火墙中打开了所需的端口。
    • sudo ./mst-readiness utils - 此命令验证 Tunnel 使用的实用工具(如 Docker 或 Podman)和ip_tables是否可用。

  3. 若要验证用于安装 Microsoft Tunnel 的帐户是否具有完成注册所需的角色和权限,请使用以下命令行运行脚本: ./mst-readiness account

    该脚本会提示你对 Web 浏览器使用其他计算机,你使用该浏览器进行身份验证以Microsoft Entra ID和Intune。 该工具报告成功或错误。

有关此工具的详细信息,请参阅 Microsoft Tunnel 文章的参考文章中的 mst-cli 参考

手动加载 ip_tables

虽然大多数 Linux 分发会自动加载ip_tables 模块,但某些分发可能不会。 例如,默认情况下,RHEL 8.5 不会加载ip_tables。

若要检查此模块是否存在,请在 Linux 服务器上运行最新版本的 mst-readiness 工具。 检查 ip_tables 是否已于 2022 年 2 月 11 日添加到准备工具脚本中。

如果该模块不存在,该工具将停止ip_tables模块检查。 在此方案中,可以运行以下命令来手动加载模块。

手动加载 ip_tables 模块

在 sudo 的上下文中,在 Linux 服务器上运行以下命令:

  1. 验证服务器上 ip_tables 状态:lsmod |grep ip_tables

  2. 如果未出现 ip_tables,请运行以下代码,立即将模块加载到内核中,而无需重新启动:/sbin/modprobe ip_tables

  3. 重新运行验证,以确认已加载表格:lsmod |grep ip_tables

重要

更新 Tunnel 服务器时,手动加载的 ip_tables 模块可能无法持久化。 这可能需要在更新完成后重新加载模块。 服务器更新完成后,查看服务器是否存在 ip_tables 模块。

如果表不存在,请使用前面的步骤重新加载模块,并执行额外的步骤,以便在加载模块后重新启动服务器。

配置 Linux 以在启动时加载 ip_tables

在 sudo 的上下文中,在 Linux 服务器上运行以下命令,创建在启动期间将ip_tables加载到内核的配置文件: echo ip_tables > /etc/modules-load.d/mstunnel_iptables.conf

手动加载 tun 模块

Microsoft Tunnel 需要 tun 模块,但某些 Linux 分发版默认不加载 tun 模块。

若要验证服务器上 是否存在 tun 模块,请运行: lsmod |grep tun

  1. 如果 不存在 tun ,请运行以下命令,在不重启的情况下立即将模块加载到内核中: /sbin/modprobe tun

  2. 重新运行验证以确认现在已加载 tun 模块: lsmod |grep tun

重要

更新 Tunnel 服务器时,手动加载的 tun 模块可能不会保留。 这可能需要在更新完成后重新加载模块。 服务器更新完成后,查看服务器是否存在 tun 模块。

如果不存在,请使用前面的步骤重新加载模块,并执行附加步骤,在加载模块后重启服务器。

将 Linux 配置为在启动时加载 tun

在 sudo 的上下文中,在 Linux 服务器上运行以下命令,以创建在启动期间将 tun 加载到内核的配置文件: echo tun > /etc/modules-load.d/mstunnel_tun.conf

后续步骤

配置 Microsoft Tunnel