하나의 인터페이스에서 rp_filter 비활성화


9

다중 (VLAN) 인터페이스가있는 라우터 역할을하는 Ubuntu 16.04 서버가 있습니다. 기본적으로 rp_filter(역 경로 필터링)은 모든 인터페이스에 대해 활성화되어 있습니다. 그런 식으로 유지하고 싶지만 정확히 하나의 인터페이스에 대해서는 예외를 만듭니다. 이 인터페이스의 패킷에는이 인터페이스의 라우팅 대상 주소와 일치하지 않는 소스 IP 주소가 있어야합니다.

이 인터페이스의 이름 ens20.4이 vlan-raw-device이며 ens20대상 인터페이스 (패킷 흐름을 테스트하기위한)의 이름이 지정 ens20.2되었다고 가정합니다 (모든 대상 인터페이스에서 작동해야 함).

성공하지 않고 rp_filter속성 을 설정하려고했습니다 ens20.4.

echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

따라서 테스트 목적으로 rp_filtervlan-raw-device 및 테스트 대상 인터페이스에 대해서도 비활성화 했습니다.

echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter

"스푸핑 된"소스 IP 주소를 가진 패킷은 여전히 ​​삭제되지 않습니다. 모든 인터페이스에 rp_filter대해 비활성화하면 패킷이 통과합니다.

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

그러나 여전히 다른 모든 인터페이스에 대해 역방향 경로 필터링을 유지하고 싶습니다. 무엇을 놓치고 있습니까?


일부 테스트에서 rp_filter가 모든 인터페이스 또는 인바운드 인터페이스에 대해 1로 설정된 경우 역방향 경로 필터링이 활성화 된 것으로 나타났습니다. 그래도 여전히 정답이나 문서 참조를 찾고 있었지만 지금까지는 찾을 수 없었습니다.
Cybran

답변:


12

정보 : https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090

당신의 시도를 설명 할 마지막 문장에 주목하십시오 :

conf / {all, interface} / rp_filter의 최대 값은 {interface}에서 소스 유효성 검증을 수행 할 때 사용됩니다.

따라서 이것은 작동해야합니다.

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

이제 max (conf / {all, ens20.4} / rp_filter == 0 : 소스 유효성 검사가 없습니다. 다른 인터페이스가 여전히 보호되어 있는지 다시 확인하십시오.

값 2를 사용하여 "느슨한"rpf를 확인할 수도 있습니다. 패킷이 일반적으로 다른 인터페이스로 라우팅되어야하는 경우 유효성 검사가없는 것보다 낫습니다.


2
감사합니다. 잘 설명해주세요! "느슨한"rpf 제안에 특별히 감사드립니다. 실제로 설정에 더 적합한 선택입니다. 또한 all / rp_filter를 0으로 설정하지 않아도되므로 가장 좋습니다.
Cybran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.