从 VirtualBox 上 proxmox 5.1 中的 LXC 容器访问互联网

从 VirtualBox 上 proxmox 5.1 中的 LXC 容器访问互联网

我已经在 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容器时,使用vmbr0as网络接口,LXC容器无法访问互联网,我可以ping到proxmox“master”(IP:172.16.1.1),但没有其他。

我也尝试使用 enp0s8 作为bridge_ports参数,结果相同。

/etc/network/interfacesLXC 容器(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

为了使虚拟机的路由工作,您需要

  1. 主机上正确的路由配置(这里似乎是这种情况)
  2. 一般通过启用路由/proc/sys/net/ipv4/ip_forward(可以使用发行版网络工具永久完成或直接在 中完成/etc/sysctl.*
  3. 允许数据包路由iptables(即filter/FORWARD链和/或其子链)

相关内容