从本地网络访问 lxd 容器

从本地网络访问 lxd 容器

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

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

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

我可以从另一台 PC ping 到 LXD 主机等等。

答案1

有几种不同的方法可以实现您的目标。

  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

如果您想要在客户机上访问特定服务(例如 http(端口 80)(您使用主机 ip 地址 + 端口访问客户机端口 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)

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

检查 ( sudo iptables -L -n) 是否显示链 FORWARD(策略 ACCEPT)或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

第三个选项是将您的 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
    

答案2

您需要告诉另一台计算机如何到达容器,因为另一台计算机与容器位于不同的子网中。也就是说,您需要设置“路由”。下面是您可以在另一台计算机上创建的示例路由。它说,“要到达容器 (.181),首先使用与主机 (eth0) 位于同一网络的设备通过主机 (.112)。如果另一台计算机使用不同的设备,则进行相应更改。请注意,此路由不是永久的;它将不是重启后仍可继续使用。Google 查找如何设置永久路由。

sudo ip route add 10.0.3.181 via 192.168.1.112 dev eth0

答案3

另一种方法是安装rinetd并在里面/etc/rinetd.conf指定转发:

192.168.1.112    80      10.0.3.181    80

然后重新启动rinetd

我认为它更方便,因为您可以随时检查您正在转发哪些端口,并根据需要向文件添加注释。docker如果您绑定到,您也可以以相同的方式使用它127.0.0.1(例如:docker ... -p 127.0.0.1:80:80 ...UFW 将按预期工作。

相关内容