从本地网络到达 lxd 容器

Par*_*aub 8 networking lxd

操作系统:Ubuntu 15.10
LXD:2.0.0.rc5

我想知道如何从同一本地网络上的另一台计算机访问容器。

我的 PC 的地址(LXD 主机):192.168.1.112 (enp3s0)
Xenial 容器:10.0.3.181 (eth0), 10.0.4.1 (lxcbr0)
其他 PC(Fedora 23):192.168.2.118 (wlp3s0)

我可以从另一台 PC ping 到 LXD 主机,否则。

Man*_*nwe 6

有几种不同的方法可以完成你想要的。

  1. 将所需端口从主机转发到来宾
  2. 路由网络
  3. 桥接设备

选项 1 和 2 需要在主机上启用 ip-forwarding:

# run time:
sudo sysctl -w net.ipv4.ip_forward=1

# permanent:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/30-virt-network
Run Code Online (Sandbox Code Playgroud)

如果您想访问来宾上的特定服务,例如 http(端口 80)(您使用主机 ip-address+port 访问来宾端口 80),则最简单的是 1,但您不能在同一端口上运行主机服务。

# on lxd host: (-i HOSTDEVICE to lan, usually enp3s0 or eth0)
sudo iptables -t nat -A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to 10.0.3.181:80
# making this permanent is left to the reader (because that depends on your choice of fw setup)
Run Code Online (Sandbox Code Playgroud)

选项 2 更棘手,取决于您可以修改网络的程度。

检查 ( sudo iptables -L -n) 是否表示链 FORWARD(策略接受)或sudo iptables -I FORWARD -s 192.168.2.118 -j ACCEPT明确允许。现在,要么在网络防火墙上将 10.0.3.0/24 路由​​到 192.168.1.112 主机,要么在 192.168.2.118 上测试路由。

sudo ip route add 10.0.3.181 via 192.168.1.112 dev wlp3s0
Run Code Online (Sandbox Code Playgroud)

第三个选项是将您的 lxd 访客作为局域网的一部分带到您的局域网。请参阅说明转换 eth0(在您的情况下为 enp3s0)以桥接如何执行此操作。简而言之:

  1. 在主机上创建桥接设备
  2. 添加eth0enp3s0到该桥
  3. 将主机地址设置为桥接(不是enp3s0
  4. 将 lxd 来宾设备绑定到该网桥

    stop network-manager
    brctl addbr br0
    brctl addif br0 enp3s0
    ifconfig enp3s0 up
    ifconfig br0 up
    dhclient br0
    lxc profile edit default
      - change lxcbr0 to br0
    
    Run Code Online (Sandbox Code Playgroud)