> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/zh/mo-kuai-4-wang-luo/04-firewall-nat-vlans.md).

# 防火墙规则、NAT 与 VLAN

## 网络规则概述

**网络规则** 是流经 VergeOS 网络的所有流量的中央控制机制。它们取代了传统上由独立防火墙、路由器和交换机提供的功能——所有这些都通过每个网络上的单一规则列表进行管理。

VergeOS 中的每个外部、内部和 VPN 网络都有自己的规则集。规则定义哪些流量被允许、阻止、转换或路由。由于内部网络是 **默认安全** （在规则允许之前不会有流量通过），因此理解规则对于构建可用且安全的网络拓扑至关重要。

可通过点击 **规则** 左侧菜单中的。

## 规则类型

VergeOS 支持三种规则动作，每种都有不同用途：

### 防火墙规则（Accept / Drop / Reject）

防火墙规则控制哪些数据包可以通过网络：

| 操作     | 行为                                 |
| ------ | ---------------------------------- |
| **允许** | 允许符合定义条件的数据包通过                     |
| **丢弃** | 静默丢弃匹配的数据包——发送方不会收到任何响应            |
| **拒绝** | 丢弃匹配的数据包，并向源端返回 ICMP“目的地不可达”（在可能时） |

使用 **允许** 规则明确允许应当放行的流量。对大多数阻止场景使用 **丢弃** （静默丢弃可防止侦察）。当你希望发送方立即知道连接被拒绝时使用 **拒绝** 当你希望发送方立即知道连接被拒绝时使用。

### NAT/PAT 规则（转换）

**转换** 规则提供网络地址转换（NAT）和端口地址转换（PAT）。常见用途包括：

* **源 NAT（SNAT）** —— 使用单个外部 IP 隐藏内部虚拟机地址，以便进行出站 Internet 访问
* **目的 NAT（DNAT）** —— 将外部 IP/端口映射到内部虚拟机的 IP/端口，以供入站服务访问（例如发布 Web 服务器）
* **1:1 NAT** —— 将完整的外部 IP 映射到完整的内部 IP（所有端口）
* **端口转发** —— 将特定的外部端口转换为不同的内部端口

NAT 规则使用 **转换** 动作，配合 **入站** 方向用于 DNAT，配合 **出站** 方向用于 SNAT。

### 静态路由规则（Route）

**路由** 规则定义流量如何离开网络。最常见的用法是 **默认网关** 规则，它将所有出站流量通过 DMZ 发送到外部网络。路由规则也可以定义网络间通信的特定路径。

## 规则处理顺序

规则按 **自上而下**处理。首个匹配的规则生效——一旦数据包匹配某条规则，就不会再对该数据包评估后续规则。

**顺序很重要。** 看这个例子：

1. **NAT 规则** —— 将端口 443 上的入站流量转换到内部虚拟机 `10.100.0.50:443`
2. **防火墙规则** —— 丢弃端口 443 上的入站流量

如果这些规则顺序颠倒（先丢弃，再 NAT），流量会在 NAT 规则看到之前就被丢弃。始终将 NAT/转换规则 **上方** 放在相关防火墙规则之上，以便它们需要先处理流量时生效。

要更改规则顺序，请从规则列表中选择一条规则并使用 **移动** 选项将其重新定位。

```mermaid
graph TD
    PKT["入站数据包"] --> R1["规则 1：转换<br/>端口 443 → 10.100.0.50"]
    R1 -->|"匹配"| XLATE["数据包已转换<br/>到内部虚拟机"]
    R1 -->|"未匹配"| R2["规则 2：允许<br/>来自管理员的 22 端口"]
    R2 -->|"匹配"| ACCEPT["数据包已接受"]
    R2 -->|"未匹配"| R3["规则 3：丢弃<br/>其余全部"]
    R3 --> DROP["数据包已丢弃"]

    style PKT fill:#e3f2fd,stroke:#1565c0
    style XLATE fill:#e8f5e9,stroke:#2e7d32
    style ACCEPT fill:#e8f5e9,stroke:#2e7d32
    style DROP fill:#fce4ec,stroke:#c62828
```

## 规则参数

每条规则都使用一组一致的参数进行配置：

| 参数      | 说明                                       |
| ------- | ---------------------------------------- |
| **名称**  | 用于管理的描述性标签（例如： `允许 HTTPS`, `SNAT 到 WAN`) |
| **操作**  | 允许、丢弃、拒绝、路由或转换                           |
| **协议**  | TCP、UDP、ICMP 或 ANY                       |
| **方向**  | 入站或出站                                    |
| **接口**  | 特定接口或任意接口                                |
| **源代码** | 流量的来源——请参见下面的地址选择器                       |
| **目的地** | 流量要被送往的位置                                |
| **目标**  | 实际将流量导向何处（与 Route 和 Translate 动作一起使用）    |
| **固定**  | 可选择将规则固定到规则列表的顶部或底部                      |

