Skip to contentSkip to conversation

disabling ipv6 (when ipv6 module is already loaded or built in)

DISCUSSION Arkadiusz Miskiewicz 3 participants 6 messages Mar 25, 2011 – Mar 27, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi,

There are two options for disabling some ipv6 functionality in ipv6 module - disable and disable_ipv6. The second option is also available as sysctl and can be switched runtime.

First is nicer because it also prevents apps from creating sockets by using socket(AF_INET6, ...). Various apps use AF_INET6 socket creation to deterine if ipv6 is supported on the system. Unfortunately "disable" one doesn't exist as sysctl and this is a problem.

Is it possible to make "disable" sysctl option, too? Currently there is no runtime way to disable ipv6 (or I'm unaware of such way).

Thanks,

Signature · 2 lines
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/
#1 lore raw
Quoted 7 lines · Arkadiusz Miskiewicz

Hi,

There are two options for disabling some ipv6 functionality in ipv6 module - disable and disable_ipv6. The second option is also available as sysctl and can be switched runtime.

Quoted 7 lines

First is nicer because it also prevents apps from creating sockets by using socket(AF_INET6, ...). Various apps use AF_INET6 socket creation to deterine if ipv6 is supported on the system. Unfortunately "disable" one doesn't exist as sysctl and this is a problem.

Is it possible to make "disable" sysctl option, too? Currently there is no runtime way to disable ipv6 (or I'm unaware of such way).

Not really, the module parameter causes IPv6 to be loaded just enough to allow other modules that rely on it to load, but it never registers any of the protocol handlers, sysctls, tables, etc. to make it usable. And the IPv6 module isn't unloadable, so you have to reboot to change this setting.

When there are no addresses it's not very usable since you can't send out packets...

-Brian

#2 lore raw
Quoted 15 lines · Brian Haley
Quoted 6 lines · Arkadiusz Miskiewicz

Hi,

There are two options for disabling some ipv6 functionality in ipv6 module - disable and disable_ipv6. The second option is also available as sysctl and can be switched runtime.

Quoted 7 lines

First is nicer because it also prevents apps from creating sockets by using socket(AF_INET6, ...). Various apps use AF_INET6 socket creation to deterine if ipv6 is supported on the system. Unfortunately "disable" one doesn't exist as sysctl and this is a problem.

Is it possible to make "disable" sysctl option, too? Currently there is no runtime way to disable ipv6 (or I'm unaware of such way).

Quoted 8 lines

Not really, the module parameter causes IPv6 to be loaded just enough to allow other modules that rely on it to load, but it never registers any of the protocol handlers, sysctls, tables, etc. to make it usable. And the IPv6 module isn't unloadable, so you have to reboot to change this setting.

When there are no addresses it's not very usable since you can't send out packets...

The whole problem is that socket(AF_INET6,...) is allowed. If setting net.ipv6.conf.all.disable_ipv6=1 would also prevent such socket() from succeeding then everything would be fine.

Quoted 1 line

-Brian

Signature · 2 lines
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/
maintainer
#3 lore raw

From: Arkadiusz Miskiewicz <[email protected]>
Date: Fri, 25 Mar 2011 23:53:06 +0100

Quoted 3 lines

The whole problem is that socket(AF_INET6,...) is allowed. If setting net.ipv6.conf.all.disable_ipv6=1 would also prevent such socket() from succeeding then everything would be fine.

You have to make this setting before the module loads, once we register the protocol handlers (which is what allows socket() to succeed) the cat is out of the bag.

If even just one socket exists, we can't perform the steps necessary to block new ones.

That's why you have to use the module option, and it is the only way to block this class of operations.

#4 lore raw
Quoted 11 lines · David Miller

From: Arkadiusz Miskiewicz <[email protected]>
Date: Fri, 25 Mar 2011 23:53:06 +0100

Quoted 3 lines

The whole problem is that socket(AF_INET6,...) is allowed. If setting net.ipv6.conf.all.disable_ipv6=1 would also prevent such socket() from succeeding then everything would be fine.

You have to make this setting before the module loads, once we register the protocol handlers (which is what allows socket() to succeed) the cat is out of the bag.

Quoted 5 lines

If even just one socket exists, we can't perform the steps necessary to block new ones.

That's why you have to use the module option, and it is the only way to block this class of operations.

Hm, maybe then it could be done in a way where ipv6 is initially built in but disabled and could be permanently enabled via sysfs/proc/something based on a userspace (or user/admin) decision runtime? That would be analogous to "modprobe ipv6" in kernel with modular ipv6.

Signature · 2 lines
Arkadiusz Miśkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/
maintainer
#5 lore raw

From: Arkadiusz Miskiewicz <[email protected]>
Date: Sun, 27 Mar 2011 23:19:15 +0200

Quoted 4 lines

Hm, maybe then it could be done in a way where ipv6 is initially built in but disabled and could be permanently enabled via sysfs/proc/something based on a userspace (or user/admin) decision runtime? That would be analogous to "modprobe ipv6" in kernel with modular ipv6.

Sorry, no.

We believe the current facilities handle all reasonable uses of the feature.