我已经在 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“主机”(IP:172.16.1.1)但不能ping 到其他任何内容。
我也尝试使用 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
问题在于 debian 主机(proxmox 中的“master”)没有激活 ip_routing,因此执行以下命令一切开始正常:
echo 1 > /proc/sys/net/ipv4/ip_forward
所以现在,我得到(来自 lxc 容器):
# traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
1 172.16.1.1 (172.16.1.1) 0.978 ms 0.931 ms 0.911 ms
2 10.0.3.2 (10.0.3.2) 0.894 ms 0.810 ms 0.757 ms
3 * * *
4 1dot1dot1dot1.cloudflare-dns.com (1.1.1.1) 5.780 ms 6.463 ms 6.909 ms