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
네트워크 연결에서.
이해할 수 있게 썼기를 바랍니다.