Ubuntu Server 18.04を実行しているマシンがあります。ネットワークはNetplanを使用して構成されているため、/etc/netplan/01-netcfg.yaml
に次の構成があります。
network:
version: 2
renderer: networkd
ethernets:
enp1s0f0:
optional: false
addresses:
- 10.0.0.1/24
wifis:
wlp2s0:
optional: true
dhcp4: yes
access-points:
[...]
enp1s0f0
は、起動中または起動していない(起動時など)デバイスに接続されています。このインターフェイスでDHCPサーバーを実行したい。
問題は、起動時に数分遅れてこのメッセージが表示されることです。
A start job is running for Wait for Network to be Configured
最終的にタイムアウトになり、ブートは続行されますが、enp1s0f0
が設定または起動されることはありません。 ip link show enp1s0f0
の結果:
2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff
NO-CARRIER
の意味がわからないが、関連がある場合は、Sudo lspci -v
の出力を次に示します。
01:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01)
Subsystem: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at a0400000 (64-bit, prefetchable) [size=64K]
Memory at a0410000 (64-bit, prefetchable) [size=64K]
Capabilities: [48] Power Management version 3
Capabilities: [50] Vital Product Data
Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
Capabilities: [ac] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Device Serial Number 00-00-10-dd-b1-ef-65-21
Capabilities: [150] Power Budgeting <?>
Capabilities: [160] Virtual Channel
Capabilities: [1b0] Latency Tolerance Reporting
Kernel driver in use: tg3
Kernel modules: tg3
接続したデバイスの電源をオンにすると、十分なenp1s0f0
が表示されます:
2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff
しかし、この時点では役に立たない-ブート時にenp1s0f0
no upで起動できなかったため、DHCPサーバーは機能しません。 enp1s0f0
を起動して構成する必要がありますが、これが静的IP構成の要点だと思いました。さらに奇妙なのは、ダウンしていても常にIPv6アドレスを持っていることです。
2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff
inet6 fe80::12dd:b1ff:feef:6521/64 scope link
valid_lft forever preferred_lft forever
Netplanのデバッグ出力を確認すると、次のように表示されます。
$ Sudo netplan --debug apply
** (generate:1555): DEBUG: 20:39:27.253: Processing input file //etc/netplan/01-netcfg.yaml..
** (generate:1555): DEBUG: 20:39:27.254: starting new processing pass
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: adding wifi AP 'Jeff Winger's Wireless Hairbrush'
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: enp1s0f0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: Generating output files..
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: Creating wpa_supplicant configuration file run/netplan/wpa-wlp2s0.conf
** (generate:1555): DEBUG: 20:39:27.254: Creating wpa_supplicant service enablement link /run/systemd/system/multi-user.target.wants/[email protected]
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition wlp2s0 is not for us (backend 1)
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition enp1s0f0 is not for us (backend 1)
DEBUG:netplan generated networkd configuration exists, restarting networkd
DEBUG:no netplan generated NM configuration exists
DEBUG:replug enp1s0f0: unbinding 0000:01:00.0 from /sys/bus/pci/drivers/tg3
DEBUG:replug enp1s0f0: rebinding 0000:01:00.0 to /sys/bus/pci/drivers/tg3
DEBUG:device wlp2s0 operstate is up, not replugging
DEBUG:netplan triggering .link rules for wlp2s0
DEBUG:device lo operstate is unknown, not replugging
DEBUG:netplan triggering .link rules for lo
isc-dhcp-server
の私の構成は、/etc/default/isc-dhcp-server
に以下を含めることです。
INTERFACESv4="enp1s0f0"
...および/etc/dhcp/dhcpd.conf
を含む(その他のもの):
subnet 10.0.0.0 netmask 255.255.255.0 {
...
}
理論的には、これはenp1s0f0
でDHCPを提供するはずです。ただし、enp1s0f0
は呼び出されないため、DHCPサーバーは起動に失敗します。
No subnet declaration for enp1s0f0 (no IPv4 addresses).
** Ignoring requests on enp1s0f0. If this is not what
you want, please write a subnet declaration
in your dhcpd.conf file for the network segment
to which interface enp1s0f0 is attached. **
Not configured to listen on any interfaces!
これはifupdown
の下では問題ではありませんでした(ケーブルの反対側に何かがあるかどうかに関係なく、ブート時にenp1s0f0
が表示されない理由はわかりません。静的IPを持つことの全体的なポイント)。 Netplanで動作させることは可能ですか?または、enp1s0f0
が起動しているときにDHCPサーバーを起動することは可能ですか?
https://github.com/CanonicalLtd/netplan/pull/34 で解決されるバグに当たっているように見えます-現在、デバイスはキャリアがある場合のみ設定されますが、その要件はなくなります。
当面の間は、systemd-networkd
を使用してデバイスを直接構成することで、おそらくこれを修正できます。 netplan構成からenp1s0f0
スタンザを削除し、/etc/systemd/network/10-enp1s0f0.network
に次のような(テストされていない)systemd構成を追加します。
[Match]
Name=enp1s0f0
[Link]
RequiredForOnline=no
[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24
キービットは、プルリクエストから直接プルしたConfigureWithoutCarrier
です。
(netplanが生成するものを確認し、そこから進むことができます-ファイルは/run/systemd/network
にあります。)
または、netplanとifupdownが共存できるという事実を利用して、apt install ifupdown
を構成し、enp1s0f0
をifupdownで構成できます。
Netplanには、ifaceにリンクがあるかどうかを判断し、リンクがアップしている場合にのみ自動的にアドレスを割り当てるスマートシステムがあるようです。
そのインターフェイスにリンク(キャリア信号)がない場合、未構成のままになりますが、ケーブルのもう一方の端にある他のデバイスの電源を入れると、インターフェイスは自動的にIPアドレスと必要なものすべてを表示します。
DHCPの場合、解決策は特定のインターフェイスにバインドしないことです...