## 子网范围说明

`192.168.2.0/24` 使用 CIDR(无类域间路由)表示法,用于定义一个 IPv4 子网范围。

在这个例子中,子网掩码为 `255.255.255.0`,具体含义如下:

- `192.168.2.0`:子网的网络地址。
- `/24`:表示子网掩码的前 24 位为 `1`,对应 `255.255.255.0`。

因此,`192.168.2.0/24` 包含 256 个 IP 地址,范围从 `192.168.2.0` 到 `192.168.2.255`。

其中:

- **网络地址**:`192.168.2.0`
- **广播地址**:`192.168.2.255`
- **通常可用的主机地址**:`192.168.2.1` 至 `192.168.2.254`

## 禁止 VPN 客户端访问内网 IP 的特定端口

假设 OCServ 使用以下 IPv4 地址池配置:

```ini
ipv4-network = 192.168.2.0
ipv4-netmask = 255.255.255.0
```

VPN 客户端的地址将从该子网的可用地址中分配,实际分配范围还受服务器地址占用等因素影响。

如果需要禁止这些 VPN 客户端访问内网服务器 `192.168.1.100` 的 TCP 和 UDP 端口 `8080`,可以在 VPN 服务器上配置 iptables 规则。

### 添加规则

```bash
# 禁止 VPN 客户端访问目标内网 IP 的 TCP 端口 8080
sudo iptables -I FORWARD 1 -s 192.168.2.0/24 -d 192.168.1.100 -p tcp --dport 8080 -j REJECT

# 禁止 VPN 客户端访问目标内网 IP 的 UDP 端口 8080
sudo iptables -I FORWARD 1 -s 192.168.2.0/24 -d 192.168.1.100 -p udp --dport 8080 -j REJECT
```

### 参数说明

- `-I FORWARD 1`:将规则插入 `FORWARD` 链的首位,优先于该链中已有的放行规则进行匹配。
- `-s 192.168.2.0/24`:指定源 IP 地址范围,即 VPN 客户端所在子网。
- `-d 192.168.1.100`:指定目标服务器的 IP 地址。
- `-p tcp`:匹配 TCP 协议。
- `-p udp`:匹配 UDP 协议。
- `--dport 8080`:指定目标端口为 `8080`。
- `-j REJECT`:拒绝匹配的数据包,并向发送方返回拒绝响应。

> 上述规则适用于经过 VPN 服务器转发的流量。如果目标 IP 属于 VPN 服务器本机,应根据实际情况在 `INPUT` 链中配置规则。

## 保存防火墙规则

规则添加后,需要使用系统对应的防火墙管理方式保存,才能在重启后继续生效。

### CentOS / RHEL

如果系统已安装并使用传统的 `iptables-services` 服务,可以执行:

```bash
sudo service iptables save
```

如果系统使用 firewalld,应通过 firewalld 配置持久规则。

### Ubuntu / Debian

安装 `iptables-persistent`:

```bash
sudo apt-get install iptables-persistent
```

保存当前规则:

```bash
sudo netfilter-persistent save
```

## 验证规则

### 查看规则

查看 `FORWARD` 链中的规则、顺序和命中计数:

```bash
sudo iptables -L FORWARD -v -n --line-numbers
```

确认已存在针对以下条件的拒绝规则:

- **源地址**:`192.168.2.0/24`
- **目标地址**:`192.168.1.100`
- **目标端口**:`8080`
- **协议**:TCP 和 UDP

### 测试连接

连接 OCServ VPN 后,尝试访问 `192.168.1.100` 的 `8080` 端口,并检查对应规则的命中计数是否增加。

TCP 和 UDP 需要分别测试;浏览器访问通常只能验证 TCP 连接,不能用于确认 UDP 规则是否生效。
Last modification:October 25, 2026
如果觉得我的文章对你有用,请随意赞赏