同じシステムの異なるサブネットに2つのNICを設定し、あるNICから別のNICにルーティングするにはどうすればよいですか?

同じシステムの異なるサブネットに2つのNICを設定し、あるNICから別のNICにルーティングするにはどうすればよいですか?

2つのネットワークカードを搭載したコンピュータ(RPi CM4)があります。一方(eth0)はネットワーク1に設定され、もう一方(eth1)はネットワーク2に設定されます。 net1からnet2のコンピュータを見ることができるはずです。 eth0を192.168.1.x/23、ゲートウェイ192.168.1.1に設定しました。 eth1を192.168.0.xに設定しました。 eth0にのみ接続して192.168.1.xでsshとpingをすることができますが、eth1に接続すると接続になりません。 。

ip r以下を提供します。

    default via 192.168.1.1 dev eth0 src 192.168.1.224 metric 202 
default via 192.168.1.1 dev eth1 src 192.168.0.200 metric 203 
192.168.0.0/24 dev eth1 proto dhcp scope link src 192.168.0.200 metric 203 
192.168.0.0/23 dev eth0 proto dhcp scope link src 192.168.1.224 metric 202 

route以下を提供します。

    Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.1     0.0.0.0         UG    203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.254.0   U     202    0        0 eth0

ip addr

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:dc:d3:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.224/23 brd 192.168.1.255 scope global noprefixroute eth0
   valid_lft forever preferred_lft forever
inet6 fe80::8b50:c7e0:6f8d:a2aa/64 scope link 
   valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 84:8b:cd:4a:a1:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth1
   valid_lft forever preferred_lft forever
inet6 fe80::7e0e:d55b:12a1:f029/64 scope link 
   valid_lft forever preferred_lft forever

私は完全にインターネット愚かです。 同様の質問を読んでみましたが、まだ混乱しています。

ELIA5、192.168.1.xで表示できるように192.168.0.xをルーティングするにはどうすればよいですか?

main network/inet (192.168.1.x) <-> CM4 eth1(192.168.1.200) eth0(192.168.0.60) <-> private LAN(192.168.0.50)

答え1

背景

ネットワークマスク(または単に「マスク」)は、IPアドレスがネットワーク部分とホスト部分に分割される方法を定義します。 IPプロトコルは、デフォルトで、リモートホストのIPアドレスとインターフェイスのIPアドレスに一致するネットワーク部分がある場合、ネットワークインターフェイスがリモートホストに直接接続できると仮定します。ネットワーク部分が異なる場合、システムはルーティングテーブルを調べて、実行するアクションを決定する必要があります。

IPv4ネットマスクは、最も重要なビットから始まり、特定のビット位置がすべて1になり、その後にすべて0になる32ビット値で完全に表示されます。 1ビットは、IPアドレスの対応するビットがアドレスのネットワーク部分の一部であることを示し、0ビットはそれぞれホスト部分を表す。したがって、ネットワークマスクを1ビットの量で説明するだけで便利です。ネットマスクの長さしかし、簡潔さのために単に「マスク」と呼ばれることが多いです。したがって、マスク/ 24は通常のベース10 IPアドレス形式では255.255.255.0として正確に記録されます。

ネットマスクの長さが8で割られると、ネットワークとホスト部分の分離はIPアドレスの10進表現と一致します。これは人間が容易に理解できるものです。たとえば、192.168.0.251/24ネットワーク部分があるIPアドレスの表現はの位置はです192.168.0。ホスト部分はです.251

8に分割されていないネットマスクを理解するには、わずかな2進数学が必要です。ただし、簡単に言えば、192.168.0.0/23は、最初のアドレスが192.168.0.0で最後のアドレスが192.168.1.255のネットワークを意味するため、ネットワークの1つが別のネットワークのサブネットになります。一方、あなたの指示には、/ 24マスクのip addr両方が含まれています。 (出力の)または(の)ルーティングテーブルエントリのいずれも、ネットワークインターフェイスの設定と一致してはいけません。eth0eth1gatewayroutevia x.x.x.xip rどこかにオタナその他のエラーがあるようです。コピーした出力がip addr/outputと一致しません。ip rroute


