데이터그램은 로컬 네트워크의 대상 호스트로 직접 전송되는 대신 게이트웨이로 전송됩니다.

데이터그램은 로컬 네트워크의 대상 호스트로 직접 전송되는 대신 게이트웨이로 전송됩니다.

이는 범위 밖이므로네트워크 엔지니어링, 이것은 Linux 네트워크 스택과 관련이 있으므로 여기서 다시 질문하겠습니다.

다음과 같은 설정/상황이 있습니다.

            ---------------------
            |  Gateway          |
            | 10.1.0.1          |
            | aa:bb:cc:00:00:01 |
            ---------------------
                        |
---------------------   |  
|  Host 1           |---|
| 10.1.0.91         |   |
| aa:bb:cc:00:00:91 |   |
---------------------   |
                        |
---------------------   |
|  Host 2           |----
| 10.1.0.92         |    
| aa:bb:cc:00:00:92 |
---------------------

서브넷 마스크는 입니다 255.255.240.0. Host1과 Host2는 Linux/Ubuntu 노드입니다.

이제 Host1에서 Host2로 데이터그램을 보내면 바로 그곳으로 갈 것으로 예상됩니다. Host2의 MAC 주소를 얻기 위해 10.1.0.92에 대한 ARP 요청을 하고, 데이터그램을 채우고 유선으로 보냅니다.

흥미롭게도 저는 다른 행동을 관찰했습니다. 데이터그램이 게이트웨이의 MAC 주소로 채워졌는데, 이는 제가 예상했던 것과 달랐습니다.

다음은 호스트 1의 라우팅 테이블입니다.

Host1 > ip route -n
default via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100 
1.1.1.1 via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100 
9.9.9.9 via 10.1.0.1 dev enp130s0 proto dhcp src 10.1.0.91 metric 100 
10.1.0.0/20 dev enp130s0 proto kernel scope link src 10.1.0.91 metric 100 
10.1.0.1 dev enp130s0 proto dhcp scope link src 10.1.0.91 metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown  

이것은 Host1에 대한 tcpdump 출력이며, 여기서 데이터그램이 게이트웨이로 전송되는 것을 볼 수 있습니다.

Host1 > tcpdump -en -i enp130s0 udp and port 12345
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on enp130s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
07:22:10.249224 aa:bb:cc:00:00:91 > aa:bb:cc:00:00:01, ethertype IPv4 (0x0800), length 60: 10.1.0.91.42518 > 10.1.0.92.12345: 18533 updateMA [b2&3=0x6c6c] [8277a] [28460q] [17488n] [8275au] [|domain]

호스트 1에서 호스트 2로의 Arping도 잘 작동합니다.

Host1 > arping 10.1.0.92
ARPING 10.1.0.92
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=0 time=104.200 usec
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=1 time=133.023 usec
60 bytes from aa:bb:cc:00:00:92 (10.1.0.92): index=2 time=108.228 usec

내가 무엇을 놓치고 있는지, 또는 Linux 네트워크 스택의 어떤 구성 요소가 호스트로 직접 전송되는 대신 게이트웨이로 무엇이 전송되는지 결정하는지 궁금합니다.

어떤 조언이나 도움이라도 주시면 감사하겠습니다.

관련 정보