簡単なスイッチに3つのデバイスが接続されています。 3つのデバイスには2つのIPアドレスがあります。 1つは静的IPアドレス(172)、もう1つはDHCPサーバー(192)です。
コンピュータA:172.16.0.1、192.168.0.1
コンピュータB:172.16.0.2、192.168.0.2
コンピュータC:172.16.0.3、192.168.0.3
私の問題は、BとCの両方がAの2つのIPアドレスをpingできますが、BはCの172のIPアドレスをpingできないことです(逆も同様です)。 MACアドレスがBの/proc/net/arpにリストされている場合は、Cにpingを送信して再度戻すことができます(もちろんです)。
172 IP アドレスを次のように設定しました。
$ ip addr add 172.16.0.1/16 brd 172.16.255.255 label eth0:static scope link dev eth0
$ ip route add default dev eth0 metric 1002 scope link
AのDHCPサーバーが有効になっている場合、AまたはCでルーターなどのサービス(または他のサービス)を有効にせずにBからすべてにアクセスできるようにするにはどうすればよいですか。
私は試した:
# Computer A
$ tcpdump
21:09:40.398635 ARP, Request who-has 192.168.0.1 tell 192.168.0.2, length 46
21:09:40.398668 ARP, Reply 192.168.0.1 is-at 84:7b:eb:21:80:08 (oui Unknown), length 28
21:09:40.558658 IP 192.168.0.2 > 172.16.0.3: ICMP echo request, id 2, seq 97, length 64
21:09:41.598995 IP 192.168.0.2 > 172.16.0.3: ICMP echo request, id 2, seq 98, length 64
# Computer B
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:c0:7a:07:00:00 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.2/16 brd 172.16.255.255 scope link eth0:static
valid_lft forever preferred_lft forever
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::2c0:7aff:fe07:0/64 scope link
valid_lft forever preferred_lft forever
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/sit 0.0.0.0 brd 0.0.0.0
$ ip route get 172.16.0.3
172.16.0.3 via 192.168.0.1 dev eth0 table eth0 src 192.168.0.2
cache
$ ip r
default dev eth0 scope link metric 1002
172.16.0.0/16 dev eth0 proto kernel scope link src 172.16.0.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
# Computer C
$ tcpdump
16:54:59.881699 STP 802.1w, Rapid STP, Flags [Learn, Forward, Agreement], bridge-id 8000.00:05:1a:a4:58:c0.8002, length 43
16:55:01.878932 STP 802.1w, Rapid STP, Flags [Learn, Forward, Agreement], bridge-id 8000.00:05:1a:a4:58:c0.8002, length 43
16:55:03.879424 STP 802.1w, Rapid STP, Flags [Learn, Forward, Agreement], bridge-id 8000.00:05:1a:a4:58:c0.8002, length 43
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 80:6c:8b:c0:20:f0 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.3/16 brd 172.16.255.255 scope link eth0:static
valid_lft forever preferred_lft forever
inet 192.168.0.3/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::826c:8bff:fec0:20f0/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
$ ip route get 172.16.0.2
172.16.0.2 dev eth0 src 172.16.0.3
cache
$ ip r
default via 192.168.0.1 dev eth0
default dev eth0 scope link metric 1002
172.16.0.0/16 dev eth0 proto kernel scope link src 172.16.0.3
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.3
$ 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 0.0.0.0 0.0.0.0 U 1002 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
また、(Haukeに感謝)ICMPレスポンスがCに戻るのではなくAに送信されるようです.
Haukeが自分の意見で修正した後、Bのパスは次のとおりです。
$ ip route get 172.16.0.3
172.16.0.3 via 192.168.0.1 dev eth0 table eth0 src 192.168.0.2
cache
答え1
誤解のため出力を要求しませんでしたが、ip r
これは少なくとも問題の一部を明確にするようです。
$ ip route get 172.16.0.3
172.16.0.3 via 192.168.0.1 dev eth0 table eth0 src 192.168.0.2
cache
コンピュータBには、リンクローカルネットワーク172.16.0.0/16へのパスはありません。したがって、172.16.0.3から192.168.0.1にパケットを送信する必要があります(したがって、ARPは192.168.0.1(キャッシュされていない場合)で送信されますが、172.16.0.3では送信されません)。 ARPエントリを手動で追加しても、この内容は変更されません。しかし、たぶん設定は方向を決めることができます。
コンピュータCはBにパケットを送信できるはずですが、BはAを介して応答を送信しようとしますが、応答が破棄される可能性があります。
また、ご注文
ip route add default dev eth0 metric 1002 scope link
ネクストホップの住所が含まれていないため、私には意味がありません。
そして設定は必要ありません/proc/sys/net/ipv4/ip_forward
(少なくとも質問で言ったことではありません)。