2つのネットワークインタフェースを使用して、systemdのデフォルトパス選択をどのように無視できますか?

2つのネットワークインタフェースを使用して、systemdのデフォルトパス選択をどのように無視できますか?

更新:/etc/network/interfaces使用中のため存在しません。netctlはじめに

2つのネットワークアダプタを使用して、ArchLinuxを実行するVirtualBoxインスタンスを設定しました。Adapter 1eth0)はNAT(10.0.2.0/24)に接続され、Adapter 2eth1)はホスト専用ネットワーク(192.168.56.0/24)に接続されています。私はこれらのアダプタにudev古典的な名前を使用するための規則を使用しています(しかし名前にも問題があります)。eth0eth1enp***

ログインすると、次のメッセージが表示されます。

$ip ルーティング
デフォルトでは192.168.56.1 dev eth1
デフォルトは 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 を渡します。
10.0.2.0/24 dev eth0プロトタイプdhcp範囲リンクsrc 10.0.2.15メートル法202
192.168.56.0/24 dev eth1プロトタイプカーネルスコープリンクsrc 192.168.56.31

これにより

$ping google.com
ping: google.com: 不明な名前またはサービス

私が理解しているように、これは192.168.56.1(ホスト専用インターフェイス)NATインターフェイスよりも低いメトリックを追加するためです。

その後、手動で行う場合:

$sudo ip ルート削除のデフォルト
$ip ルーティング
デフォルトは 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 を渡します。
10.0.2.0/24 dev eth0プロトタイプdhcp範囲リンクsrc 10.0.2.15メートル法202
192.168.56.0/24 dev eth1プロトタイプカーネルスコープリンクsrc 192.168.56.31

わかりました。

$ping google.com
PING google.com (172.217.12.174) 56(84) バイトのデータ。
64 バイト from....1e100.net(172.217.12.174): icmp_seq=1 ttl=52 time=11.9 ms
64 バイト from....1e100.net(172.217.12.174): icmp_seq=2 ttl=52 time=11.7 ms
^C
--- google.com ping統計---
2つのデータパケットを送信する、2つのデータパケットを受信する、0%パケット損失、時間3ms
rtt 最小/平均/最大/mdev = 11.698/11.782/11.867/0.137 ミリ秒

eth0もしそうなら、アウトバウンドトラフィックが/(ホストネットワークのみ)ではなく/ 10.0.2.0/24(ホストへのNATインターフェイス)を介してルーティングされるようにするにはどうすればよいですか?eth1192.168.56.0/24

この質問はVirtualBoxとは何の関係もありません(メトリックを変更できるVirtualBox設定がある場合は問題ありません)。

次のいずれかを実行する方法があると確信しています。 1) systemd がパスを追加するのを防ぐdefault via 192.168.56.1 dev eth1ため、または 2)default via 10.0.2.2 dev eth0毎回デフォルトパスを手動で削除する必要がないように、より低いメトリックを持つパスを追加します。インスタンスを起動します。

まだ考慮していない別の解決策があるかもしれません。これまで、名前、固定IP、DHCPで遊ぶことは役に立ちませんでした。

ゲストオペレーティングシステムはArchLinuxです。

答え1

/etc/network/interfaces対応するインターフェイス行をファイルに追加します。

post-up route del default via 192.168.56.1 dev eth1

default via 192.168.56.1 dev eth1インターフェイスが表示されると、パスが削除されます。

答え2

次のような@Bobの提案、ホスト専用ネットワークの固定IP構成ファイルがゲートウェイを指定したことが問題であることに気づきました。私はそれを削除し、すべてが私が望むように動作しました。

これらは2つです。ネットワーク制御はじめに:

Description='Host only connection'
Interface=eth1
Connection=ethernet
IP=static
Address=('192.168.56.31/24')
DNS=('192.168.1.1')

そして

Description='Internet connection via NAT'
Interface=eth0
Connection=ethernet
IP=dhcp

その結果は次のとおりです。

$ip ルーティング
デフォルトは 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 202 を渡します。
10.0.2.0/24 dev eth0プロトタイプdhcp範囲リンクsrc 10.0.2.15メートル法202
192.168.56.0/24 dev eth1プロトタイプカーネルスコープリンクsrc 192.168.56.31

これは完璧かもしれませんが、私には効果があります。

答え3

はい、古い質問です。しかし、私は数年前に設定しましたが、突然動作が停止したシステム構成に対してデフォルトのルーティングがどのように機能するかを調べるためにここに来ました。

この質問に答えるには、sledgehammerアプローチを使用し、/etc/networkd-dispatcher/routable.d/50-ifup-hooksファイルを入れて、そこから目的の最終ルーティングテーブルを手動で作成できます。デフォルトでは、システムによって生成されたパスを削除して独自のパスを提供します。

ただし、ファイルの権限が755であることを確認してください。これは実行されないので、私の問題です:(

関連情報