使用 .mobileconfig 描述文件部署
创建 Apple .mobileconfig 描述文件,将 Vylos WireGuard 隧道安装为受管理、只读的系统项目。
选择描述文件类型
| 目标 | VPN 有效负载类型 | 下发要求 |
|---|---|---|
| 将符合条件的设备流量通过一个隧道路由 | com.apple.vpn.managed | 直接安装或通过 MDM 下发。 |
| 将分配的受管理 App 通过 Vylos 路由 | com.apple.vpn.managed.applayer | 即使 VPN 描述文件本身是直接安装的,生产环境中的 App 分配仍然需要 MDM。 |
两种描述文件都会在 Vylos 中创建一个受管理隧道。它们不同于受管理 App 配置;后者控制 App 行为,但不会安装 VPN。
各项设置的位置
| 功能 | 描述文件中的位置 |
|---|---|
| WireGuard 接口和对等节点 | VendorConfig.WgQuickConfigBase64 或 WgQuickConfig |
| DNS 分流和搜索域 | VendorConfig.VylosConfigBase64 或 VylosConfig |
| 自动激活 | VPN.OnDemandEnabled 和 VPN.OnDemandRules |
| 阻止未经过 VPN 的连接 | VPN.IncludeAllNetworks |
| 按 App 激活 | 顶层 OnDemandMatchAppEnabled 和 VPNUUID |
| Vylos 限制和偏好设置 | 受管理 App 配置,而不是 VPN 描述文件 |
下面的示例使用 Apple 属性列表格式。如果 MDM 显示的是表单,请按相同的字典嵌套关系和值类型填写;不要将带点的名称直接作为键。
传递 WireGuard 配置
在 VPN 有效负载的 VendorConfig 字典中只放置以下一个键:
| 键 | 值 |
|---|---|
WgQuickConfig | WireGuard .conf 文件未经修改的多行 UTF-8 内容。 |
WgQuickConfigBase64 | 同一 .conf UTF-8 内容的单行 Base64 编码。 |
如果 MDM 字段无法保留换行,请使用 WgQuickConfigBase64。如果有效负载同时包含两个键,Vylos 会因为无法确定预期来源而拒绝它。
Base64 是传输编码,不是加密。编码值是 .conf 文本本身,而不是 .vylos 文件、ZIP 归档或指向这些文件的路径。
在 macOS 上,以下命令会把可直接粘贴的值复制到剪贴板:
base64 -i "tunnel.conf" | tr -d '\n' | pbcopy
base64 对文件编码,tr -d '\n' 删除编码输出中的换行,pbcopy 将结果放入剪贴板。在 MDM 的键值编辑器中,将结果粘贴为 WgQuickConfigBase64,并省略 WgQuickConfig。
传递 DNS 分流设置
受管理隧道使用 DNS 分流时,请在同一个 VendorConfig 字典中仅添加以下一个可选键:
| 键 | 值 |
|---|---|
VylosConfig | 采用 settings.conf 格式的多行 UTF-8 Vylos 设置文本。 |
VylosConfigBase64 | 同一文本的单行 Base64 编码。 |
通过 MDM 下发时请使用 VylosConfigBase64,以免键值编辑器删除或修改换行符。创建如下文件:
[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
然后在 macOS 上复制编码值:
base64 -i "settings.conf" | tr -d '\n' | pbcopy
将结果粘贴为 VylosConfigBase64。WireGuard 配置还必须在 [Interface] 中包含至少一个 DNS 服务器。Domains 选择使用这些服务器的查询,SearchDomains 为短主机名添加后缀,而流量路由仍由 AllowedIPs 控制。
受管理隧道的终止开关
要让受管理的设备范围隧道具备终止开关行为,请在 VPN 字典中使用 Apple 的 IncludeAllNetworks 键:
<key>IncludeAllNetworks</key>
<integer>1</integer>
将其放在 RemoteAddress 和 AuthenticationMethod 旁边。请通过 OnDemandRules 单独配置自动激活。
IncludeAllNetworks 不会扩展 WireGuard 的 AllowedIPs 路由。它会阻止普通流量绕过 VPN,但每个对等节点可以承载哪些目标仍由 AllowedIPs 决定。完整双栈隧道应使用 0.0.0.0/0 和 ::/0。部分路由会成为严格的允许列表,并且路由还必须覆盖 [Interface] 中的每个 DNS 服务器。
Apple 仍会为网络控制流量和某些设备服务保留例外。部署前请查阅 VPN 载荷中的 IncludeAllNetworks 字段。
设备范围描述文件
传统的设备范围隧道使用 com.apple.vpn.managed。部署前,请替换所有示例标识符、UUID、密钥、地址和端点。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadDisplayName</key>
<string>Vylos Managed Tunnel</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000003</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadDisplayName</key>
<string>VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.corp</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000004</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfig</key>
<string>[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Address = 10.0.0.2/32
DNS = 10.0.0.1
[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
</string>
<key>VylosConfig</key>
<string>[SplitDNS]
Domains = corp.example.com, *.internal.example.com
SearchDomains = example.com
</string>
</dict>
<key>VPN</key>
<dict>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>AuthenticationMethod</key>
<string>Password</string>
</dict>
</dict>
</array>
</dict>
</plist>
使用 uuidgen 生成唯一 UUID。每个额外隧道都是外层 PayloadContent 数组中的另一个 com.apple.vpn.managed 字典。
如需使用单行值,请将示例 WgQuickConfig 键和多行字符串替换为:
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
请以相同方式替换示例中的 VylosConfig 键和多行字符串:
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
按 App 描述文件
使用 com.apple.vpn.managed.applayer 和 Vylos 的数据包隧道提供程序来实现按 App 的 WireGuard 路由。载荷支持同样的 WgQuickConfig 和 WgQuickConfigBase64 两种方式,以及 VylosConfig 或 VylosConfigBase64 中的可选 DNS 分流设置。
| 设置 | 值 |
|---|---|
PayloadType | com.apple.vpn.managed.applayer |
VPNType | VPN |
VPNSubType | io.cbnventures.vylos |
VPN.ProviderBundleIdentifier | io.cbnventures.vylos.packet-tunnel |
VPN.ProviderType | packet-tunnel |
VPNUUID | 与分配给此 VPN 的每个受管理 App 共享的唯一值。 |
OnDemandMatchAppEnabled | 设为 true,使分配的 App 发起网络通信时自动连接。 |
以下字典可替换描述文件 PayloadContent 数组中的设备范围 VPN 字典:
<dict>
<key>PayloadDisplayName</key>
<string>Vylos Per-App VPN</string>
<key>PayloadIdentifier</key>
<string>com.example.vylos.vpn.per-app</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed.applayer</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000005</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Corporate Per-App VPN</string>
<key>VPNType</key>
<string>VPN</string>
<key>VPNSubType</key>
<string>io.cbnventures.vylos</string>
<key>VPNUUID</key>
<string>00000000-0000-0000-0000-000000000006</string>
<key>OnDemandMatchAppEnabled</key>
<true/>
<key>VendorConfig</key>
<dict>
<key>WgQuickConfigBase64</key>
<string>BASE64_ENCODED_CONF</string>
<key>VylosConfigBase64</key>
<string>BASE64_ENCODED_SETTINGS_CONF</string>
</dict>
<key>VPN</key>
<dict>
<key>AuthenticationMethod</key>
<string>Password</string>
<key>RemoteAddress</key>
<string>vpn.example.com</string>
<key>ProviderBundleIdentifier</key>
<string>io.cbnventures.vylos.packet-tunnel</string>
<key>ProviderType</key>
<string>packet-tunnel</string>
<key>OnDemandEnabled</key>
<integer>1</integer>
</dict>
</dict>
安装此有效负载会创建 VPN,但不会为其分配 App。请继续参阅配置按 App VPN,将受管理 App 与同一 VPNUUID 关联,并了解支持的路由字段。
安装和移除描述文件
通过 MDM 下发描述文件,以便集中管理所有权、替换和移除。如果无法使用 MDM,用户也可以直接安装设备范围描述文件,然后通过操作系统的描述文件管理设置将其移除。
无论使用哪种方式,Vylos 都将其视为由描述文件拥有且只读。受支持的更改方式是更新或移除描述文件,而不是在 Vylos 中编辑隧道。
有关 App 中的最终体验,请参阅部署受管理隧道。有关 Apple 的完整有效负载约定,请参阅 VPN 和 AppLayerVPN 参考。