W sysctl, że /proc/sys/net/ipv[46]/conf/
klawisze mają następujące podklucze: all
, default
, a kluczowy dla każdego interfejsu sieciowego. Na przykład na komputerze z jednym interfejsem sieciowym eth0 będzie wyglądać następująco:
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/
Wszystkie odpowiednie ustawienia istnieją w każdym kluczu osobno. Na przykład, jeśli chcę wyłączyć reklamy routera IPv6 z tą accept_ra
wartością, ta wartość istnieje cztery razy:
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
Moje pytanie brzmi: które z tych wartości muszę zmienić? Pomyślałem all
(aby zmienić wszystkie istniejące interfejsy) i default
(aby zmienić wszystkie nowe interfejsy, które mogą pojawić się później), ale ich zmiana nadal pozostawia wartość 1 dla lo i eth0:
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
Czy urządzenie będzie teraz akceptować Reklamy routera na eth0, czy nie?
Odpowiedzi:
Znalazłem odpowiedź, pisząc pytanie. Postanowiłem opublikować to mimo wszystko, ponieważ inni mogą uznać to za wnikliwe, a następnie odpowiem samemu; Mam nadzieję, że nie jest to rozczarowane :)
Użytkownik Philipp Matthias Hahn na liście mailingowej jądra systemu Linux odkrył to przynajmniej częściowo :
Nie obejmuje,
accept_ra
ale przynajmniej teraz jest jasne, jakall
i jakdefault
działają, a raczej, jak nie działają tak, jak bym się spodziewał.źródło
use_tempaddr
parametru ...Program obsługi dla
accept_ra
innet/ipv6/addrconf.c
jestproc_dointvec
. Tak więc ogólny kod interfejsu wcześniej wygenerował tablicęall
i wpisy specyficzne dla interfejsu, a zapisanie ich za pomocąsysctl
lub procfs po prostu umieszcza wartość podaną w tablicy.Obawiamy się, w jaki sposób te wartości są następnie wykorzystywane
Od osób wywołujących
ipv6_accept_ra()
funkcję zobaczysz,include/net/ipv6.h
że każdy dzwoniący używa określonego interfejsu do wywołania tej funkcji.Tak więc
net.ipv6.conf.all.accept_ra
, o ile widzę, w jądrze nie ma miejsca, w którym kiedykolwiek byłby używany, poza przechowywaniem wpisu procfs.Jeśli chcesz zmienić
accept_ra
każdy interfejs za pomocą jednego polecenia, możesz to zrobić:Spóźniłem się około 4 lat, ale to poprawna odpowiedź: P.
źródło