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 网关。
在 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 地址不会与公司网络冲突。
使用以下命令停止 MS Tunnel 网关容器:
sudo mst-cli server stop ; sudo mst-cli agent stop
接下来,运行以下命令以删除现有的 Docker 桥设备:
sudo ip link del docker0
如果文件 /etc/docker/daemon.json 存在于服务器上,使用文件编辑器(如 vi 或 nano)修改文件。 使用根或 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" }
如果服务器上不存在文件 /etc/docker/daemon.json ,请运行类似于以下示例的命令来创建文件并定义要使用的网桥 IP。
例如:
sudo echo '{ "bip":"192.168.128.1/24" }' > /etc/docker/daemon.json
使用以下命令启动 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 地址。
使用以下命令停止 MS Tunnel 网关容器:
sudo mst-cli server stop ; sudo mst-cli agent stop
接下来,运行以下命令以删除现有的 Podman 桥设备:
sudo ip link del cni-podman0
使用根权限和文件编辑器(如 vi 或 nano),将 /etc/cni/net.d 修改为 87-podman-bridge.conflist,通过将 Podman 默认值替换为所需的子网和网关地址来更新“subnet:”和“gateway:”的默认值。 子网地址必须在 CIDR 表示法中指定。
Podman 默认值为:
- 子网:10.88.0.0/16
- 网关:10.88.0.1
使用以下命令重新启动 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 网关设置后配置代理,请执行以下操作:
修改或创建文件 /etc/profile.d/http_proxy.sh 并添加上一个项目符号点中的两行。
编辑 /etc/mstunnel/env.sh 并将以下两行添加到文件末尾。 与上一行一样,将示例 address:port 值 10.10.10.1:3128 替换为代理 IP 地址:port 的值:
HTTP_PROXY=http://10.10.10.1:3128
HTTPS_PROXY=http://10.10.10.1:3128
重新启动 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-t 和 squid_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 映像:
在隧道服务器上,使用命令提示符运行以下命令,为 Microsoft Tunnel 服务的替代文件打开编辑器:
systemctl edit --force mstunnel_monitor
将以下三行添加到文件。 将 [address] 的每个实例替换为代理 DN 或地址,然后保存文件:
[Service] Environment="http_proxy=[address]" Environment="https_proxy=[address]"
接下来,在命令提示符处运行以下命令:
systemctl restart mstunnel_monitor
最后,在命令提示符处运行以下命令,确认配置成功:
systemctl show mstunnel_monitor | grep http_proxy
如果配置成功,则结果类似于以下信息:
Environment="http_proxy=address:port" Environment="https_proxy=address:port"
更新隧道服务器使用的代理服务器
若要更改隧道服务器的 Linux 主机使用的代理服务器配置,请按以下过程操作:
在隧道服务器上,编辑 /etc/mstunnel/env.sh 并指定新的代理服务器。
运行
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 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 版本的文档。
若要使用准备工具:
使用下列方法之一获取最新版本的准备工具:
使用 Web 浏览器直接下载工具。 转到 https://aka.ms/microsofttunnelready,下载名为“mst-readiness”的文件。
登录到Microsoft Intune管理中心>租户管理>Microsoft Tunnel Gateway,选择“服务器”选项卡,选择“创建”打开“创建服务器”窗格,然后选择“下载就绪工具”。
使用 Linux 命令直接获取准备工具。 例如,可以使用 wget 或 curl 打开链接 https://aka.ms/microsofttunnelready。
例如,若要在下载期间使用 wget 并将详细信息记录到 mst-readiness 中,请运行
wget --output-document=mst-readiness https://aka.ms/microsofttunnelready
可以从与你计划安装的服务器位于同一网络上的任何 Linux 服务器运行脚本,这使网络管理员能够使用该脚本独立排查网络问题。
若要验证网络和 Linux 配置,请使用以下命令运行脚本。 这些命令设置脚本的运行权限,验证 Tunnel 是否可以连接到正确的终结点,然后检查是否存在 Tunnel 使用的实用工具:
sudo ./mst-readiness
sudo ./mst-readiness network
- 此命令运行以下命令,然后报告两者的成功或错误:- 尝试连接到隧道将使用的每个 Microsoft 终结点。
- 检查是否在防火墙中打开了所需的端口。
sudo ./mst-readiness utils
- 此命令验证 Tunnel 使用的实用工具(如 Docker 或 Podman)和ip_tables是否可用。
若要验证用于安装 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 服务器上运行以下命令:
验证服务器上 ip_tables 状态:
lsmod |grep ip_tables
如果未出现 ip_tables,请运行以下代码,立即将模块加载到内核中,而无需重新启动:
/sbin/modprobe ip_tables
重新运行验证,以确认已加载表格:
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
如果 不存在 tun ,请运行以下命令,在不重启的情况下立即将模块加载到内核中:
/sbin/modprobe tun
重新运行验证以确认现在已加载 tun 模块:
lsmod |grep tun
重要
更新 Tunnel 服务器时,手动加载的 tun 模块可能不会保留。 这可能需要在更新完成后重新加载模块。 服务器更新完成后,查看服务器是否存在 tun 模块。
如果不存在,请使用前面的步骤重新加载模块,并执行附加步骤,在加载模块后重启服务器。
将 Linux 配置为在启动时加载 tun
在 sudo 的上下文中,在 Linux 服务器上运行以下命令,以创建在启动期间将 tun 加载到内核的配置文件: echo tun > /etc/modules-load.d/mstunnel_tun.conf