ホストからmacvlanブリッジを生成するスクリプトは、2回実行しないと機能しません。

ホストからmacvlanブリッジを生成するスクリプトは、2回実行しないと機能しません。

起動時にホストにmacvlanブリッジを生成するスクリプトがあります。ホストは最新のArch Linuxです。これは、ホストとゲストが同じネットワークを共有して*会話できるようにするためです。次のURLで提供されている手順を見つけました。

https://www.furorteutonicus.eu/2013/08/04/enabling-host-guest-networking-with-kvm-macvlan-and-macvtap

(起動時に実行も探してみました。Systemd用の起動スクリプトを作成するには?そしてhttps://stackoverflow.com/questions/21830670/systemd-start-service-after-特異的-service)。

しかし、問題は、最初の試みでスクリプトが機能しないことです。 macvlanデバイスとルーティングテーブルを作成しますが、ホストはゲストをpingしたりその逆にすることはできません。

しかし、2回目の実行はうまくいきます。つまり、エラーメッセージにもかかわらず動作します。"create_macvlan_bridge.sh[4489]:RTNETLINK 回答: ファイルが存在します。"。これで、ホストは期待どおりにゲストにpingを送信できます。

最初の試みで動作する必要がありますでも、なぜダメなのか理解できません。誰でも助けることができますか?

【書き直す】結果にip a2番目のinet項目が表示されていることを確認しました。macvlan0@enp10s02回目の実行後:

macvlan0@enp10s0: <ブロードキャスト、マルチキャスト、UP、LOWER_UP> mtu 1500 qdisc noqueue 状態 UP グループ デフォルト qlen 1000
    link/ether da:a2:21:d1:95:24 brd ff:ff:ff:ff:ff: ff
    inet 192.168.1.3/24 範囲 グローバル macvlan0
        valid_lft 常に Preferred_lft 常に
    inet 192.168.1.22/24 brd 192.168.1.255 範囲 グローバルセカンダリ macvlan0
        valid_lft 常に Preferred_lft 常に

2番目のIPアドレスがルーターのdhcpによってどのように提供され、secondary属性があるかを確認してください。

奇妙なことは、2回目の実行後にゲストがホスト192.168.1.3をpingできることです。そして「セカンダリ」アドレスから。


コードは以下のように表示されます。

スクリプト:/usr/local/bin/create_macvlan_bridge.sh

#!/bin/sh

# Evert Mouw, 2013
# Modified by Marc Ranolfi, 2017-07-24

# ------------
# wait for network availability
# ------------
TESTHOST=kernel.org
while ! ping -q -c 1 $TESTHOST > /dev/null
do
    echo "$0: Cannot ping $TESTHOST, waiting another 5 secs..."
    sleep 5
done

# ------------
# network config
# ------------
HWLINK=enp10s0
MACVLN=macvlan0

IP=192.168.1.3/24
NETWORK=192.168.1.0/24
GATEWAY=192.168.1.1

# ------------
# setting up $MACVLN interface
# ------------
ip link add link $HWLINK $MACVLN type macvlan mode bridge
ip address add $IP dev $MACVLN
ip link set dev $MACVLN up

# ------------
# routing table
# ------------
# empty routes
ip route flush dev $HWLINK
ip route flush dev $MACVLN

# add routes
ip route add $NETWORK dev $MACVLN metric 0

# add the default gateway
ip route add default via $GATEWAY

システムデバイスファイル:/etc/systemd/system/create_macvlan_bridge.service

[Unit]
Description=Create_macvlan_bridge
Wants=network-online.target
After=network.target network-online.target dhcpcd.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/create_macvlan_bridge.sh

[Install]
WantedBy=multi-user.target

答え1

スクリプトにも問題があります。二度やる必要はありません。約1分後、ジョブが再開されました。しかし、まだ迷惑です。不要なルーティング変更を行うことにしました。ホストの通常のトラフィックが物理インターフェイスを使用してはならない理由はありません。単にmacvlanを使用して仮想マシンにアクセスできます。したがって、実際に必要な唯一のルーティング変更は次のようになります。

IP ルートの更新開発者 $MACVLN

IP ルートの追加 $VMHOST dev $MACVLN メトリック 0

その時点ではもう問題はありませんでした。

少なくともCentos 7では、/ sbin / ifup-localは起動画面の最後にsystemctl restart networkによって実行されますが、これも役に立ちません。したがって、他のインターフェイスが起動したときにスクリプトを実行したくないので、このように起動する必要がありますが、そこにスクリプトを配置できます。

もし! "$1" = "em1" をテストし、0 を終了します。

/sbin/ifup-localの場合でもpingループは必要ありません。実際、無限ループであるため危険であるため、ネットワークに問題がある場合は、システムの起動時にこの問題が解決しない可能性があります。

答え2

質問に関する最新のアップデートの詳細を見ると、問題が何であるかがわかりました。

dhcpcd.serviceすべてのインターフェイスを有効にしました。無効にして有効にしようとしましたが、うまくいきenp10s0ました。

だから:

systemctl disable dhcpcd
systemctl enable dhcpcd@enp10s0

望むより。

関連情報