起動時に2つの異なるネットワーク上の2つのネットワークカードのルーティングテーブルを設定する

起動時に2つの異なるネットワーク上の2つのネットワークカードのルーティングテーブルを設定する

eth0私は2つのNIC、つまり1つはイーサネット()、もう1つはワイヤレス(wlan0)を持つDebian(Raspbian)派生製品を実行しているコンピュータを持っています。eth0固定アドレスを使用してマシンをプライベートLANに接続し、wlan0マシンをインターネットに接続し、wpa_supplicantを設定します。追加の設定なしでLAN上でルータをpingできますが、google.comをpingすることはできません。いくつかの調査の終わりにこれを達成する最もきれいな方法は、カスタムルートテーブルを設定することでした。ルーティングルールは、LANネットワークから着信および発信するすべてのトラフィックをルーティングしeth0、他のすべてのトラフィックはLANネットワークを通過しますwlan0。このロジックが間違っている場合は訂正してください。

これを行うためにルーティングテーブルを設定する方法を見つけました。コマンドを使用して、ルールを手動で設定したときに機能させることができますip route。問題は、post-upインターフェイスファイルのコマンドを使用してインターフェイスを呼び出すときにルーティングテーブルを設定できないようです。

最初から私の考え方を説明すると...

route -n追加設定なしで出力された結果です。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         10.109.48.1     0.0.0.0         UG    303    0        0 wlan0
10.109.48.0     0.0.0.0         255.255.240.0   U     303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

私が知る限り、両側間のコミュニケーションに葛藤があると知っています。「どんな目的地」eth0、これはより低いメトリックを持つため、を使用して解決されます。これにより、すべてのアウトバウンドトラフィックが通過できるようになりますeth0。理想的には、LANに入って来るトラフィックだけを通過する必要がありますeth0。そこで、基本的な生成ルールを削除し、ネットワークの宛先とゲートウェイを指定するルールを作成すると、必要な動作が得られると思いました。説明に従って、デフォルトのルーティングルールを削除し、新しいルールを追加するためにいくつかのコマンドを実行した後、次のルーティングテーブルを取得しました。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.109.48.1     0.0.0.0         UG    303    0        0 wlan0
10.109.48.0     0.0.0.0         255.255.240.0   U     303    0        0 wlan0
192.168.0.0     192.168.0.1     255.255.255.0   UG    0      0        0 eth0

その後、LANのゲートウェイとgoogle.comにpingを送信できます。だから私の直感があったようだ。これがただ偶然であれば訂正してください。

ルーティングルールを永久にするために私が見つけた多くのガイドとServerfaultの答えは、インターフェースpost-upファイルでコマンドを使用することがこれを行う最善の方法であることを示しています。そのため、以下のようにインターフェースファイルを編集しました。

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.10
    network 192.168.0.0
    netmask 255.255.255.0
    gateway 192.168.0.1
    up ip route delete via 192.168.0.1 dev eth0
    up ip route delete 192.168.0.0/24 via 0.0.0.0 dev eth0
    up ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

再起動後も、ルーティングテーブルはデフォルト値と同じままです。 boot.log にはifup eth0発生したエラーは表示されません。これらの問題の原因が何であるかわかりません。

答え1

だから私の問題は、概念的な問題ではなく、私が知識を得るためのガイドは非常に古いです。この質問は次のカテゴリに属します。システムが再び攻撃します!

現在、Raspbianディストリビューションはsystemdを使用するDebian Jessieに従います。 systemdはすべてに従うわけではありませんが、/etc/network/interfaces生成されたルールを使用します/etc/dhcpcd.conf。 Systemdは、アドレス指定が静的であるか動的であるかにかかわらず、すべてのインターフェイス設定に基づいています/etc/dhcpcd.conf

目的の動作を得るには、まず次のものを除くすべてのeth0設定/etc/network/interfacesを削除しました。

allow-hotplug eth0
iface eth0 inet static

interface eth0それからその部分を編集しました/etc/dhcpcd.conf...

interface eth0
static ip_address=192.168.0.10

私が設定していないことに注意してくださいstatic router=192.168.0.1。これはdefault via 192.168.0.1 dev eth0私が望ましくないパスを生成します(wlan0のデフォルトパスと競合するため)。

これで、最小限の構成で両方のインターフェイスを使用してネットワークを介して通信できるようになりました。

関連情報