Ubuntu
LXC 容器的外部 IP 配置
我租了一台專用伺服器,想使用 LXC 而不是 KVM。我想為每個容器購買 IP。現在我有兩個外部IP:
- 193.XX30/32
- 213.XX31/32
我更喜歡路由解決方案而不是 NAT。
我的最後一次嘗試是這樣的:
------------------- | INTERNET | ------------------- | V ---------------------------------------------- | ------------------- ------- [HOST] | | | br0: 193.X.X.30 | <--- | em1 | | | ------------------- ------- | | | | | V | | ------------------- | | | vethXXXX | | | ------------------- | | | | | V | | -------------------------------------- | | | -------------------- [CONTAINER] | | | | | eth0: 213.X.X.31 | | | | | -------------------- | | | | | | | -------------------------------------- | ----------------------------------------------
我的主機上的網路配置:
auto br0 iface br0 inet static bridge_ports em1 bridge_fd 0 address 193.X.X.30 netmask 255.255.255.0 gateway 193.X.X.1 dns-nameservers 8.8.8.8 8.8.4.4
我的容器配置:
lxc.network.type = veth lxc.network.link = br0 lxc.network.ipv4 = 213.X.X.31/24 lxc.network.ipv4.gateway = 213.X.X.1
我的容器網路配置:
auto eth0 iface eth0 inet static address 213.X.X.31 netmask 255.255.255.0 gateway 213.X.X.1 dns-nameservers 8.8.8.8 dns-nameservers 8.8.4.4
我沒有成功直接連接容器。容器成功託管 Web/Mail/DNS 等服務的正確配置/拓撲應該是什麼。
我不知道這是正確的方法或最佳解決方案,但它可以在沒有 NAT 的情況下工作。網路拓撲相同。每個容器都有一個物理 NIC (em1) 和多個 IP。也許以後我可以買一個子網。但現在我會購買 4 - 5 個 IP。
------------------- | INTERNET | ------------------- | V ---------------------------------------------- | ------------------- ------- [HOST] | | | br0: 193.X.X.30 | <--- | em1 | | | ------------------- ------- | | | | | V | | ------------------- | | | vethMyContainer | | | ------------------- | | | | | V | | -------------------------------------- | | | -------------------- [CONTAINER] | | | | | eth0: 213.X.X.31 | | | | | -------------------- | | | | | | | -------------------------------------- | ----------------------------------------------
這是我在主機(/etc/network/interfaces)上的網路配置:
auto lo iface lo inet loopback auto br0 iface br0 inet static bridge_ports em1 bridge_fd 0 address 193.X.X.30 netmask 255.255.255.0 gateway 193.X.X.1 dns-nameservers 8.8.8.8 8.8.4.4
容器的配置文件(/var/lib/lxc/my-container/config):
lxc.include = /usr/share/lxc/config/ubuntu.common.conf lxc.rootfs = /var/lib/lxc/my-container/rootfs lxc.utsname = my-container lxc.arch = amd64 lxc.network.type = veth lxc.network.veth.pair = vethMyContainer lxc.network.link = br0 lxc.network.ipv4 = 213.X.X.31/32 lxc.network.ipv4.gateway = 193.X.X.1 lxc.network.script.up = /var/lib/lxc/my-container/script-up.sh lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:aa:bb:cc lxc.cgroup.memory.limit_in_bytes = 2048M
我們必須命名我們的 veth 設備。因為我們將在腳本文件中使用名稱。包不能自動從 br0 路由到 veth 設備。所以我添加了一個路由規則,我的 ARP 表無法自動更新。所以我添加了一個靜態 ARP 記錄。
腳本文件(/var/lib/lxc/my-container/script-up.sh):
#!/bin/bash route del 213.X.X.31 br0 route add 213.X.X.31 br0
我的容器上的網路配置:
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual
所以我可以不使用 NAT 直接 ping 到我的容器。如果我找到不使用 arp 和 route 命令的方法,我會更新答案。