GCE Ubuntu マルチインターフェースインスタンスルート構成

GCE Ubuntu マルチインターフェースインスタンスルート構成

複数のインターフェースを持つ Ubuntu 16.04 インスタンスを実行しています。2 番目のインターフェースでいくつかのルートを設定したいと考えています。手動でこれを行うことはできますが、再起動すると設定は保持されません。

ほとんどの方法では、/etc/network/interfaces 内のインターフェースを使用してルートを定義することが提案されており、これは、インターフェース ファイルからの呼び出しに基づいて /etc/network/interfaces.d/50-cloud-init.cfg に変換されます。

私が混乱しているのは、2 番目のインターフェースがどこでどのように定義されているのかわからないことです。

2 つのインターフェースは ens4 と ens5 です。 ens4 のみが で定義されていますiface ens4 inet dhcp。 ens5 でも同様のものが表示されることを期待していましたが、表示されませんでした。

ifconfig を実行すると、ens5 が実行中であると表示されます。また、ip link showそれが表示されます。

ens5 を /etc/network/interfaces に追加しても何も問題がないようです。そうすると、他のことも起こるようです。たとえば、/run/network に「ifstate.ens5」ファイルが表示されます。また、ifdown / ifup がインターフェース上で動作します。

ただし、追加してもpost-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1起動時にルートが作成されるわけではありません... ただし、ifdown を実行してから ifup を実行すると、期待どおりにルートが追加されます。

追加の調査によると、ens5 は Google GCE データソースの cloud-init パッケージを介して定義されていますが、これはすべて問題ありませんが、ens4 だけが 50-cloud-init.cfg ファイルにある理由については説明されていません。

では、ens5 はどこで定義され、ens5 の静的ルートを追加するにはどうすればよいでしょうか?

答え1

これが最善の解決策かどうかはわかりませんが、希望する結果を達成する方法は見つかりました。

まず、google_compute_engine python パッケージは、ブート プロセス中のある時点でネットワーク セットアップ操作を実行していると私は考えています。これは、「/usr/lib/python3/dist-packages/google_compute_engine/network_setup」で見つかりました。

残念ながら、この方法の結果はネットワークが機能するものの、通常の Ubuntu「チャネル」の範囲外のことが起こると私は考えています。たとえば、2 番目のインターフェイス (ens5) は機能し、ほとんどの状況で認識されますが、/etc/network/interfaces 内で定義されていないため、それに依存するものは機能しない可能性があります。

ただし、「route」などの他のコマンドはまだ機能しているように見えるため、これがどれほど大きな問題なのかはわかりません。

この Google パッケージを活用する方法があるかどうかはわかりません。そのため、それが良いアイデアであるかどうかもわかりません。

しかし、私の現在の解決策は、「スタートアップスクリプト「」。

これらの起動スクリプトはネットワークが構成された後に実行されるため、ホストのローカル構成ファイルに基づいてホスト上で一連のアクションを実行するスクリプトをバケットに配置しました。これにより、コマンド「route add -net 192.168.2.0 netmask 255.255.255.0 gw 1​​92.168.1.1 dev ens5」を実行して、起動時に静的ルートを作成できるようになりました。

関連情報