1. 环境假设
- 宿主机公网 IP:
154.19.xx.xx/24 - 公网网关:
154.19.xx.1 - 宿主机物理网卡:
ens17 - 宿主机网桥:
vmbr0 - 容器使用内网网段:
192.168.100.0/24 - NAT 出口:宿主机公网 IP
154.19.xx.xx
2. 宿主机网络配置
编辑 /etc/network/interfaces,配置如下:
auto loiface lo inet loopback# 物理网卡,不直接拿 IPauto ens17iface ens17 inet manual# 公网桥接,同时增加一个内网网关auto vmbr0iface vmbr0 inet static address 154.19.xx.xx/24 gateway 154.19.xx.1 bridge_ports ens17 bridge_stp off bridge_fd 0 # 给容器提供内网网关 post-up ip addr add 192.168.100.1/24 dev vmbr0 pre-down ip addr del 192.168.100.1/24 dev vmbr0应用配置:
ifreload -a3. 宿主机启用 NAT 转发
3.1 开启 IPv4 转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.confsysctl -p3.2 关闭 ICMP Redirect 与 rp_filter
cat >> /etc/sysctl.conf <<EOFnet.ipv4.conf.all.send_redirects=0net.ipv4.conf.default.send_redirects=0net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0EOFsysctl -p3.3 添加 SNAT 规则
iptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o vmbr0 -j SNAT --to-source 154.19.xx.xx# 放通内外转发iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPTiptables -A FORWARD -d 192.168.100.0/24 -j ACCEPT持久化规则:
apt install -y iptables-persistentnetfilter-persistent save或推荐使用 nftables:
table ip nat { chain postrouting { type nat hook postrouting priority 100; policy accept; ip saddr 192.168.100.0/24 oifname "vmbr0" snat to 154.19.xx.xx }}systemctl enable --now nftables4. 容器网络配置
编辑 /etc/pve/lxc/100.conf(假设容器 ID = 100):
net0: name=eth0,bridge=vmbr0,ip=192.168.100.100/24,gw=192.168.100.1进入容器后,确认:
ip aip routecat /etc/resolv.conf建议 /etc/resolv.conf 设置:
nameserver 1.1.1.1nameserver 8.8.8.85. 验证
容器内执行:
ping -c 3 192.168.100.1 # 宿主机网关ping -c 3 8.8.8.8 # 公网 IPping -c 3 google.com # 域名解析宿主机查看 NAT 命中:
iptables -t nat -L POSTROUTING -n -vSNAT 那行的 pkts/bytes 应该随着容器访问递增。
✅ 总结
- 公网 IP 只配置在
vmbr0,物理网卡ens17不要配 IP。 vmbr0既有公网地址,又额外添加192.168.100.1作为容器网关。- NAT 出口必须指定
vmbr0,否则不会生效。 - 单公网 IP 场景下,建议使用 SNAT 固定公网 IP,比 MASQUERADE 更稳定。
评论 (0)