/ proc / sys / net / ipv [46] / conf /에서“all”,“default”및“eth *”의 차이점은 무엇입니까?


37

sysctl을에서 /proc/sys/net/ipv[46]/conf/: 키는 다음 하위 키를 가지고 all, default각 네트워크 인터페이스에 대한 키를 누릅니다. 예를 들어 단일 네트워크 인터페이스가 eth0 인 시스템에서는 다음과 같습니다.

iserv ~ # ll /proc/sys/net/ipv[46]/conf/
/proc/sys/net/ipv4/conf/:
insgesamt 0
dr-xr-xr-x 0 root root 0 12. Sep 23:30 all/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 default/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 eth0/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 lo/

/proc/sys/net/ipv6/conf/:
insgesamt 0
dr-xr-xr-x 0 root root 0 12. Sep 23:30 all/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 default/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 eth0/
dr-xr-xr-x 0 root root 0 12. Sep 23:30 lo/

모든 해당 설정은 각 키에 별도로 존재합니다. 예를 들어, accept_ra값으로 IPv6 라우터 알림을 사용하지 않으려면 이 값이 네 번 존재합니다.

iserv ~ # sysctl -a 2>/dev/null | grep "accept_ra "
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.eth0.accept_ra = 1

내 질문은 다음과 같습니다.이 값 중 어떤 값을 변경해야합니까? 나는 all(기존의 모든 인터페이스 default를 변경 하고) (나중에 나타날 수있는 모든 새로운 인터페이스를 변경하기 위해 ) 생각 했지만 lo를 변경하면 lo와 eth0의 값은 1로 유지됩니다.

iserv ~ # sysctl -w net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.accept_ra = 0
iserv ~ # sysctl -w net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.accept_ra = 0
iserv ~ # sysctl -a 2>/dev/null | grep "accept_ra "  
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.eth0.accept_ra = 1

머신은 이제 eth0에서 라우터 알림을 수락합니까, 그렇지 않습니까?


글쎄, 나는 여전히 질문을 쓰는 동안 답을 찾았습니다. 나는 7 시간 안에 스스로 대답 할 것입니다 (사이트에서 더 빨리 할 수는 없습니다). 그때까지 링크는 다음과 같습니다. marc.info/?l=linux-kernel&m=123606366021995&w=2
Martin von Wittich

github.com/torvalds/linux/commit/… 에 따르면 rp_filter 로직은 9 년 전에 변경되었습니다. 이전에는 AND되었으며 MAX로 변경되었습니다.
odivlad

답변:


37

여전히 질문을 작성하면서 답변을 찾았습니다. 다른 사람들이이 통찰력을 찾은 다음 스스로 대답 할 수 있기 때문에 어쨌든 게시하기로 결정했습니다. 나는 이것이 눈살을 찌푸 리지 않기를 바랍니다. :)

linux-kernel 메일 링리스트의 Philipp Matthias Hahn 사용자는 적어도 부분적으로 알아 냈습니다 .

As far as I researched for IPv4 some time ago, the "default" value gets
copied to newly created interfaces only once.
"all" on the other hand allways gets applied in addition to the current
setting, but it depends on the exact setting, if its ORed, ANDed, or
whatevered:
    log_martians         OR
    accept_redirects     AND
    forwarding           ?
    mc_forwarding        AND
    medium_id
    proxy_arp            OR
    shared_media         OR
    secure_redirects     OR
    send_redirects       OR
    bootp_relay          AND
    accept_source_route  AND
    rp_filter            AND
    arp_filter           OR
    arp_announce         MAX
    arp_ignore           MAX
    arp_accept
    app_solicit
    disable_policy
    disable_xfrm
    tag
(see include/linux/inetdevice.h:83 for IN_DEV_{AND,OR,MAX}CONF)

Putting a new value in "all" doesn't change the value you read from
"$interface", but it only gets computed and used internally.

그는 포함되지 않습니다 accept_ra하지만 적어도 지금은 어떻게 분명 all하고 default내가 기대 한 것처럼 그들이 일을하지 않는 방법, 작업, 또는 오히려.


3
그리고 IPv6에 대해? 예 : 나는 use_tempaddr매개 변수를 찾고 있습니다 ...
mattia.b89

1
rp_filter 로직은 9 년 전에 변경되었습니다. 이전에는 AND되었으며 MAX로 변경되었습니다. "{interface}에서 소스 검증을 수행 할 때 conf / {all, interface} / rp_filter의 최대 값이 사용됩니다."를 참조하십시오. 에 git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/...github.com/torvalds/linux/commit/... (비아 unix.stackexchange.com/a/427455/ 18568 )
가이아

@ 가이아 좋은 의견!
Mvorisek

5

의 핸들러 accept_ra에가 net/ipv6/addrconf.c있다 proc_dointvec. 따라서 일반 인터페이스 코드는 이전에 all인터페이스 및 특정 항목 항목 의 배열을 생성했으며 이를 사용하여 sysctl또는 procfs에 쓰면 배열에 지정한 값만 입력됩니다.

우리는 그 값이 어떻게 사용되는지에 관심이 있습니다.

당신의 발신자의 볼 ipv6_accept_ra()에 기능을 include/net/ipv6.h모든 호출자가이 함수를 호출하는 특정 인터페이스를 사용하는.

따라서 net.ipv6.conf.all.accept_ra내가 볼 수있는 한 procfs 항목을 저장하는 것을 제외하고는 커널에 사용 된 곳이 없습니다 .

accept_ra하나의 명령으로 모든 인터페이스 를 변경하려면 다음을 수행하십시오.

for TUNABLE in $(sysctl -aN --pattern "accept_ra$")
do
    sysctl -w "$TUNABLE=0"
done

나는 약 4 년 늦었지만 정답입니다. : P


sysctl을 (procps의 버전 3.2.8) : 오류 : 알 수없는 매개 변수 "-an"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.