Ubuntu Server 18.04의 이상한 sysctl 동작

Ubuntu Server 18.04의 이상한 sysctl 동작

IPv6를 비활성화하려는 Ubuntu 생체 공학 서버가 있다고 가정해 보겠습니다. (중요: 이것은 XY 문제가 아닙니다. 제가 무엇을 달성하려고 하는지 추측하거나 왜 이 일을 하고 싶은지 묻지 마십시오. 저는 IPv6가 얼마나 훌륭하고 멋진지 알고 있으므로 합창단에 설교할 필요가 없습니다. ) 이를 수행하는 한 가지 방법은 다음 sysctls를 설정하는 것입니다.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

위의 설정을 사용하여 수동으로 실행 하면 sysctl호스트의 모든 IPv6 네트워킹이 비활성화됩니다.

# ip -6 a
#

좋습니다. 하지만 재부팅해도 지속되지 않습니다. sysctls를 유지하는 권장 방법은 sysctls에 /etc/sysctl.conf파일을 넣거나 /etc/sysctl.d. 그렇게 했지만 재부팅 후에도 IPv6이 여전히 남아 있습니다.

# ip -6 addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 <censored>/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591985sec preferred_lft 604785sec
    inet6 fe80::250:56ff:feae:c158/64 scope link 
       valid_lft forever preferred_lft forever

그러나 sysctls는 올바르게 설정된 것으로 보입니다.

# sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6 net.ipv6.conf.lo.disable_ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

그러나 명령줄에서 동일한 값으로 설정하면 갑자기 IPv6가실제로장애가 있는:

# sysctl -w net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# ip -6 addr
# 

그렇다면 내 질문은 다음과 같습니다. sysctls를 기본값이 아닌 특정 값으로 설정하는 이유는 무엇입니까?/etc/sysctl.d/ 나타나다그 자체 의 결과에 따라 뭔가를 하고 있지만 sysctl, 그럼에도 불구하고~ 아니다실제로 커널의 동작에 영향을 미치나요? sysctl을 설정하는 것과 적용하는 것 사이에 미묘한 차이가 있습니까?

나는 그것이 sysctl인터페이스라는 것을 알고 있지만 /proc/sys거기에서도 같은 것이 보입니다.

# cat /proc/sys/net/ipv6/conf/all/disable_ipv6 
1
# ip -6 a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 <censored>/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591945sec preferred_lft 604745sec
    inet6 fe80::250:56ff:feae:c158/64 scope link 
       valid_lft forever preferred_lft forever
# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
# ip -6 a
#

또한 나는 이것에 대해 상당한 연구를 해왔습니다. 이 질문은 다음 중 어느 것에도 속지 않습니다.

답변1

나는 생체공학에서 이 문제를 해결하기 위해 정말 나쁜 해킹을 했습니다. steeldriver가 언급했듯이 타이밍 문제입니다.

cp -a /lib/systemd/system/systemd-sysctl.service /etc/systemd/system/

내가 추가하는 새 파일에서Requires=network.target

etc/sysctl.d/50-ipv6.conf콘텐츠가 포함된 파일을 생성합니다. net.ipv6.conf.all.disable_ipv6 = 1서버에서 NetworkManager를 사용하는 경우 method=ignore를 설정하는 것을 잊지 마세요.

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore

네트워크 연결에서.

이해할 수 있게 썼기를 바랍니다.

관련 정보