我想完全避免我的 Mac OS X 机器使用 ipv6。
我正在寻找一种编程方法来禁用每个网络接口上的 ipv6,并可能完全避免内核对 ipv6 的支持。
作为解释,我需要相当于添加“alias ipv6 off”到 linux 中的 modprobe.conf。
“这是不可能的”的答案是值得欢迎的,当然,它得到了某种官方消息来源的支持。
编辑:
我想从日志、ipfw 以及所有地方删除 ipv6。即使只是为了知道这是否可行以及如何可行。是否正确这样做又是另一个问题 :)
答案1
您可以使用以下方式禁用特定设备的 IP6
networksetup -setv6off Service name
(i.e networksetup -setv6off "Ethernet 1")
并获取所有可能的服务列表
networksetup -listallnetworkservices
请参阅 man networksetup 以了解更多信息。
我不知道您是否可以告诉 networksetup 一次对每个接口执行命令,但编写一个简短的脚本来迭代列表命令的输出并在所有设备上禁用 IP6 应该不会太难。
答案2
正如 neoice 所提到的,'ip6' 工具在这里很有用。它允许您禁用每个接口的 IPv6,或者 'ip6 -x' 禁用除环回接口之外的所有接口。
您可以使用以下方式在环回接口上禁用 IPv6
ip6 -d lo0
但是当我尝试这个时,DNS解析停止了工作。
所以:是的,您可以完全禁用 IPv6,但您的系统将受到严重损害。
答案3
这将禁用所有网络适配器上的 ipv6:
#!/bin/sh
IFS=$'\n'
net=`networksetup -listallnetworkservices | grep -v asterisk`
for i in $net
do
networksetup -setv6off "$i"
done
exit 0
答案4
这一页看起来很有用。如果以 root 身份运行,它似乎确实有效。我不想永久禁用它,所以我无法确认 sysctl 命令。
root@Shambhala:~# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::21b:63ff:fea5:de87%en0 prefixlen 64 tentative scopeid 0x4
media: autoselect status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 172.16.11.98 netmask 0xffffff00 broadcast 172.16.11.255
inet6 fe80::21c:b3ff:fe77:c434%en1 prefixlen 64 tentative scopeid 0x5
media: autoselect status: active
supported media: autoselect
vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::276:62ff:fe00:0%vboxnet0 prefixlen 64 scopeid 0x7
ether 00:76:62:00:00:00
root@Shambhala:~# ip6 -x
root@Shambhala:~# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
media: autoselect status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 172.16.11.98 netmask 0xffffff00 broadcast 172.16.11.255
media: autoselect status: active
supported media: autoselect
vboxnet0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:76:62:00:00:00
不过看起来 IPv6 在环回设备上仍然保持启用状态......