我的服务器有一个文件 /etc/netplan/50-cloud-init.yaml ,内容如下:
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: fa:**:**:**:**:**
set-name: ens3
Run Code Online (Sandbox Code Playgroud)
这导致以下接口配置:
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
link/ether fa:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global dynamic …
Run Code Online (Sandbox Code Playgroud) 我们在ubuntu-18.04
虚拟化环境中使用模板。因此,在创建模板之前,我们总是清空/etc/machine-id
文件,以便在第一次启动时重新创建。
问题在于,如果同时启动多个基于 ubuntu-18 的 VM,systemd-machine-id-setup
将为所有这些VM生成相同的 ID,从而导致 IP 重复。我检查了这些服务器,它们在/etc/machine-id
文件中都有相同的内容。
如果机器按时间间隔开机,则会分配不同的 IP,因此我假设systemd-machine-id-setup
是根据当前时间(可能)生成的。由于上图中的问题,这对我们来说是不可接受的。
有没有办法让操作系统/etc/machine-id
基于替代二进制文件生成启动时?
--- 更新 1 ---
在@GeraldSchneider 的提示中,我从 netplan 切换回 ifdownup并且 IP 停止复制,所以这绝对是一个 netplan 问题。
即使这可以解决问题,我很好奇是否有办法设置生成/etc/machine-id
文件的替代方法,以便使用 netplan 不会发生重复。
我这个周末更新了内核,现在使用的是 5.3.1。
christopher@HAL4:~$ uname -r
5.3.1-050301-generic
Run Code Online (Sandbox Code Playgroud)
我需要登录服务器,但我无法再通过主机名登录。例如,我有一个服务器“web4”,它的本地 IP 是 192.168.64.140。如果我运行挖掘:
christopher@HAL4:~$ dig web4
; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> web4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1580
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;web4. IN A
;; ANSWER SECTION:
web4. 0 IN A 192.168.64.140
;; Query time: 0 msec
;; SERVER: 192.168.3.222#53(192.168.3.222) …
Run Code Online (Sandbox Code Playgroud) 我正在使用以下简单的网络拓扑设置 4 x RPi 集群:
所有 4 个 RPi 节点都具有最新的 Ubuntu Server LTS 20.04 操作系统。rpi1 是我的主/网关节点。我在 rpi1 上执行了以下操作:
systemd-resolved
并手动创建/etc/resolv.conf
值nameserver 127.0.0.1
dnsmasq
如下/etc/dnsmasq.conf
:# Basics:
interface=eth0
listen-address=127.0.0.1
# DHCP Settings (MAC Addresses removed)
dhcp-range=10.0.0.1,10.0.0.128,12h
dhcp-host=XX:XX:XX:XX:XX:XX,rpi1,10.0.0.1
dhcp-host=XX:XX:XX:XX:XX:XX,rpi2,10.0.0.2
dhcp-host=XX:XX:XX:XX:XX:XX,rpi3,10.0.0.3
dhcp-host=XX:XX:XX:XX:XX:XX,rpi4,10.0.0.4
dhcp-option=option:router,10.0.0.1
dhcp-option=option:dns-server,10.0.0.1
dhcp-option=option:netmask,255.255.255.0
# Forward to nameservers:
server=8.8.8.8
server=8.8.4.4
# Misc
bind-interfaces
domain-needed
bogus-priv
expand-hosts
Run Code Online (Sandbox Code Playgroud)
/etc/hosts
:10.0.0.1 rpi1
10.0.0.2 rpi2
10.0.0.3 rpi3
10.0.0.4 rpi4
Run Code Online (Sandbox Code Playgroud)
此设置似乎可以作为 …
netplan ×4
ubuntu-18.04 ×2
dhcp ×1
dnsmasq ×1
networking ×1
resolv.conf ×1
static-ip ×1
ubuntu ×1