Networking

從 VirtualBox 上 proxmox 5.1 中的 LXC 容器訪問 Internet

  • April 27, 2018

我在 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 容器時,使用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 安裝),它工作正常。

誰能告訴我允許容器訪問網際網路的網路配置中有什麼不正確或缺失的地方?

為了使來自 VM 的路由工作,您需要

  1. 主機上的正確路由配置(這裡似乎就是這種情況)
  2. 通常通過啟用路由/proc/sys/net/ipv4/ip_forward(可以使用發行版網路工具永久完成或直接在中完成/etc/sysctl.*
  3. 允許使用iptables(即filter/FORWARD鍊和/或其子)路由數據包

引用自:https://unix.stackexchange.com/questions/440282