간단한 스위치에 세 개의 장치가 연결되어 있습니다. 세 장치 모두 2개의 IP 주소를 가지고 있습니다. 하나는 고정 IP 주소(172)이고 다른 하나는 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의 두 IP 주소를 ping할 수 있지만 B는 C의 172 IP 주소를 ping할 수 없다는 것입니다(그 반대도 마찬가지). MAC 주소가 B의 /proc/net/arp에 나열되어 있으면 C로 핑을 보내고 다시 돌아올 수 있습니다(물론 말이 됩니다).
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
(적어도 질문에서 말씀하신 내용은 아닙니다).