ルーティングテーブルは、最も具体的なエントリ(=ネットマスクが最大のエントリ)から始まり、より一般的なエントリ(より小さいネットマスク値)まで処理されます。デフォルトゲートウェイエントリは最も一般的なエントリであり、まだ他のエントリと一致しないすべてのアドレスと一致します。技術的には、マスク長が/ 0のすべて0のIPアドレスとして表示されることがあります。

人間の観点からは、ルーティングテーブルのデフォルトゲートウェイエントリは、「アドレスに直接接続できず、もはや具体的な指示がない場合は、直接接続できるこのシステムに送信したらどうするかを知っています」です。 。

ネットワークインターフェイスのIPアドレスとネットワークマスクを設定すると、Linuxカーネルはインターフェイスから直接接続できるホストと一致するネットワークマスクに基づいてルーティングテーブルエントリを自動的に生成します。したがって、システムに異なるネットワークセグメントに接続された2つのネットワークインタフェースがあり、インターネットに接続されていない場合、システムには手動のルーティングエントリはまったく必要なく、デフォルトゲートウェイも必要ありません。しかし、両方のネットワークの異なるホスト「他の」ネットワークが2インタフェースホストを介してルーティングできることを知るには、ルーティングテーブルエントリが必要です。

ローカルにアクセスできるネットワークと他のネットワークのみがある場合は、2インターフェイスホストを指すデフォルトゲートウェイエントリで十分ですが、インターネット接続も関係している場合、デフォルトゲートウェイは他のすべてのネットワークセグメントと同様にインターネットルーターを指す必要があります。世界中でそれに到達し、1つずつ列挙したくないでしょう。)そして、生成されたデフォルトゲートウェイエントリが2つのインターフェイスホストを指していない場合は、次のような特定のルートエントリも必要です。 「私の他のネットワークセグメントには、このネットワークアドレスとこのネットマスクがあり、2つのインターフェースホストを転送できます。」


何をしたいですか

出力が正確で、2つの異なるネットワークセグメント(1つは192.168.0.x / 24、もう1つは192.168.1.x / 24)があると仮定すると、2つのip addrセグメント間を移動するには4つのことが必要です。ルーティングを有効にします。

1.) CM4 で IPv4 ルーティングマスタースイッチをイネーブルにします。

echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
sysctl -p

2.) CM4 のファイアウォールルールが転送を許可していることを確認します。つまり、iptables -L FORWARD -vnポリシーACCEPTがあるがルールがない場合、またはポリシーがDROPの場合は、適切なACCEPTルールがあります。一部のディストリビューションでは、デフォルトで転送ポリシーをDROPに設定します。この場合、2つのルールが必要です。

iptables -I FORWARD 1 -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD 2 -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

人間の観点から見ると、192.168.0.xから入って192.168.1.xに向かうパケットは転送(ルーティング)が許可され、その逆の場合も同様です。

これらのルールを永続化するには、iptables-save出力を実行して展開に適したファイルにリダイレクトできます。システムがufw別のファイアウォール構成ツールを使用している場合は、それを使用して同等の永続ルールを構成します。

3.)192.168.0.xプライベートLANのホストで:デフォルトゲートウェイを192.168.0.60に設定します。このセグメントにはインターネットゲートウェイがないため、これが必要な唯一のルーティングエントリです。 (後でプライベートLANからのインターネットアクセスを有効にするには、CM4でiptables FORWARDルールを変更するだけです。)

4.) 192.168.1.x プライマリネットワーク上のホスト: これらのホストには既に 192.168.1.1 のデフォルトゲートウェイ設定が必要です。これを変更すると、そのホストのインターネット接続が失われます。したがって、ここでは、「マスクが/ 24のネットワーク192.168.0.xは192.168.1.200パスを介して到達できます」という特定のパスを定義する必要があります。

Linux 構成コマンドの場合、次のようになります。

ip route add 192.168.0.0/24 via 192.168.1.200

または

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.200

他のオペレーティングシステムでは、若干異なる構文が必要な場合があります。

関連情報