### 端口过滤

对于 TCP 和 UDP 协议，您可以指定：

* 一个 **单个端口** （例如， `443`)
* 一个 **端口范围** （例如， `8000-8999`)
* 使用单独规则处理多个端口

### 连接跟踪状态

高级规则可以基于连接状态（New、Established、Related、Untracked）进行过滤，以实现有状态的数据包检查。

## 地址选择器

该 **源代码**, **目的地**，以及 **目标** 字段使用地址选择器——用于指定流量来源或去向的灵活选项：

| 选择器             | 说明                                                      |
| --------------- | ------------------------------------------------------- |
| **别名**          | 选择在此网络上定义的命名别名（一个 IP/CIDR 组）                            |
| **任意/无**        | 匹配任意地址——不应用过滤                                           |
| **自定义**         | 输入特定的 IP、CIDR 或 IP 范围（例如： `192.168.1.50-192.168.1.100`) |
| **默认值**         | 路由规则的辅助项——定义默认路由（0.0.0.0/0）                             |
| **我的 IP 地址**    | 选择在此网络上定义的 IP（虚拟 IP、静态 IP、别名）                           |
| **我的网络地址**      | 此网络的整个子网                                                |
| **我的路由器 IP**    | 此网络的路由器 IP（单个地址）                                        |
| **其他 IP 地址**    | 从其他网络中选择特定 IP                                           |
| **其他网络地址**      | 选择其他网络的整个子网                                             |
| **其他路由器 IP**    | 选择其他网络的路由器 IP                                           |
| **其他网络 DMZ IP** | 选择其他网络的 DMZ 侧 IP（用于网络间路由）                               |

{% hint style="success" %}
使用 **辅助选择器** （我的 IP、其他网络 DMZ IP 等），而不是硬编码 IP 地址。若网络地址发生变化，辅助选择器会自动更新，并且当规则克隆到配方或租户模板中时，它们可确保规则正常工作。
{% endhint %}

## 网络别名

**别名** 可将多个 IP 地址或 CIDR 范围分组为一个命名集合，然后在规则中引用该集合。当相同地址组出现在多条规则中时，这会简化管理。

要创建别名：

1. 导航至 **网络 → 别名 → 新建**
2. 输入一个 **名称** （例如， `Web 服务器`, `受信任的管理员`)
3. 定义 **地址集** —— 将 IP/CIDR 以竖线分隔列表输入（例如： `10.10.10.10|10.200.10.0/24`）或逐项添加条目
4. 设置 **发布范围**: **私有** （仅此云中）或 **全局** （可供租户使用）
5. 单击 **提交**

创建规则时，设置源或目的地 **类型** 更改为 **别名** 并从下拉菜单中选择所需的别名。

{% hint style="warning" %}
修改别名后，您必须点击 **应用规则** 在使用该别名的每个网络上，才能使更改生效。
{% endhint %}

## 限速（流量节流）

单独的规则可以启用 **节流** 以限制流量速率。创建或编辑规则时，请勾选 **启用节流** 并配置：

* **速率** —— 数值速率
* **速率类型** —— 单位，例如 packets/second、MB/day、bytes/hour 等
* **突发** —— 超出速率限制的突发允许量

限速也可以应用于 **网络级别** （在该网络的路由器上），以节流通过该网络的所有流量，而不只是特定规则。

## 规则诊断

VergeOS 提供三个级别的规则级诊断：

### 跟踪规则统计

启用 **跟踪规则统计** 在任意规则上使用复选框即可统计该规则处理的数据包和字节数。统计信息可在规则列表中查看，让您了解哪些规则正在处理流量以及处理了多少。

对于全网络跟踪，请启用该网络的 `统计` 设置，以自动跟踪每条规则（请以当前界面中的确切标签为准）。

### 跟踪 / 调试规则

启用 **跟踪/调试规则** 在特定规则上启用，以跟踪所有匹配它的数据包。这对于故障排查极其有用——您可以准确看到哪些数据包命中了某条规则，以及它们是被允许、丢弃还是转换。

### 低层检查

对于高级诊断，请连接到该网络的控制台并运行：

```bash
nft list ruleset
```

这将显示完整的 **nftables** 规则集，即 VergeOS 配置的内容，显示当前生效的实际内核级规则。这对支持工程师诊断复杂的规则交互问题很有帮助。

