我已经在 macOS (10.12) 的 VirtualBox 上安装了 Proxmox VE 5.1。
猜测操作系统 Debian Strech(Proxmox 是在 debian 上构建的),有 2 个“物理”网络接口(从 VirtualBox 配置),Host-Only
并且NAT
,我可以通过 NAT 接口访问互联网:
root@proxmox:~# traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
1 10.0.3.2 (10.0.3.2) 0.792 ms 0.694 ms 0.625 ms
2 1dot1dot1dot1.cloudflare-dns.com (1.1.1.1) 2.829 ms 2.818 ms 3.318 ms
debian 主机中的 /etc/network/interfaces 包含:
auto lo
iface lo inet loopback
auto enp0s3
iface enp0s3 inet static
address 192.168.56.101
netmask 255.255.255.0
auto enp0s8
iface enp0s8 inet static
address 10.0.3.15
netmask 255.255.255.0
gateway 10.0.3.2
#NAT
auto vmbr0
iface vmbr0 inet static
address 172.16.1.1
netmask 255.255.255.0
bridge_ports dummy1
bridge_stp off
bridge_fd 0
“访客”,debian 从两个接口(macOS IP:192.168.56.1、10.0.3.2)看到 macOS(“主机”)。
虚拟接口vmbr0
是为 proxmox LXC 容器创建的,我添加了一条 iptables 规则来将所有流量从 vmbr0 发送到该enp0s8
接口(VirtualBox 中的 NAT 接口)。
iptables -A POSTROUTING -s 172.16.1.0/24 -o enp0s8 -j MASQUERADE -t nat
这问题是当我在proxmox内创建一个LXC容器时,使用vmbr0
as网络接口,LXC容器无法访问互联网,我可以ping到proxmox“master”(IP:172.16.1.1),但没有其他。
我也尝试使用 enp0s8 作为bridge_ports
参数,结果相同。
/etc/network/interfaces
LXC 容器(Ubuntu 16.04)中的文件包含:
auto eth0
iface eth0 inet static
address 172.16.1.100
netmask 255.255.255.0
gateway 172.16.1.1
我在另一个 proxmox 服务器中有一个非常相似的配置(但在裸机中,而不是 VirtualBox 安装)并且它工作正常。
谁能告诉我网络配置中允许容器访问互联网的错误或缺失是什么?
答案1
为了使虚拟机的路由工作,您需要
- 主机上正确的路由配置(这里似乎是这种情况)
- 一般通过启用路由
/proc/sys/net/ipv4/ip_forward
(可以使用发行版网络工具永久完成或直接在 中完成/etc/sysctl.*
) - 允许数据包路由
iptables
(即filter/FORWARD
链和/或其子链)