nat_manager.py – 管理 Proxmox VM 和容器的 NAT 端口转发

以下代码及其文档是使用 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:允许在启动时保存和恢复规则。iptables
  • python3 和 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-persistent
    sudo apt-get install iptables-persistent -y
    sudo netfilter-persistent save
    

Proxmox 中 VM/容器的网络配置

在 Proxmox 中创建将使用 NAT 的 VM 或容器时:

  1. 分配内部 IP 地址
    • 在子网中分配一个 IP,例如 .vmbr110.0.0.5
    • 此 IP 将用于内部通信和 NAT 端口转发。
  2. 连接到 vmbr1 网桥
    • 确保已连接 VM/容器网络接口以使用由 NAT 管理的内部网络。vmbr1
    • 在 Proxmox 中,在创建或配置 VM/容器时选择作为网桥。vmbr1
  3. 配置网关(可选):
    • 将网关设置为 (地址) 以通过 Proxmox 主机路由所有出站流量。10.0.0.1vmbr1

此设置允许 VM/容器使用 IP 在内部进行通信,并通过 定义的端口转发规则从外部访问。10.0.0.xnat_manager.py

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