更新

更新

当我在路由器上使用库存 Linksys 固件时,我的联网设备只能正确使用 IPv4 来访问互联网。

当我使用 OpenWRT 15.05.1 时,设备会尝试使用 IPv6 地址连接到各种站点,如果我的 ISP 提供 IPv6 服务,那就太好了,但事实并非如此。

我尝试了一些没有效果的方法:关闭 DHCPv6、禁用 dnsmasq 的 DNS 缓存、设置 dnsmasq 的 DHCP 服务器以提供静态 DNS 服务器地址(8.8.8.8),并设置 OpenWRT 的内部 DNS 服务器设置以使用该 DNS 服务器。

如何让 OpenWRT 停止告诉设备可以使用 IPv6?

联网设备上的命令结果

结果ip addr是:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:1a:80:7a:4e:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.107/24 brd 192.168.1.255 scope global dynamic enp6s0
       valid_lft 42521sec preferred_lft 42521sec
    inet6 fd7f:77c6:629f::9e8/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fd7f:77c6:629f::4e3/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fd7f:77c6:629f:0:21a:80ff:fe7a:4e47/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::21a:80ff:fe7a:4e47/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1d:e0:44:04:57 brd ff:ff:ff:ff:ff:ff

结果route -6是:

Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
fd7f:77c6:629f::4e3/128        ::                         U    256 0     0 enp6s0
fd7f:77c6:629f::9e8/128        ::                         U    256 0     0 enp6s0
fd7f:77c6:629f::/64            ::                         U    100 1     3 enp6s0
fd7f:77c6:629f::/48            fe80::c256:27ff:fe77:37a7  UG   100 0     0 enp6s0
fe80::/64                      ::                         U    256 2    10 enp6s0
::/0                           ::                         !n   -1  1   729 lo
::1/128                        ::                         Un   0   3     6 lo
fd7f:77c6:629f::4e3/128        ::                         Un   0   1     0 lo
fd7f:77c6:629f::9e8/128        ::                         Un   0   1     0 lo
fd7f:77c6:629f:0:21a:80ff:fe7a:4e47/128 ::                         Un   0   2     3 lo
fe80::21a:80ff:fe7a:4e47/128   ::                         Un   0   2    30 lo
ff00::/8                       ::                         U    256 2    67 enp6s0
::/0                           ::                         !n   -1  1   729 lo

ping6 google.com和的结果ping6 2607:f8b0:4008:808::200e是:

connect: Network is unreachable

答案1

一个更简单的方法是通过 SSH 进入你的 OpenWrt 路由器并执行以下命令:

uci set 'network.lan.ipv6=off'
uci set 'network.wan.ipv6=off'
uci set 'dhcp.lan.dhcpv6=disabled'
/etc/init.d/odhcpd disable
uci commit

第一个命令禁用 IPv6 LAN 接口,第二个命令禁用 IPv6 WAN 接口,第三个和第四个命令禁用 DHCPv6 服务器并uci commit提交更改。

更新

看来我的信息已经过时了……设置有点不同,这些都是附加信息。现在这些信息应该是 2021 年的最新信息。

语法稍有改变:

uci set 'network.lan.ipv6=0'
uci set 'network.wan.ipv6=0'
uci set 'dhcp.lan.dhcpv6=disabled'
/etc/init.d/odhcpd disable
uci commit

然后禁用 RA 和 DHCPv6,这样就不会分发任何 IPv6 IP:

uci -q delete dhcp.lan.dhcpv6
uci -q delete dhcp.lan.ra
uci commit dhcp
/etc/init.d/odhcpd restart

您现在可以禁用 LAN 委派:

uci set network.lan.delegate="0"
uci commit network
/etc/init.d/network restart

您不妨禁用 odhcpd:

/etc/init.d/odhcpd disable
/etc/init.d/odhcpd stop

最后,您可以删除 IPv6 ULA 前缀:

uci -q delete network.globals.ula_prefix
uci commit network
/etc/init.d/network restart

更新2

引用@Kurt Fitzner:

使用 ifconfig 显示所有网络设备并注意哪些设备具有 IPv6 地址。然后通过图形 OpenWRT 界面导航到网络->接口,并选择设备选项卡。对于每个具有 IPv6 地址的设备,选择该设备的“配置”并取消选中“启用 IPv6”。

答案2

在初始安装(或重置设置)时,OpenWrt 会生成一个唯一的本地地址前缀并将 ULA 分配给网络中的所有设备,即使没有全局 IPv6 连接,也允许它们通过 IPv6 进行内部通信。

通常情况下,这种方法很有效,但以下两种情况除外:

  1. 终端设备无论如何都会尝试路由全球 IPv6 流量,尽管此地址范围不可用于此目的。您的路由表并未表明正在发生这种情况,并且过去十年左右没有一个常用的操作系统会这样做。
  2. 应用程序行为不当,在计算机没有全局 IPv6 连接(或更具体地说,没有默认路由)时尝试建立全局 IPv6 连接。根据您的描述,似乎就是这样的。

明确地说:通过宣传 ULA 前缀,OpenWrt不是告诉您的设备可以通过 IPv6 访问互联网。它只是告诉它们可以通过 IPv6 访问您的家庭网络。

长期解决方案是修复行为不当的应用程序。如果您在某个应用程序中遇到了此行为,则应将其作为错误报告给其开发人员。

短期的解决方法是使用 OpenWrt不是宣传 ULA 前缀。您可以访问网络>接口,空白IPv6 ULA 前缀框,然后单击保存并应用。这将阻止 OpenWrt 通告 ULA 前缀。如果您将路由器的设置重置为默认设置,则可能需要再次执行此操作。

答案3

/etc/modules.d 包含引导时加载的内核模块链接。只需删除 ip6tables、ipt6-nat 和 nf-conntrack6 链接,然后重新启动即可。IPv6 将永远消失,除非您进行硬重置。

这种方法的另一个好处是可以释放更多的 RAM,因为模块从未加载。

相关内容