특정 라우팅 테이블을 사용할 때 UDP sendto가 실패함

특정 라우팅 테이블을 사용할 때 UDP sendto가 실패함

여러 인터페이스를 갖춘 시스템이 있습니다. 몇 가지 sysctl옵션과 라우팅 테이블 및 규칙을 사용하여 모든 인터페이스를 서로 격리했습니다 .

각 인터페이스에는 기본 경로를 정의하는 자체 라우팅 테이블이 있습니다.

각 라우팅 테이블에는 어떤 패킷이 어떤 테이블로 이동해야 하는지를 정의하는 4가지 규칙 세트가 있습니다.

eth0 (192.168.1.1)단순화를 위해 i가 및 을 가지고 있다고 가정해 보겠습니다 eth1 (192.168.1.2).

192.168.1.1테이블 에서eth0

192.168.1.1테이블 로eth0

iif eth0table eth0

oif eth0table eth0

왜냐하면 eth2그것은 동일하기 때문입니다.

옵션 sysctl은 다음과 같습니다:

net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1

이는 의도한 사용 사례의 99%에서 훌륭하게 작동하지만 하나는 실패합니다. "sendto"를 사용하여 UDP 클라이언트에 응답하는 것처럼 바인딩되지 않은 소켓에서 패킷이 생성되면 "Network Unreachable"이라는 메시지와 함께 호출이 실패합니다. sendto를 호출하기 전에 특정 IP 주소가 바인딩되면 호출이 예상대로 성공합니다.

이와 같은 상황에 대해 포괄적인 기본 경로를 설정하는 것 외에 이 문제를 해결하기 위해 정책 라우팅(예: iptables, ip 규칙)을 사용하여 수행할 수 있는 방법이 있습니까?

감사해요

관련 정보