## 创建规则：演练

此示例为需要 Internet 访问和入站 Web 服务器的内部网络创建一套常见规则集：

**步骤 1：默认路由（出站 Internet 访问）**

1. 导航到内部网络 → **规则 → 新建**
2. **名称：** `默认网关`, **操作：** Route， **方向：** 出站
3. **目标：** Default， **目标：** 其他网络 DMZ IP → 选择您的外部网络
4. 提交并应用规则

**步骤 2：SNAT（将内部 IP 隐藏在外部 IP 后）**

1. **名称：** `SNAT 出站`, **操作：** Translate， **方向：** 出站
2. **源：** 我的网络地址， **目标：** 其他网络 DMZ IP → 选择外部网络
3. 固定到 **顶部** （SNAT 必须在防火墙规则之前处理）
4. 提交并应用规则

**步骤 3：DNAT（发布 Web 服务器）**

1. **名称：** `DNAT HTTPS`, **操作：** Translate， **协议：** TCP， **方向：** 入站
2. **目标：** 我的 IP 地址 → 选择外部 IP， **端口：** 443
3. **目标：** 自定义 → `10.100.0.50` （内部 Web 服务器）， **端口：** 443
4. 提交并应用规则

**步骤 4：允许入站 HTTPS**

1. **名称：** `允许 HTTPS`, **操作：** 允许， **协议：** TCP， **方向：** 入站
2. **目的端口：** 443
3. 提交并应用规则

{% hint style="warning" %}
创建或修改规则后，请务必点击 **应用规则** 在创建或修改规则后。规则在应用前处于暂存状态——只有显式应用后才会生效。
{% endhint %}

## VLAN 中继

VergeOS 中的 VLAN 在 **外部网络** 级别使用 802.1Q 标记进行配置。每个外部网络都可以映射到物理网络上的特定 VLAN ID，从而无需额外的物理布线即可实现流量分段。

### 创建带 VLAN 标记的外部网络

1. 导航至 **网络 → 新建外部**
2. 设置 **二层类型** 更改为 `vLAN`
3. 输入 **二层 ID** （802.1Q VLAN ID，例如： `100`)
4. 选择 **接口网络** （此 VLAN 所承载的物理网络）
5. 配置 IP 地址并提交

多个外部网络可以在同一物理网络上使用不同的 VLAN ID，为管理、生产、DMZ 和租户流量提供逻辑隔离。

### Q-in-Q（双标签）

对于需要双 VLAN 标记的服务提供商环境，请选择一个 **外部网络** （而不是物理网络）作为接口网络。这会在现有 VLAN 标签之上再叠加第二个 VLAN 标签。

## VPN 概述

内置 VPN 连接，使用两种协议：

### WireGuard

现代化、高性能的 VPN 协议，采用最先进的加密技术且配置开销极低。推荐用于大多数 VPN 场景。

### IPsec

为必须与第三方 IPsec 设备（Cisco、pfSense 等）对接的环境提供的行业标准 VPN 协议。

### WireGuard 使用场景

* **VergeOS 系统之间的站点到站点** —— 通过加密隧道连接两个 VergeOS 部署。双方各自创建 WireGuard 接口，并通过公钥交换将对方配置为对等端。
* **与第三方对等端的站点到站点** —— 将 VergeOS 系统连接到任何兼容 WireGuard 的端点。
* **远程用户访问** —— 为单个用户提供安全的 VPN 访问。VergeOS 可自动生成对等端配置文件，供支持的 WireGuard 客户端软件下载。

WireGuard 附加到 VergeOS 网络（通常是一个可以访问 VPN 应到达的所有资源的内部网络）。创建接口和对等端定义后，点击 **应用规则** 以激活自动生成的防火墙和路由规则。

### IPsec 使用场景

* **第三方设备连接** —— 连接到 Cisco、pfSense、FortiGate 或远程站点上的其他支持 IPsec 的设备。
* **租户 VPN** —— 在租户内部配置 IPsec 隧道，以实现与该租户远程基础设施的站点到站点连接。

IPsec 配置涉及创建一个 **VPN 网络**，配置 **阶段 1** （IKE 协商）和 **阶段 2** （加密/隧道参数），然后应用自动生成的防火墙规则。

{% hint style="success" %}
在可能的情况下，建议优先使用 WireGuard 而不是 IPsec。它具有更好的性能、更简单的配置，并且更不容易因安全配置错误而暴露风险。
{% endhint %}

## 微分段

