実験の一環としてミニネット、私のIPv4ネットワークには、2つのルータを介して接続されている2つのホストの次のトポロジがあります。 (Ubuntu 22.04.02仮想マシンでMininetを実行しています。)
N.0.103 N.0.1 N.2.1 N.2.2 N.1.1 N.1.2
h1 ------------------------ r1 ------------------------ r2 ------------------------ h2
N.0.0/24 N.2.0/24 N.1.0/24
一番上の行はインターフェイスアドレス、一番下の行はN
= 192.168のネットワークアドレスです。
特に、ホスト 'h1' の構成は次のとおりです。
h1-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.103 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::70e9:dfff:fe2c:6242 prefixlen 64 scopeid 0x20<link>
ether 72:e9:df:2c:62:42 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1076 (1.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1076 (1.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ホスト「h2」の構成は以下の通りである。
h2-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::f429:9fff:fe6a:5211 prefixlen 64 scopeid 0x20<link>
ether f6:29:9f:6a:52:11 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1076 (1.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1076 (1.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ルータ「r1」の構成は次のとおりです。
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
r1-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::10dc:6cff:feb2:1688 prefixlen 64 scopeid 0x20<link>
ether 12:dc:6c:b2:16:88 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1076 (1.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14 bytes 1076 (1.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
r1-eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::8cd5:99ff:fedf:e2a8 prefixlen 64 scopeid 0x20<link>
ether 8e:d5:99:df:e2:a8 txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1076 (1.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15 bytes 1146 (1.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ルータ「r2」の構成は次のとおりです。
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
r2-eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::87d:6aff:fee9:477 prefixlen 64 scopeid 0x20<link>
ether 0a:7d:6a:e9:04:77 txqueuelen 1000 (Ethernet)
RX packets 21 bytes 1398 (1.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15 bytes 1146 (1.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
r2-eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.2 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::cc40:70ff:fe31:f96d prefixlen 64 scopeid 0x20<link>
ether ce:40:70:31:f9:6d txqueuelen 1000 (Ethernet)
RX packets 15 bytes 1146 (1.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15 bytes 1146 (1.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
両方のホストが別のホストに接続できるように実験的なトポロジを設定しようとしています。これはもちろん、ルーティングテーブルを設定することで達成できます。
私は次の手順を実行しました。
優秀r1端子(xterm):
ifconfig r1-eth0 192.168.0.1 netmask 255.255.255.0
ifconfig r1-eth1 192.168.2.1 netmask 255.255.255.0
ip route add 192.168.0.0/24 dev r1-eth0
ip route add 192.168.1.0/24 via 192.168.2.2
優秀r2端子(xterm):
ifconfig r2-eth0 192.168.1.1 netmask 255.255.255.0
ifconfig r2-eth1 192.168.2.2 netmask 255.255.255.0
ip route add 192.168.0.0/24 via 192.168.2.1
ip route add 192.168.2.0/24 dev r1-eth1
優秀h1ターミナル(xterm)
ifconfig h1-eth0 192.168.0.103 netmask 255.255.255.0
route add default gw 192.168.0.1
ip route add 192.168.1.0/24 via 192.168.0.1
優秀h2ターミナル(xterm)
ifconfig h2-eth0 192.168.1.2 netmask 255.255.255.0
route add default gw 192.168.1.1
ip route add 192.168.0.0/24 via 192.168.1.1
h1、h2、r1、r2の更新されたルーティングテーブルは次のとおりです。
h1パス:
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 h1-eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 h1-eth0
192.168.1.0 192.168.0.1 255.255.255.0 UG 0 0 0 h1-eth0
h2パス:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 h2-eth0
192.168.0.0 192.168.1.1 255.255.255.0 UG 0 0 0 h2-eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 h2-eth0
r1 ルーティングテーブル:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 r1-eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 r1-eth1
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 r1-eth1
r2 ルーティングテーブル:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 r2-eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 r2-eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 r2-eth1
「h1」から「h2」へのpingを試みると(またはその逆)、「ターゲットホストに接続できません」というエラーが発生します。
pingall
以下は、いくつかの結果を示すping到達可能性マトリックス(Mininet CLIによって生成されます)です。
r1 -> r2 h1 X
r2 -> r1 X X
h1 -> r1 r2 X
h2 -> r1 r2 X
これは次のように解釈できます。
Ping 操作を通じて
r1
それは達成できますが、r2
そうではh1
ありませんh2
。r2
到達できますがr1
到達できず、h1
到達できませんh2
。h1
それは達成できますが、r1
そうではr2
ありませんh2
。h2
それは達成できますが、r1
そうではr2
ありませんh1
。
実マトリックスとして、
次のノードは他のノードをpingできます。 | r1 | r2 | h1 | 2時間 |
---|---|---|---|---|
r1 | - | はい | はい | |
r2 | はい | - | ||
h1 | はい | はい | - | |
2時間 | はい | はい | - |
私はどこで間違っていますか?私は一歩飛びましたか?どんな洞察力や助けをいただきありがとうございます。
答え1
r1 と r2 で転送が有効になっていない可能性があります。
sysctl -w net.ipv4.ip_forward=1
このコマンドを実行する前(または後)に現在の状態を確認できます。
sysctl net.ipv4.ip_forward
0 はアクティブでないことを意味し、そうでなければ 1 を意味します。
答え2
タイプミスがあります:
# On the h1 terminal (xterm)
[...]
ip route add 192.168.1.0/24 via 192.168.1.1
あなたが入力したいもの(h2に一致)は次のとおりです。
ip route add 192.168.1.0/24 via 192.168.0.1
この項目はまったく役に立たないため、このエラーは特に悲しいことです。どちらの場合も、デフォルトパスはそれを上書きします。
通常、この種の問題がある場合は、tcpdump
すべてのホストで実行してパケットがどれだけ移動したかを確認する必要があります。
次のコマンドを使用して、ローカルルーティング構成をテストできます。
ip route get 1.2.3.4 # tells you what would happen with a packet to that address
アップデート1
ルータのルーティングテーブルが間違っているようです。慣れていないので気づくのに時間がかかりました。 andの代わりにandをroute
使用する必要があります。ip address
ip link
ifconfig
ip route
route
ルーターのルーティングテーブルには、2つのリンクエントリ(両方のインターフェイス用)と1つのネクストホップエントリを含める必要があります。しかし、すべてのアイテムは同じように見えます。
その理由は、各ルータのルーティング設定が欠落しているためです。誰もが(他の)アイテムを必要とします
- 192.168.0.0/24
- 192.168.0.1/24
- 192.168.0.2/24
r1
書いた:
ip route add 192.168.2.0/24 dev r1-eth1
r2
書いた:
ip route add 192.168.1.0/24 dev r2-eth0