起動時にホストにmacvlanブリッジを生成するスクリプトがあります。ホストは最新のArch Linuxです。これは、ホストとゲストが同じネットワークを共有して*会話できるようにするためです。次のURLで提供されている手順を見つけました。
(起動時に実行も探してみました。Systemd用の起動スクリプトを作成するには?そしてhttps://stackoverflow.com/questions/21830670/systemd-start-service-after-特異的-service)。
しかし、問題は、最初の試みでスクリプトが機能しないことです。 macvlanデバイスとルーティングテーブルを作成しますが、ホストはゲストをpingしたりその逆にすることはできません。
しかし、2回目の実行はうまくいきます。つまり、エラーメッセージにもかかわらず動作します。"create_macvlan_bridge.sh[4489]:RTNETLINK 回答: ファイルが存在します。"。これで、ホストは期待どおりにゲストにpingを送信できます。
最初の試みで動作する必要がありますでも、なぜダメなのか理解できません。誰でも助けることができますか?
【書き直す】結果にip a
2番目の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
望むより。