微分段是一种将网络划分为彼此隔离的分段、每个分段都有各自安全控制的安全策略。VergeOS 专为这种方法而设计：

### VergeOS 如何实现微分段

1. **将内部网络作为分段** —— 每个内部网络默认都是一个隔离的安全边界。为 Web、应用、数据库、管理和开发层分别创建独立网络。
2. **细粒度防火墙规则** —— 按规则定义流量策略，指定协议、端口、源、目的地和方向。只允许每一层确切所需的流量。
3. **用于策略组的网络别名** —— 将相关 IP 分组到别名中（例如： `Web 服务器`, `DB-Clients`）并在规则中引用它们，以实现一致的策略执行。
4. **租户隔离** —— 每个租户（VDC）都拥有自己的 DMZ 和内部网络，在租户之间提供完整的网络封装。
5. **用于可视性的端口镜像** —— 在不影响生产的情况下监控任何网络分段上的流量，以进行安全分析。
6. **用于加密路径的 VPN** —— 在敏感网络分段之间使用 WireGuard 或 IPsec，以实现纵深防御。

### 零信任设计模式

```mermaid
graph TB
    子图“零信任多层”
        WEB["Web 层<br/>10.100.0.0/24<br/>允许：443 入站"]
        APP["应用层<br/>10.100.1.0/24<br/>仅允许来自 Web 的 8080"]
        DB["数据库层<br/>10.100.2.0/24<br/>仅允许来自 App 的 3306"]
    end

    WEB -->|"仅 8080 端口"| APP
    APP -->|"仅 3306 端口"| DB

    INET["Internet"] -->|"仅 443 端口"| WEB

    style WEB fill:#e3f2fd,stroke:#1565c0
    style APP fill:#fff3e0,stroke:#e65100
    style DB fill:#fce4ec,stroke:#c62828
    style INET fill:#f5f5f5,stroke:#616161
```

每一层都是一个带有明确规则的独立内部网络。Web 层仅接受来自 Internet 的 HTTPS。App 层仅接受来自 Web 层的 8080 端口。数据库层仅接受来自 App 层的 3306 端口。不允许其他任何流量——所有路径都已明确规定。

{% hint style="info" %}
**VMware 桥接**

VMware 将防火墙和 NAT 分布在 NSX-T DFW（在 vNIC 上进行微分段）、NSX-T Edge（NAT 和 Tier-0/Tier-1 静态路由）以及 vDS 端口组（VLAN）中。VergeOS 将它们统一为按网络划分的规则列表：防火墙规则替代 DFW，转换规则替代 NSX Edge NAT，路由规则替代 Tier-0/Tier-1 静态路由，规则顺序替代 NSX 策略类别，且 WireGuard VPN 作为平台内置交付。
{% endhint %}

{% hint style="info" %}
**Nutanix 桥接**

Nutanix 需要 Flow 附加组件用于微分段，OVS 网桥配置用于 VLAN，以及外部基础设施用于 NAT/路由/VPN。VergeOS 将防火墙规则、NAT/PAT 规则、路由规则、WireGuard/IPsec VPN、地址别名以及每条规则的限速和统计都内置在每个网络中。
{% endhint %}

## 要点总结

| 概念        | 摘要                                                     |
| --------- | ------------------------------------------------------ |
| **规则类型**  | Accept/Drop/Reject（防火墙）、Translate（NAT/PAT）、Route（静态路由） |
| **处理顺序**  | 自上而下——首个匹配生效；NAT 要排在相关防火墙规则之前                          |
| **地址选择器** | 使用辅助项（我的 IP、其他网络 DMZ IP）而不是硬编码 IP，以提高可移植性              |
| **别名**    | 用于在多条规则之间保持一致策略管理的 IP/CIDR 命名组                         |
| **限速**    | 在路由器上按规则节流或进行全网络限速                                     |
| **诊断**    | 按规则跟踪统计、用于数据包级检查的跟踪/调试， `nft list ruleset` 用于低层视图      |
| **VLAN**  | 每个外部网络单独设置 802.1Q 标记；通过将外部网络作为接口实现 Q-in-Q              |
| **VPN**   | WireGuard（推荐）用于站点到站点和远程访问；IPsec 用于第三方兼容性               |
| **微分段**   | 每层独立内部网络 + 最小权限规则 = 零信任架构                              |

## 下一步

配置好防火墙规则、NAT、VLAN 和 VPN 后，请进入动手实验，将这些概念付诸实践： [**实验：网络配置 →**](/learn-the-platform/zh/mo-kuai-4-wang-luo/lab.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/zh/mo-kuai-4-wang-luo/04-firewall-nat-vlans.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
