我有一台 Debian 10 服务器,它通过 DHCP 获取其 IPv4-v6,也可以将其配置为静态:
root@host:~# ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 45.76.XX.XX netmask 255.255.254.0 broadcast 45.76.XX.255
inet6 2001:19f0:XXXX:XXX:XXXX:XXX:XXXX:XXXX prefixlen 64 scopeid 0x0<global>
inet6 fe80::5400:2ff:fecf:999b prefixlen 64 scopeid 0x20<link>
ether 56:00:XX:XX:XX:XX txqueuelen 1000 (Ethernet)
RX packets 113 bytes 14499 (14.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 114 bytes 12413 (12.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 24 bytes 1896 (1.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24 bytes 1896 (1.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我知道如何配置具有私有 IPv4 地址的 nat-ed LXC 实例。但在这个新系统中,我希望创建一个 LXC 实例,并为其分配主机的主要公共 IPv4 地址。这可能吗?当主机的 IPv4 被移除并分配给容器时,我可以使用其 IPv6 通过 SSH 进入主机。
提前感谢您的所有帮助。
答案1
如果您的 LXC 网络使用的是第 2 层模式(例如 bridge 或 macvlan),则很容易实现。这会将容器的命名空间与主机放在同一个第 2 层网络上,您可以以最明显的方式完成其余操作:从主机中删除 IP 地址并将其添加到容器中。(如果必须使用 DHCP 分配地址,则容器只需运行 DHCP 客户端即可。)
(然而这需要容器的本地网络的 DHCP 服务器需要知道 MAC 地址或 DHCP 客户端 ID。如果这是个问题,那么您可能需要为主机分配一个自定义 MAC 地址,并为容器提供主机的 MAC。)
例如,如果您想使用桥接模式,请首先创建一个标准 Linux 桥接器(本例中为命名br0
),并将您的以太网接口作为成员。使其永久化非常依赖于发行版(使用 ifcfg 或 /etc/network/interfaces 或 systemd-networkd),但暂时的可以使用以下方式进行配置:
ip link add br0 type bridge
ip link set br0 up
ip link set ens3 master br0
注意:如果你只能远程访问主机服务器,那么最好使用 KVM 或串行控制台在进行此类更改时。
那么你的 LXC 配置可能如下所示:
lxc.net.1.type = veth
lxc.net.1.flags = up
lxc.net.1.link = br0
lxc.net.1.hwaddr = 02:00:xx:yy:zz:tt
如果需要静态 IP 配置:
lxc.net.1.ipv4.address = 45.76.XX.XX/23
lxc.net.1.ipv4.gateway = 45.76.YY.YY
lxc.net.1.ipv6.address = 2001:19f0:X:X:X:X:X:X/64
lxc.net.1.ipv6.gateway = 2001:19f0:X:X::1
如果您想使用 DHCP 和/或 SLAAC,那么只需忽略地址/网关设置并在容器上安装标准 DHCP 客户端。
一旦启动容器,ip link ls master br0
就会bridge link
显示第二个桥接端口。
注意:我听说 macvlan 模式提供了更好的性能,但我不知道如何配置它。另外,它似乎要求主机还使用 macvlan 以便能够与其自己的客户进行通信。
如果你必须使用路由模式,仍然可以用大致相同的方式实现,但容器将不是能够使用 DHCP,并且主机还需要运行 Proxy-ARP 来假装 IP 地址仍然“在链接中”,尽管它被分配给了另一个系统。(路由器不会转发 ARP 请求。)如果 DHCP 是强制性的,那么主机可能需要特殊的 DHCP 客户端配置才能获取地址,而无需实际将其分配给接口。