私のサーバーには次の内容のファイル/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
これにより、次のインターフェース構成が得られます。
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 ens3
...
ここまでは順調ですね。しかし、今、このインターフェイスに追加のセカンダリ静的IPとして10.0.0.250を追加する必要があります。それを行う最良の方法は何ですか?新しいファイル/etc/netplan/60-service-ip.yamlを作成しました:
network:
version: 2
ethernets:
ens3:
addresses:
- 10.0.0.5/24
- 10.0.0.250/24
これは機能するようですが、動的IPを静的IPとして再定義します。
コピー:
ソリューションは非常にシンプルで、静的IPアドレスを設定してDHCPを有効にするだけです。基本的には、設定にdhcp4: yes
を追加するだけです。
この構成では、プライマリ静的IPアドレスとセカンダリDHCP割り当てIPアドレスが与えられました。
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
dhcp6: no
addresses:
- 10.1.2.15/24
gateway4: 10.1.2.1
nameservers:
search:
- example.com
addresses: [10.1.2.10]
Ip address show enp0s3の結果は私に与えました:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 10.1.2.15/24 brd 10.0.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 10.1.2.96/24 brd 10.0.1.255 scope global secondary dynamic enp0s3
valid_lft 3224sec preferred_lft 3224sec
inet6 fe80::a00:27ff:fe20:2c40/64 scope link
valid_lft forever preferred_lft forever
アドレス10.1.2.96は、セカンダリダイナミックキーワードによって示される、セカンダリDHCP割り当てアドレスです。
これは実際にははるかに簡単です。次のようにdhcp4: true
を静的構成に追加するだけです(必要がない場合はv6を無効にします)。
network:
version: 2
ethernets:
ens3:
dhcp4: yes
dhcp6: no
addresses:
- 10.0.0.250/24
AzureでDHCPアドレスをセカンダリとして、静的アドレスをプライマリとして持っているという同じ問題がありました。 Azure仮想ネットワークはゲートウェイとネームサーバーの情報を提供するため、dhcpアドレスをプライマリとして残すことは重要です。
私はこの回避策を見つけました:
network:
version: 2
ethernets:
eth0:
dhcp4: true
addresses:
- 10.0.2.6/24 (IP acquired by DHCP)
- 10.0.2.21/24
match:
macaddress: 00:0d:3a:4f:45:f0
set-name: eth0
具体的には、Azureでは、Azureリソース側に静的IPアドレスを割り当てます。通常、これはdhcpによってゲストOSに取得されます。したがって、ゲストOSは動的IPとして扱いますが、Azureからは常に同じ静的IPを取得します。
上記では、セカンダリIPの前にdhcp IPを配置することを強制しました。
私の場合、期待どおりに機能しました。