在 Oracle Cloud + Proxmox VE 中为 LXC 分配独立公网 IPv4
本文最后更新于2 天前,其中的信息可能已经过时,如有错误请发送邮件到yd-neply@foxmail.com

在 Oracle Cloud + Proxmox VE 中为 LXC 分配独立公网 IPv4

前言

本文记录如何在 Oracle Cloud Infrastructure(OCI)ARM 实例中添加一块额外 VNIC,并通过 Proxmox VE 宿主机的策略路由和 iptables,为一个 LXC 容器分配独立公网 IPv4。

本文使用的实际环境如下:

项目配置
PVE 版本Proxmox VE 9.2.9
宿主系统Debian 13 / ARM64
主网卡enp0s3
PVE 容器网桥vmbr0
容器网段10.10.10.0/24
新增 OCI VNICvnic2026080708
新增 VNIC 在宿主中的名称enp1s0
VNIC MAC02:00:17:02:64:BB
VNIC 私网 IP10.0.0.43
VNIC 公网 IP158.180.68.192
LXC 容器 ID108
LXC 主机名debian-vnic
LXC 内网 IP10.10.10.109

文中不包含任何宿主机或容器密码。


一、网络实现原理

OCI 不会直接把公网 IPv4 配置到 Linux 网卡上。公网地址 158.180.68.192 实际由 OCI 映射到 VNIC 的私网地址 10.0.0.43

完整流量路径如下:

互联网客户端
    │
    ▼
158.180.68.192(OCI 公网 IP)
    │ OCI 公网 NAT
    ▼
10.0.0.43(enp1s0)
    │ PVE 宿主 DNAT
    ▼
10.10.10.109(LXC CT 108)

容器访问互联网时走反向路径:

LXC 10.10.10.109
    │ PVE 宿主 SNAT
    ▼
10.0.0.43(enp1s0)
    │ OCI 公网 NAT
    ▼
158.180.68.192

因此,容器内部仍使用 10.10.10.109,但从公网访问时使用 158.180.68.192,容器主动访问互联网时显示的出口地址也会是 158.180.68.192

这种方案不会把 OCI VNIC 直接桥接给 LXC,可以避免 OCI 的 MAC/IP 校验与 Linux 同网段多网卡路由冲突。


二、OCI 控制台准备

在 OCI 控制台中完成以下操作:

  1. 为 PVE 实例创建并附加额外 VNIC。
  2. 确认 VNIC 与 PVE 实例位于可通信的 VCN 和子网中。
  3. 为 VNIC 分配私网 IPv4,例如:
   10.0.0.43
  1. 为该私网 IP 关联临时或保留公网 IPv4,例如:
   158.180.68.192
  1. 在 OCI Security List 或 NSG 中放行需要的入站端口,例如 SSH:
   Source: 0.0.0.0/0
   Protocol: TCP
   Destination port: 22

生产环境不建议长期允许任意来源访问 SSH,最好将来源限制为自己的固定公网 IP。


三、确认宿主机识别到了新 VNIC

登录 PVE 宿主机,执行:

ip -br link
ip -br addr

本例新增网卡为:

enp1s0  DOWN  02:00:17:02:64:aa

确认 MAC 地址与 OCI 控制台中显示的 VNIC MAC 一致:

02:00:17:02:64:AA

如果网卡名称不确定,也可以执行:

for dev in /sys/class/net/*; do
    printf '%s  ' "$(basename "$dev")"
    cat "$dev/address"
done

四、创建 LXC 容器

本例使用已经下载到 PVE 的 Debian 13 ARM64 模板:

local:vztmpl/debian-13-trixie-default_20260806_arm64.tar.xz

创建 CT 108:

pct create 108 \
  local:vztmpl/debian-13-trixie-default_20260806_arm64.tar.xz \
  --hostname debian-vnic \
  --arch arm64 \
  --ostype debian \
  --storage local \
  --rootfs local:8 \
  --cores 1 \
  --memory 512 \
  --swap 512 \
  --features nesting=1 \
  --unprivileged 1 \
  --net0 name=eth0,bridge=vmbr0,firewall=1,ip=10.10.10.109/24,gw=10.10.10.1,type=veth \
  --nameserver '1.1.1.1 8.8.8.8' \
  --searchdomain local \
  --password '请替换为强密码' \
  --start 1

检查容器状态:

pct status 108
pct config 108

五、修正 Debian 模板的静态网络

部分 LinuxContainers Debian 模板自带 DHCP 网络配置,可能覆盖 PVE 写入的静态地址。可以在容器内显式写入 systemd-networkd 配置:

“`bash
pct exec 108 — bash -c ‘cat > /etc/systemd/network/eth0.network <<EOF
[Match]
Name=eth0

[Network]
Address=10.10.10.109/24
Gateway=10.10.10.1
DNS=1.1.1.1
DNS=8.8.8.8

文末附加内容
暂无评论

发送评论 编辑评论


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