Networking
從 VirtualBox 上 proxmox 5.1 中的 LXC 容器訪問 Internet
我在 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
鍊和/或其子)路由數據包