루프로 구성해야 하는 네트워크가 있습니다. 3개의 노드로 구성되며 각 노드에는 2개의 인터페이스가 있습니다. 아래 다이어그램이 이를 설명합니다.
+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
| 10.0.3.1 10.0.1.1 10.0.1.2 10.0.2.2 10.0.2.3 10.0.3.3 |
+--<----------------------------<--------------------------------------------+
요청이 Node2를 통과하고 응답이 노드 3에서 노드 1로 직접 전달되도록 노드 1에서 노드 3으로 ping을 만들고 싶습니다.
node1$ ping 10.0.2.3
노드를 다음과 같이 구성했습니다.
node1# route add -net 10.0.2.0/24 gw 10.0.1.2
node2# route add -net 10.0.3.0/24 gw 10.0.2.3
node3# route add -net 10.0.1.0/24 gw 10.0.3.1
ping을 실행하면 노드 1의 요청이 노드 3에 도착합니다. 그러나 노드 3은 응답하지 않으며 응답조차 생성하지 않습니다(적어도 Wireshark로 캡처할 수 있음).
힌트를 좀 주시겠어요?
고마워
답변1
노드가 다음을 선택할 때원천시작되는 패킷의 IP 주소. 달리 제한되지 않는 한 일반적으로 패킷 대상으로 가는 경로에서 다음 홉에 "가장 가까운" IP 주소를 선택합니다.
노드 1의 관점에서 노드 3으로의 다음 홉은 입니다 10.0.1.2
. 에 가장 가까운 노드 1 IP 주소는 10.0.1.2
이( 10.0.1.1
가) 아닙니다 10.0.3.1
. (대상과 동일한 서브넷에 있는 IP 주소는 동일한 서브넷에 없는 IP 주소보다 대상에 "더 가까운" 것으로 간주됩니다.)
핑의 소스 IP 주소를 확인하세요. 아마도 , 그렇지 10.0.1.1
않을 것입니다 10.0.3.1
. 노드 3에 에 대한 경로가 없으면 10.0.1.1
응답할 수 없습니다.
답변2
런어웨이 브리지 브로드캐스팅을 방지하기 위해 노드가 올바르게 반복되지 않습니다. 스패닝 트리 프로토콜을 실행하는 것이 좋습니다. 이렇게 하면 모든 노드 간에 완전히 작동하는 경로를 배치할 수 있습니다. 레이어 2 또는 레이어 3의 특정 링크 간의 연결을 제한하려는 의도가 없다면 이를 수행하는 다른 방법을 생각할 수 없습니다.
답변3
( 더 이상 /sbin/route
사용되지 않습니다. ip route
대신 사용하세요).
패킷이 한 방향으로만 이동하도록 하려면 대상이 무엇이든 모든 노드가 다음 노드를 게이트웨이로 사용해야 함을 의미합니다.
node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1
그러나 대부분의 배포판에서는 역방향 경로 필터링이 기본적으로 활성화되어 있는 경우가 많습니다. 역방향 경로 필터링은 이 패킷에 대한 응답이 패킷이 수신된 것과 동일한 인터페이스로 가는지 확인하려고 시도하는 수신 패킷에 대한 필터입니다. 이는 라우팅이 대칭인 일반 네트워크에서는 좋은 일이지만 귀하의 경우에는 비대칭 라우팅이 필요하므로 패킷을 수신하는 인터페이스에서 역방향 경로 필터링을 비활성화하거나 최소한 줄여서 다음 사항을 확인할 수 있습니다. 소스 IP는 라우팅 가능합니다.
node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2
역방향 경로 필터링 및 기타 노브에 대한 문서는 커널 문서( )에서 확인할 수 있습니다 Documentation/networking/ip-sysctl.txt
. 배포판에 따라 찾을 수 있는 위치(또는 웹에서 를 검색해 보세요 ip-sysctl.txt
).
즐거운 루핑을 즐겨보세요!