以下代码及其文档是使用 ChatGPT 模型 (o1-preview) 生成的。前段时间我曾考虑过自己编写这段代码,但一直没有时间这样做。这是 ChatGPT 编写的代码以及概述。我将不胜感激任何关于如何进一步改进或是否有任何错误的反馈。
代码获取位置:
https://pastebin.com/cdrxhUSU
nat_manager.py快速入门指南
nat_manager.py是一个 Python 脚本,旨在管理 Proxmox 环境中 VM 和容器的 NAT(网络地址转换)和端口转发规则。该脚本用于配置 NAT 规则,并允许轻松添加、删除、列出、更新、导出和导入端口映射。iptables
本指南提供了使用脚本设置网络的分步说明,并提供了常见操作的示例。
Proxmox 中的网络设置
要有效使用,您需要在 Proxmox 服务器上设置桥接网络 ()。此网桥将使用私有 IP 范围并管理 VM 和容器的 NAT 和端口转发。nat_manager.pyvmbr1
1. 配置网桥网络 (vmbr1)
编辑文件以配置网桥网络接口 :/etc/network/interfacesvmbr1
sudo nano /etc/network/interfaces
添加以下配置:
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o <YOUR_PUBLIC_INTERFACE> -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o <YOUR_PUBLIC_INTERFACE> -j MASQUERADE
<YOUR_PUBLIC_INTERFACE>:将此 ID 替换为具有公有 IP 的网络接口(例如 )。enp0s3
2. 启用 IP 转发
要确保永久启用 IP 转发,请将以下行添加到:/etc/sysctl.conf
net.ipv4.ip_forward = 1
应用更改:
sudo sysctl -p
3. 重新启动网络服务
重新启动网络服务以应用更改:
sudo systemctl restart networking
4. 安装所需的软件包
要确保规则在重新启动、安装和其他必需的软件包后仍然存在,请执行以下操作:iptablesiptables-persistent
sudo apt-get update
sudo apt-get install iptables-persistent python3 python3-pip sqlite3 -y
iptables-persistent:允许在启动时保存和恢复规则。iptablespython3和sqlite3:运行脚本所必需的。nat_manager.py
使用 nat_manager.py
使用 Python3 运行。以下是管理 VM 和容器的 NAT 和端口转发规则的各种使用说明。nat_manager.py
python3 nat_manager.py -h
usage: nat_manager.py [-h]
{add,remove,list,update,reserve,unreserve,list-reserved,export,import,backup,restore,rebuild-db}
...
NAT Manager Script
positional arguments:
{add,remove,list,update,reserve,unreserve,list-reserved,export,import,backup,restore,rebuild-db}
Available actions
add Add port mappings for a container
remove Remove port mappings for a container
list List port mappings
update Update port mappings for a container
reserve Reserve ports for the host machine
unreserve Unreserve ports
list-reserved List reserved ports
export Export port mappings to a JSON file
import Import port mappings from a JSON file
backup Backup current configuration
restore Restore configuration from backup
rebuild-db Rebuild the database from existing iptables rules
options:
-h, --help show this help message and exit
1. 添加端口映射
要为具有内部 IP 地址的 VM 或容器添加 NAT 端口转发规则(例如 ):10.0.0.5
sudo python3 nat_manager.py add <container_ip> --mode <automatic|manual> --num-ports <N>
- 参数
<container_ip>:VM/容器的内部 IP 地址(例如,)。10.0.0.5--mode:添加端口的模式(默认)或 .automaticmanual--num-ports <N>:要转发的端口数(默认值:)。6
示例:
- 自动模式:
sudo python3 nat_manager.py add 10.0.0.5 --mode automatic --num-ports 4此命令自动分配 4 个外部端口(从 开始),以将流量转发到标准内部端口(例如、、、、 )。
500002280443808010.0.0.5 - 手动模式:
sudo python3 nat_manager.py add 10.0.0.5 --mode manual --external-ports 50000 50001 --internal-ports 22 80 --protocols tcp udp此命令手动分配外部端口 (TCP) 和 (UDP) 以转发到上的内部端口 (SSH) 和 (HTTP)。
5000050001228010.0.0.5
2. 删除端口映射
要删除与特定容器 IP 关联的所有端口转发规则,请执行以下操作:
sudo python3 nat_manager.py remove <container_ip>
- 示例:
sudo python3 nat_manager.py remove 10.0.0.5此命令将删除与 IP 关联的所有端口映射。
10.0.0.5
3. 列出当前端口映射
要列出所有当前端口映射或特定容器 IP 的端口映射,请执行以下操作:
sudo python3 nat_manager.py list [container_ip]
- 示例:
- 列出所有映射:
sudo python3 nat_manager.py list列出 Proxmox 服务器上当前配置的所有端口映射。
- 列出特定容器的映射:
sudo python3 nat_manager.py list 10.0.0.5列出具有 IP 的容器的端口映射。
10.0.0.5
4. 更新端口映射
要更新 VM 或容器的现有端口映射,请执行以下操作:
sudo python3 nat_manager.py update <container_ip>
- 示例:
- 交互模式:
sudo python3 nat_manager.py update 10.0.0.5此命令将提示您更新当前映射到的每个外部端口的内部端口或协议。将 input 留空以保留当前映射。
10.0.0.5- 非交互模式:
sudo python3 nat_manager.py update 10.0.0.5 --external-ports 50000 50001 --internal-ports 2222 8081 --protocols tcp udp此命令将外部端口更新为转发到内部端口 (TCP) 和转发到 (UDP)。
50000222250001808110.0.0.5
5. 导出和导入端口映射
您可以将当前端口映射导出到 JSON 文件以进行备份,也可以从 JSON 文件导入它们。
- 导出端口映射:
sudo python3 nat_manager.py export /path/to/export.json此命令将当前端口映射导出到 。
export.json - 导入端口映射:
sudo python3 nat_manager.py import /path/to/export.json此命令从 导入端口映射。
export.json
6. 备份和恢复配置
您可以备份 和 端口映射的当前配置,也可以从备份中恢复。iptables
- 备份当前配置:
sudo python3 nat_manager.py backup这将创建当前规则和端口映射数据库的备份。
iptables - 从备份恢复配置:
sudo python3 nat_manager.py restore <timestamp>替换为所需的备份时间戳(例如 )。
<timestamp>backup_20230917123045
7. 根据现有 iptables 规则重建数据库
如果 SQLite 数据库丢失或与规则不同步,您可以重新构建它:iptables
sudo python3 nat_manager.py rebuild-db
此命令扫描现有规则并重建数据库以确保一致性。iptables
重要说明
- IP 转发:通过添加并运行 来确保启用 IP 转发。
net.ipv4.ip_forward = 1/etc/sysctl.confsudo sysctl -p - 保存
iptables规则:为确保规则在重新启动后仍然存在,请使用 和 。iptables-save > /etc/iptables/rules.v4iptables-restore < /etc/iptables/rules.v4 - 检查
iptables-persistent:确保已安装并启用以管理规则持久性:iptables-persistentsudo apt-get install iptables-persistent -y sudo netfilter-persistent save
Proxmox 中 VM/容器的网络配置
在 Proxmox 中创建将使用 NAT 的 VM 或容器时:
- 分配内部 IP 地址:
- 在子网中分配一个 IP,例如 .
vmbr110.0.0.5 - 此 IP 将用于内部通信和 NAT 端口转发。
- 在子网中分配一个 IP,例如 .
- 连接到
vmbr1网桥:- 确保已连接 VM/容器网络接口以使用由 NAT 管理的内部网络。
vmbr1 - 在 Proxmox 中,在创建或配置 VM/容器时选择作为网桥。
vmbr1
- 确保已连接 VM/容器网络接口以使用由 NAT 管理的内部网络。
- 配置网关(可选):
- 将网关设置为 (地址) 以通过 Proxmox 主机路由所有出站流量。
10.0.0.1vmbr1
- 将网关设置为 (地址) 以通过 Proxmox 主机路由所有出站流量。
此设置允许 VM/容器使用 IP 在内部进行通信,并通过 定义的端口转发规则从外部访问。10.0.0.xnat_manager.py