
네트워크의 호스트가 해당 소스 IP에 대한 로컬 ARP 테이블의 MAC 주소와 다른 MAC 소스 주소를 가진 IP 패킷을 수신하면 어떻게 됩니까?
해당 IP에 대한 ARP 테이블 항목은 유효한 ARP 응답을 통해 채워졌고 앞으로도 채워질 것입니다.
이제 수신 호스트(Ubuntu 18.04)가 응답 패킷(ICMP 에코 응답 또는 TCP SYN/ACK ...등)을 보내지 않는 것을 확인했습니다. 응답 패킷이 인터페이스를 떠나지 않습니다.
이제 문제는 호스트가 이런 식으로 행동하는 이유가 무엇인지입니다. 패킷 MAC 및 IP 주소, 로컬 arp 테이블 및 라우팅 테이블 등에 대해 어떤 검사가 이루어지고 있습니까?
편집하다:
시나리오를 명확하게 하려면:
호스트 Hb가 10.2.0.5(호스트 Ha)에 ping 요청을 보내면 Ha는 소스 IP가 10.1.0.3인 ICMP 패킷을 수신하며 소스 MAC 주소는 라우터의 MAC 주소입니다. 그러나 호스트 Ha의 ARP 테이블에는 10.1.0.3 -> Hb MAC 주소 항목이 있습니다. 따라서 MAC 주소가 다릅니다!
답변1
이 동작은 완전히 예상된 것이며 호스트의 라우팅 구성과 관련되어 있으며 Hb
라우터를 통과하는 기본 경로만 있을 가능성이 높습니다. 따라서 추가 경로를 설정하지 않은 경우 네트워크 N2
( 10.2.0.0/24
)로 향하는 패킷은 기본 경로를 통해 전송됩니다.
따라서 이 문제는 호스트에서 역방향 경로 필터를 활성화하여 Ha
소스 주소에 대한 제한으로 인해 들어오는 패킷을 삭제함으로써 발생합니다.
이 문제를 해결하려면 호스트에서 다음 명령의 출력을 확인해야 합니다 Ha
.
ip netconf show dev <iface-N2>
-rp_filter
값을 확인하세요. 아마도 그럴 것입니다strict
.ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2>
-아마도 다음과 같은 내용이 표시될 것입니다invalid cross-device link
.nstat -az TcpExtIPReversePathFilter
- 0이 아닌 값을 가질 가능성이 높습니다.
문제를 해결하는 세 가지 확실한 방법이 있습니다.
sysctl( 및 )을 사용하여 호스트
rp_filter
에서 을 비활성화하면 됩니다 . 또한 이 변경 사항을 영구적으로 적용하려면 파일을 편집해야 합니다.Ha
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0
/etc/sysctl.conf
주소를 통해
Hb
호스트 에 경로를 추가하기만 하면 됩니다 (Linux의 경우 명령 , Windows의 경우 명령 ).10.2.0.5
10.1.0.5
ip route add 10.2.0.5 via 10.1.0.5
route add 10.2.0.5 mask 255.255.255.255 10.1.0.5
Hb
라우터 주소를 라우터 주소로 다시 쓰도록 라우터에서 NAT(소스 주소 변환)를 구성합니다 . 이를 수행하는 iptables 규칙은 다음과 같습니다.
iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE