네트워크 네임스페이스와 veth 쌍으로 구성된 다음과 같은 토폴로지가 있습니다.
------ ------ ------
| a1 | | r1 | | r2 |
| | a1-eth0-----------r1-eth0 | |r1-eth1--------------r2-eth1| |
-----(11.0.0.1/30) (11.0.0.2/30)----(11.0.0.9/30) (11.0.0.10/30)-----
을 위한 r1
, net.ipv4.ip_forward is 1
.
다음 명령을 사용하여 성공적으로 핑할 수 있습니다 r2
.a1
ping -I a1-eth0 -c1 11.0.0.10
또한 인터페이스와 명령을 사용하여 r2
성공적 으로 핑할 수 있습니다.r1
r1-eth1
ping -I r1-eth1 -c1 11.0.0.10
그렇다면 왜 인터페이스를 사용하여 ping을 수행할 수 없습니까 r2
? 알겠어요r1
r1-eth0
대상 호스트에 연결할 수 없습니다.:
ping -I r1-eth0 -c1 11.0.0.10
PING 11.0.0.10 (11.0.0.10) from 11.0.0.2 r1-eth0: 56(84) bytes of data.
From 11.0.0.2 icmp_seq=1 Destination Host Unreachable
--- 11.0.0.10 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
마찬가지로 라우터 r1의 한 인터페이스를 해당 라우터의 다른 인터페이스를 통해 ping할 수 없습니다.
# here I get Destination Host Unreachable again:
ping -I r1-eth0 -c1 11.0.0.9
# here I get Redirect Host(New nexthop: 11.0.0.9):
ping -I r1-eth1 -c1 11.0.0.2
이것은 r1의 기본 라우팅 테이블입니다.
ip route
default via 11.0.0.10 dev r1-eth1
11.0.0.0/30 dev r1-eth0 proto kernel scope link src 11.0.0.2
11.0.0.8/30 dev r1-eth1 proto kernel scope link src 11.0.0.9
r1
그래서 제가 보기에는 라우터의 인터페이스가 서로 통신할 수 없다는 것이 문제인 것 같습니다 . 그러나 r1
트래픽은 일반적으로 와 사이에서 전달됩니다 .a1
r2
관심을 가져주셔서 감사합니다!
고쳐 쓰다:
문제를 해결하려면 위에서 설명한 문제를 해결해야 합니다.tcpdump 기록에 Tc qdisc 지연이 표시되지 않음. 이 문제에 대한 해결책을 찾았고 링크와 함께 게시했습니다. 따라서 이 문제는 더 이상 필요하지 않으므로 닫겠습니다. 읽어주시고 참여해주신 모든 분들께 감사드립니다!
답변1
잘못된 인터페이스, 즉 연결하려는 네트워크에 연결되지 않은 인터페이스를 사용하여 패킷을 보내는 이유는 무엇입니까? 그것은 잘못된 플랫폼에서 지하철을 타는 것과 같습니다. 인터페이스 간 통신은 없고 호스트 간 통신이 있습니다. 호스트는 네트워크를 통해 다른 호스트와 통신합니다. 인터페이스 선택은 라우팅 테이블 항목을 기반으로 수행됩니다. 내가 아는 한, -I
이러한 옵션을 완전히 제거하면 ping 명령이 작동할 것입니다.