我在 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
“guest”,debian 从两个接口(macOS IP:192.168.56.1、10.0.3.2)看到 macOS(“host”)。
虚拟接口是为 proxmox LXC 容器创建的vmbr0
,我添加了一个 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 安装),它工作正常。
谁能告诉我允许容器访问互联网的网络配置中有什么不正确或缺失的地方?
为了使来自 VM 的路由工作,您需要
/proc/sys/net/ipv4/ip_forward
(可以使用发行版网络工具永久完成或直接在中完成/etc/sysctl.*
)iptables
(即filter/FORWARD
链和/或其子级)路由数据包