非常に奇妙な動作を示すアーチ型Linuxボックスがあります。起動時にインターフェイスを起動し、必要に応じて設定するために呼び出されるスクリプトがあります。つまり:
ip link add link eth0 name mgt10 type vlan id 10
ip link add link eth0 name guest20 type vlan id 20
ip link set mgt10 up
ip addr add 10.10.0.1/24 dev mgt10
ip link set guest20 up
ip addr add 10.20.0.1/24 dev guest20
このスクリプトを呼び出した後、インターフェイスが機能し、適切なIPが割り当てられていることを確認してください。
# ip addr show
1: mgt10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.10.0.1/24 scope global mgt10
valid_lft forever preferred_lft forever
2: guest20@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.20.0.1/24 scope global guest10
valid_lft forever preferred_lft forever
しかし、問題は何らかの理由でmgt10へのローカルパスを生成しないことです。
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 guest20
エラーは表示されず、インターフェイスからIPを手動で削除して再度追加すると(同じコマンドをコピー/貼り付け)、問題なくルーティングが期待どおりに表示されます。
理由がわからない。物理リンクが確立されていますが、システムに問題があるのではないでしょうか。インターフェイスが割り当ての準備ができていることを確認する方法はありますか?私がここで何か間違っているのでしょうか?
答え1
起動スクリプトでip linkコマンドを使用する特別な理由はありますか? Arch Wikiには、systemctlを使用してVLANを作成する方法のいくつかの例があります。ここの例を修正することをお勧めします。https://wiki.archlinux.org/index.php/VLAN#Starting_at_boot
これにより、VLAN をサービスとしてイネーブルにし、問題が発生した場合にログに記録できるという利点が得られます。
systemctlに加えて、netctlを試してみることもできます。 /etc/netctl/examplesには、変更できるVLANサンプルスクリプトが含まれています。繰り返しますが、プロファイルが起動時に実行されるようにプロファイルを有効にしてログファイルを確認して、Journalctlなどを使用して実行される方法を確認できます。
答え2
最近、Debian 11システムで同様の問題が発生しました。インターフェイスへのローカルパスは生成されませんでしたが、エラーはありませんでした。
私はあなたの問題が異なる理由だと思います。私の場合、/etc/network/interfacesファイルを手動で編集し、アドレスバーにサブネットマスクを追加することを無視したことが問題でした。だからファイルに
iface vmbr0 inet static
address 10.100.17.56
変える
iface vmbr0 inet static
address 10.100.17.56/24
したがって、オペレーティングシステムは行の末尾に暗黙の「/32」があると解釈し、ローカルネットワークパスを正しく生成しません。
出力に手がかりがありますが、ip a
最初は見逃しました。 IPのマスクは/ 24ではなく/ 32です。
6: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:62:0b:d5:a2:a0 brd ff:ff:ff:ff:ff:ff
inet 10.100.17.56/32 scope global vmbr0
valid_lft forever preferred_lft forever