跳转到主要内容
农光亮
LXD

LXD 网络配置实战:网桥与端口转发

容器要对外提供服务,网络配置是绕不开的一环。这篇笔记记录 LXD 默认网桥、自定义网桥和端口转发的三种玩法。

正文

LXD 装好之后,容器默认自动接入 lxdbr0 网桥并获取内网 IP。但要让外部访问容器里的服务,就得动动网络了。

默认网桥 lxdbr0

lxd init 初始化时创建的默认网桥,容器自动通过 DHCP 获得 IP:

lxc list            # 查看容器 IP
lxc config device show my-container   # 查看设备信息

容器之间可以直接互通,但外部网络默认访问不到容器。

方式一:端口转发(最简单)

lxc config device add 把宿主机的端口转发进容器:

# 把宿主机 8080 端口转发到容器的 80 端口
lxc config device add my-container web proxy \
  listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80

转发规则会持久保存,容器重启后依然有效。适合单容器场景。

方式二:自定义网桥

创建新的网桥,让容器拥有独立网段:

lxc network create mybridge ipv4.address=10.50.0.1/24 ipv6.address=none
lxc launch ubuntu:24.04 my-container --network mybridge

方式三:容器内开防火墙端口

容器里如果开了 ufw,别忘了放行:

lxc exec my-container -- ufw allow 80/tcp
lxc exec my-container -- ufw allow 443/tcp

实战:nginx 反代到博客容器

我在宿主机用 nginx 做反向代理,统一入口:

server {
    listen 80;
    server_name blog.example.com;
    location / {
        proxy_pass http://10.129.26.127:3000;
        proxy_set_header Host $host;
    }
}

常见坑

  1. IPv6 干扰:不需要 IPv6 时,在网桥配置里设 ipv6.address=none
  2. 端口冲突:转发端口前先确认宿主机端口没被占用
  3. 防火墙:宿主机 ufw 也要放行对应端口,ufw allow 8080

小结

个人服务器场景,端口转发 + nginx 反代是最省心的组合,配置简单、便于统一管理证书和日志。