使用 OpenWRT 禁用 IPv6

Ola*_*the 10 openwrt ipv6

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

当我使用 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
Run Code Online (Sandbox Code Playgroud)

结果如下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
Run Code Online (Sandbox Code Playgroud)

两者的结果ping6 google.comping6 2607:f8b0:4008:808::200e为:

connect: Network is unreachable
Run Code Online (Sandbox Code Playgroud)

Mic*_*ton 15

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

这通常可以正常工作,但在两种情况下除外:

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

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

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

短期解决方法是让 OpenWrt通告 ULA 前缀。您可以转到Network > Interfaces,清除IPv6 ULA-Prefix框,然后单击Save & Apply。这将阻止 OpenWrt 广告 ULA 前缀。如果您曾经将路由器的设置重置为默认值,则可能需要再次执行此操作。

  • 对我来说,“IPv6 ULA-前缀”框位于:网络 &gt; 接口 &gt; 全局网络选项 (2认同)

Sir*_*ton 7

一种更简单的方法是通过 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
Run Code Online (Sandbox Code Playgroud)

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

  • 为了避免重新启动路由器以获取更改,我在 _uci commit_ 之后立即运行 _/etc/init.d/odhcpd stop_,以便 dhcp 服务器立即停止租用 IPV6 地址;) (2认同)