これが私の質問の要約版です:ネットワークインターフェイスファイルでgateway
パラメータを設定してもネットワークインターフェイスに影響がないのはなぜですか?
または、gateway
が失敗した場合にpost-up
コマンドが機能し、gateway
パラメータを設定するとどうなるのでしょうか。
ここに私の質問の長い説明があります。
VirtualBox上の次のネットワークインターフェイス構成ファイル(/etc/network/interfaces
)を検討してくださいVM Debianを実行中:
# /etc/network/interfaces
# Original file
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface (NAT)
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# Host-only interface (vboxnet0)
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
gateway 192.168.56.1
マシンを起動してroute -n
を実行すると、次の出力が表示されます。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
驚いたことに、eth1
インターフェイスに192.168.56.0/24ネットワーク用のゲートウェイが設定されていません。
ここで、次の代替構成ファイルを検討してください。
# /etc/network/interfaces
# Modified file
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface (NAT)
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# Host-only interface (vboxnet0)
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
# gateway 192.168.56.1
post-up route add default gw 192.168.56.1
pre-down route del default gw 192.168.56.1
この構成でマシンを再起動してroute -n
を実行すると、代わりに次の出力が表示されます。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.56.1 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
つまり、デフォルトゲートウェイを設定するpost-up
/pre-down
アプローチは機能しますが、gateway
パラメータ自体を使用すると機能しません。ここで何が欠けていますか?
ネットワークの観点からは、ネクストホップとしてのネットワークゲートウェイと、ラストリゾートゲートウェイとしても知られるデフォルトゲートウェイがあります。最初のroute -nコマンド(後処理なし)から、10.0.2.2が最後の手段のゲートウェイとして表示されます。マシンがルーティングテーブルにないネットワークを要求すると、不明なネットワークトラフィックをこのアドレスに転送します。インターフェイス設定のゲートウェイ設定は、そのネットワーク上のトラフィックのネクストホップです。ただし、インターフェースはそのネットワークに直接接続されているため、トラフィックを転送するためのゲートウェイは必要ありません。ネットワークは常に認識されており、そのネットワーク上のデバイスを宛先とするトラフィックは、そのデバイスに直接転送されます。後処理コマンドは、ラストリゾートのゲートウェイを2つ作成しています(これは望ましくありません)。 192.168.56.1を実際の最後の手段にしたい場合は、デフォルトのルートを追加したいので、置き換えないでください。
これはいくつかの扇動を与えます
ルーティングテーブルは、すべてのインターフェース間の接続をルーティングする方法に関する情報を提供します。
インターフェイスのデフォルトルートは他の目的で使用され、システム全体ではなく、そのインターフェイスにのみ適用されます。
ネットワークインターフェイスが1つしかない場合は、それが唯一のデフォルトゲートウェイであるため、システムはそれをデフォルトルートとして自動的に設定します。
ルーティングテーブルは下から上に機能するため、上部のデフォルトゲートウェイが接続の試行に使用される最後のルートになります。
マニュアルから(man interfaces
):
gateway address
Default gateway (dotted quad)
したがって、gateway
は、静的ルートではなく、defaultルートを指定するために使用されます。スタティックルートは、デフォルトゲートウェイを使用するように設計されていないネットワークトラフィックに使用されます。デフォルトゲートウェイは、ローカルネットワーク宛ではなく、ルーティングテーブルで優先ルートが指定されていないすべてのトラフィックに使用されます。 eth0
上のDHCPインターフェースは、defaultゲートウェイを取得します。その後、eth1
でpost-up route add default gw
に静的ルートを指定します。
参考文献:
2つのネットワークインターフェイス上の個別のネットワークトラフィック
次のようにしてみてください。
echo '200 hostonly' >> /etc/iproute2/rt_tables
/etc/network/interfaces
を編集します。
# The loopback network interface
auto lo
iface lo inet loopback
# The VirtualBox NAT interface.
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
# The VirtualBox Host-only interface.
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.56.2
netmask 255.255.255.0
post-up ip route add 192.168.56.0/24 dev eth1 src 192.168.56.1 table hostonly
post-up ip route add default via 192.168.56.1 dev eth1 table hostonly
post-up ip rule add from 192.168.56.2/32 table hostonly
post-up ip rule add to 192.168.56.2/32 table hostonly
再起動して、外観を確認します。