패킷이 예기치 않게 로컬 lo 인터페이스로 라우팅되었습니다.

패킷이 예기치 않게 로컬 lo 인터페이스로 라우팅되었습니다.

동일한 Linux 호스트 내의 서로 다른 네트워크 장치 간 라우팅에 대한 질문이 있습니다.

Geneve 네트워크 장치를 생성하고(이 예는 Geneve 터널과 관련이 없습니다. 단지 Geneve 유형의 네트워크 링크를 생성했을 뿐입니다) 다음 명령을 사용하여 장치에 IP 주소를 할당했습니다.

ip link add dev geneve0 type geneve dstport 6081 external
ip link set dev geneve0 up
ip addr add dev geneve0 10.0.0.1/30

라우팅 테이블을 확인하면 다음과 같이 출력됩니다.

[root@9097d4d76e67 /]# ip route show table main
default via 172.19.0.1 dev eth0 
10.0.0.0/30 dev geneve0 proto kernel scope link src 10.0.0.1 
172.19.0.0/16 dev eth0 proto kernel scope link src 172.19.0.3

그런데 시험이 나오면

[root@9097d4d76e67 /]# ip route get 10.0.0.1   
local 10.0.0.1 dev lo src 10.0.0.1 uid 0 
    cache <local> 

baddr이 포함된 패킷이 이 인터페이스 10.0.0.1로 라우팅되어야 하는 것 같나요 ? lo왜 그런 겁니까?

좀 조사해보니 로컬 라우팅 테이블과 관련이 있는 것 같습니다.

[root@9097d4d76e67 /]# ip route show table local
local 10.0.0.1 dev geneve0 proto kernel scope host src 10.0.0.1 
broadcast 10.0.0.3 dev geneve0 proto kernel scope link src 10.0.0.1 
...

그래서 커널은 로컬 라우팅 테이블을 사용하여 패킷을 라우팅하기로 결정한 것으로 추측되며 로컬 라우팅 테이블의 우선 순위가 더 높다는 것을 알고 있습니다. 내 질문은: 패킷이 geneve0 장치로 강제로 라우팅되도록 하려면 어떻게 해야 합니까?

로컬 라우팅 테이블에서 규칙을 제거하려고 했습니다(이 작업을 수행해야 하는지 잘 모르겠습니다).

[root@9097d4d76e67 /]# ip route del table local 10.0.0.1 dev geneve0
[root@9097d4d76e67 /]# ip route get 10.0.0.1                        
10.0.0.1 dev geneve0 src 10.0.0.1 uid 0 
    cache 

이제 ip route올바른 장치를 반환하는 것 같습니다. 그러나 실제 트래픽으로 테스트할 때 패킷이 eth0에 도달하면 PREROUTING 단계에서 DNAT가 10.0.0.1 ip ip 테이블 규칙에 도달하고 DNATed 패킷이 Geneve0 장치로 라우팅되지 않습니다. 예상했던 대로, 왜 그런지 아는 사람 있나요? ARP와 관련이 있나요?

관련 정보