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;
}
}
常见坑
- IPv6 干扰:不需要 IPv6 时,在网桥配置里设
ipv6.address=none - 端口冲突:转发端口前先确认宿主机端口没被占用
- 防火墙:宿主机 ufw 也要放行对应端口,
ufw allow 8080
小结
个人服务器场景,端口转发 + nginx 反代是最省心的组合,配置简单、便于统一管理证书和日志。