Linux IPv6 | 地址配置 / IPv6 禁用 / IPv6 排障

注: 本文为 “Linux IPv6 ” 相关文章合辑。

略作重排,未整理去重。
如有内容异常,请看原文。


Linux 服务器设备上配置 IPv6 地址方法

aischang 于 2018-08-25 12:56:25 发布

1. 手动执行命令配置:

ifconfig em1 inet6 add 8888::a7/96 up

2. 删除网卡的 IPv6 地址方法:

ifconfig em1 inet6 del 8888::a7

3. 通过写配置文件配置:

IPV6INIT=yes    // 网卡初始化 IPv6 协议栈
IPV6_AUTOCONF=no
IPV6ADDR=8888::a6/96   // 配置 IPv6 地址
IPV6_DEFAULTGW=8888::1   // 配置 IPv6 网关

4. 配置样例

如下所示:

img


Linux 配置 IPv6 地址详细教程

温殿飞于 2020-10-30 11:48:20 发布

1. 自动获取 IPv6 地址

  1. 修改 /etc/sysconfig/network 文件,修改如下字段,不存在则手动添加,部分系统默认是开启的(加上也不影响)
NETWORKING_IPV6=yes
  1. 修改 /etc/sysconfig/network-script/ifcfg-ethX 文件,修改如下字段
IPV6INIT=yes (是否开机启用 IPv6 地址)
  1. 运行命令 service network restart

用命令 ifconfig -a 查看 IPv6 地址信息,系统会自动分配一个 “fe80:” 开头的本地链路地址。

img

2. 静态 IPv6 地址设置

  1. 修改 /etc/sysconfig/network 文件,修改如下字段,不存在请手动添加,部分系统默认是开启的
NETWORKING_IPV6=yes
  1. 修改 /etc/sysconfig/network-script/ifcfg-ethX 文件,修改如下字段,没有的手动添加
IPV6INIT=yes (是否开机启用 IPv6 地址)
IPV6_AUTOCONF=no (是否使用 IPv6 地址的自动配置)
IPV6_FAILURE_FATAL=no(如果配置失败,不会关闭网口,保证 IPv4 的配置还能生效)
IPV6ADDR=2001:250:250:250:250:250:250:222/64 (IPv6 地址)
IPV6_DEFAULTGW=2001:250:250:250::1(IPv6 地址网关)
  1. 然后运行命令 service network restart

用命令 ifconfig 查看 IPv6 地址信息,系统不仅会自动分配一个 “fe80:” 开头的本地链路地址,还有一个我们手动配置的全球唯一的 IPv6 地址。

img

3. 配置临时的 IPv6 地址

Linux 下 IPv6 配置:

查看系统是否加载了 IPv6 模块

# lsmod

如果没有加载执行该命令加载

# modprobe ipv6

加载成功后配置临时 IPv6 地址

  1. 配置临时的 IPv6 地址,配置的地址在系统重启或者网卡重启后失效
# ifconfig eth0 inet6 add 2001:250:250:250:250:250:250:222/64
  1. 为网卡 ethX 添加 IPv6 网关,配置的网关在系统重启或者网卡重启后失效
# route -A inet6 add default gw 2001:250:250:250::1 dev ethX
  1. ping 一个可连通的 IPv6 地址
# ping6 2001:250:250:250:250:250:250:222

在 Linux 下禁用 IPv6

作者:Dan Nanni

译者:LCTT ZTinoZ

| 2015-05-09 20:40

:发现一个应用程序在尝试通过 IPv6 建立连接,但是由于本地网络不允许分配 IPv6 的流量,IPv6 连接会超时,应用程序的连接会回退到 IPv4,这样就会造成不必要的延迟。
由于目前对 IPv6 没有任何需求,所以想在 Linux 主机上禁用 IPv6。有什么比较合适的方法呢?

IPv6 被认为是 IPv4——互联网上的传统 32 位地址空间——的替代产品,它用来解决现有 IPv4 地址空间即将耗尽的问题。然而,由于已经有大量主机、设备用 IPv4 连接到了互联网上,所以想在一夜之间将它们全部切换到 IPv6 几乎是不可能的。

许多 IPv4 到 IPv6 的转换机制(例如:双协议栈、网络隧道、代理)已经被提出来用来促进 IPv6 能被采用,并且很多应用也正在进行重写,如我们所提倡的,来增加对 IPv6 的支持。有一件事情可以确定,就是在可预见的未来里 IPv4 和 IPv6 势必将共存。

理想情况下,向 IPv6 过渡的进程不应该被最终的用户所看见,但是 IPv4/IPv6 混合环境有时会让你碰到各种源于 IPv4 和 IPv6 之间不经意间的相互碰撞的问题。例如,你会碰到应用程序超时的问题,比如 apt-get 或 ssh 尝试通过 IPv6 连接失败、DNS 服务器意外清空了 IPv6 的 AAAA 记录、或者你支持 IPv6 的设备不兼容你的互联网服务提供商遗留下的 IPv4 网络,等等。

当然这不意味着你应该盲目地在你的 Linux 机器上禁用 IPv6。鉴于 IPv6 许诺的种种好处,作为社会的一份子我们最终还是要充分拥抱它的,但是作为给最终用户进行故障排除过程的一部分,如果 IPv6 确实是罪魁祸首,那你可以尝试去关闭它。

这里有一些让你在 Linux 中部分(例如:对于某个特定的网络接口)或全部禁用 IPv6 的小技巧。这些小贴士应该适用于所有主流的 Linux 发行版,包括 Ubuntu、Debian、Linux Mint、CentOS、Fedora、RHEL 以及 Arch Linux。

查看 IPv6 在 Linux 中是否被启用

所有现代 Linux 发行版默认都自动启用 IPv6。为了能看到 IPv6 在你的 Linux 中是否被激活,可以使用 ifconfigip 命令。如果你在输入这些命令之后看到 “inet6” 字样的输出,那就意味着你的 Linux 系统启用了 IPv6。

$ ifconfig

img

$ ip addr

img

临时禁用 IPv6

如果你想要在你的 Linux 系统上临时关闭 IPv6,你可以用 /proc 文件系统。“临时” 的意思是我们所做的禁用 IPv6 的更改在系统重启后将不被保存。IPv6 会在你的 Linux 机器重启后再次被启用。

要将一个特定的网络接口禁用 IPv6,使用以下命令:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/<interface-name>/disable_ipv6'

例如,将 eth0 接口禁用 IPv6:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

img

重新启用 eth0 接口的 IPv6:

$ sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

如果你想要将整个系统所有接口(包括回环接口)禁用 IPv6,使用以下命令:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6'

永久禁用 IPv6

以上方法是不能永久禁用 IPv6 的,你一旦重启系统 IPv6 还是会被启用。如果你想要永久关闭它,有几个方法你可以试试。

方法一

第一种方法是通过 /etc/sysctl.conf 文件对 /proc 进行永久修改。

换句话说,就是用文本编辑器打开 /etc/sysctl.conf 然后添加以下内容:

# 禁用整个系统所有接口的 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一个指定接口的 IPv6 (例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

/etc/sysctl.conf 使这些更改生效,运行以下命令:

$ sudo sysctl -p /etc/sysctl.conf

或者直接重启。

方法二

另一个永久禁用 IPv6 的方法是在开机的时候传递一个必要的内核参数。

用文本编辑器打开 /etc/default/grub 并给 GRUB_CMDLINE_LINUX 变量添加 “ipv6.disable=1”。

$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="xxxxx ipv6.disable=1"

上面的 “xxxxx” 代表任何已有的内核参数,在它后面添加 “ipv6.disable=1”。

img

最后,不要忘记用以下方法保存对 GRUB/GRUB2 的修改:

Debian、Ubuntu 或 Linux Mint 系统:

$ sudo update-grub

Fedora、CentOS/RHEL 系统:

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

现在只要你重启你的 Linux 系统,IPv6 就会完全被禁用。

禁用 IPv6 之后的其他可选步骤

这里有一些在你禁用 IPv6 后需要考虑的可选步骤,这是因为当你在内核里禁用 IPv6 后,其他程序也许仍然会尝试使用 IPv6。在大多数情况下,应用程序的这种行为不太会影响到什么,但是出于效率或安全方面的原因,你可以为他们禁用 IPv6。

/etc/hosts

根据你的设置,/etc/hosts 会包含一条或多条 IPv6 的 hosts 和它们的地址。用文本编辑器打开 /etc/hosts 并注释掉包含 IPv6 hosts 的脚本行。

$ sudo vi /etc/hosts
# comment these IPv6 hosts
# ::1     ip6-localhost ip6-loopback
# fe00::0 ip6-localnet
# ff00::0 ip6-mcastprefix
# ff02::1 ip6-allnodes
# ff02::2 ip6-allrouters

Network Manager

如果你在用 NetworkManager 来管理你的网络设置,你可以在 NetworkManager 里禁用 IPv6。在 NetworkManager 打开 wired connection,点击 “IPv6 Settings” 选项并在 “Method” 一栏选择 “Ignore”,保存退出。

img

SSH 服务

默认情况下,OpenSSH 服务 (sshd) 会去尝试捆绑 IPv4 和 IPv6 的地址。

要强制 sshd 只捆绑 IPv4 地址,用文本编辑器打开 /etc/ssh/sshd_config 并添加以下行。inet 只适用于 IPv4,而 inet6 是适用于 IPv6 的。

$ sudo vi /etc/ssh/sshd_config
AddressFamily inet

然后重启 sshd 服务。


IPv6 排障工具之 ping6 完整过程细节剖析

腾讯云开发者于 2020-01-13 21:05:01 发布

本文作者:腾讯云售后架构师 李彬文

导语

通过本文你将了解到 ping 的原理,什么是 ICMPv6 协议,以及一个完整的 ping6 过程究竟是怎样发生的。

一、ICMPv6 简介

ICMPv6(Internet Control Message Protocol for the IPv6)是 IPv6 的基础协议之一。ICMPv6 具备向源地址报告关于向目的地传输 IPv6 数据包过程中的差错信息和控制信息。

ICMPv6 定义了一些消息,如:目的不可达、数据包超长、超时、响应请求和响应应答等。在 IPv6 中,ICMPv6 除了提供 ICMPv4 常用的功能之外,还有其他一些功能,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTUD 等。

二、ICMPv6 报文格式

ICMPv6 报文格式如下图所示:

img

ICMPv6 属于 OSI 七层协议栈的网络层,虽然和 IPv6 属于同一层,但是 封装时必须先封装 IPv6 报文头部

ICMPv6 字段注释:

  • Type:表明消息的类型,0 至 127 表示差错报文类型,128 至 255 表示信息报文类型。

  • Code:表示此消息类型细分的类型。

  • Checksum:表示 ICMPv6 报文的校验和。

三、ICMPv6 差错报文

ICMPv6 差错报文用于报告在转发 IPv6 数据包过程中出现的错误,可以分为以下 4 种:

1. 目的不可达错误报文

在 IPv6 中间设备转发 IPv6 报文过程中,当设备发现目的地址不可达时,就会向发送报文的源地址发送 ICMPv6 目的不可达错误报文,同时报文中会携带引起该错误报文的具体原因。

目的不可达错误报文的 Type 字段值为 1,根据错误具体原因又可以细分为:

  • Code=0:没有到达目标设备的路由。

  • Code=1:与目标客户端的通信被管理策略禁止。

  • Code=2:未指定。

  • Code=3:目的 IP 地址不可达。

  • Code=4:目的端口不可达。

2. 数据包过大错误报文

在 IPv6 中间设备转发 IPv6 报文过程中,发现报文超过出接口的链路 MTU 时,则向发送报文的源地址发送 ICMPv6 数据包过大错误报文,其中携带出接口的链路 MTU 值。数据包过大错误报文是 Path MTU 发现机制的基础。

数据包过大错误报文的 Type 字段值为 2,Code 字段值为 0。

3. 时间超时错误报文

在 IPv6 报文收发过程中,当设备收到 Hop Limit 字段值等于 0 的数据包,或者当设备将 Hop Limit 字段值减为 0 时,会向发送报文的源地址发送 ICMPv6 超时错误报文。对于分段重组报文的操作,如果超过定时时间,也会产生一个 ICMPv6 超时报文。

时间超时错误报文的 Type 字段值为 3,根据错误具体原因又可以细分为:

Code=0:在传输中超越了跳数限制。

Code=1:分片重组超时。

4. 参数错误报文

当目的节点收到一个 IPv6 报文时,会对报文进行有效性检查,如果发现问题会向报文的源地址回应一个 ICMPv6 参数错误差错报文。

参数错误报文的 Type 字段值为 4,根据错误具体原因又可以细分为:

Code=0:IPv6 基本头或扩展头的某个字段有错误。

Code=1:IPv6 基本头或扩展头的 NextHeader 值不可识别。

Code=2:扩展头中出现未知的选项。

四、ICMPv6 信息报文

ICMPv6 信息报文提供诊断功能和附加的主机功能,比如组播侦听发现和邻居发现。

常见的 ICMPv6 信息报文主要包括回应请求报文(Echo Request)和回应应答报文(Echo Reply),这两种报文也就是通常使用的 Ping6 报文。可以分为以下 2 种:

1. 回应请求报文

回应请求报文用于发送到目标地址,以使目标地址立即发回一个回应应答报文。回应请求报文的 Type 字段值为 128,Code 字段的值为 0。

2. 回应应答报文

当收到一个回应请求报文时,ICMPv6 会用回应应答报文响应。回应应答报文的 Type 字段的值为 129,Code 字段的值为 0。

五、ping6 完整过程梳理

如下图所示,云主机 CVM1 要和 CVM2 通信(假设 CVM 的 IPv6 地址和 VPC 已经按文档

正常配置且 IPv6 路由和地址检查都正常)。

img

从 CVM1 输入命令 ping6 2402:4e00:1200:2001::2020 -c 10,输出的结果如下图所示:

img

这是一次成功的 ping6 测试,但是这次 ping6 的细节大家也许不太了解。接下来我们主要按 OSI 协议栈来剖析整个 ping6 的工作过程以及整个过程会用到的相关报文。

img

Step1:ICMPv6 创建一个 56 字节的回应请求:

img

Step2:ICMPv6 在 56 字节的请求数据基础上加上 ICMPv6 头部:

img

回应请求报文的 Type 字段值为 128,Code 字段的值为 0,然后交给 IPv6 协议封装;

Step3:IPv6 协议在 ICMPv6 基础上增加 IPv6 头部:(网络层封装)

img

封装的源 IPv6 地址是接口网卡 v6 地址:2402:4e00:1200:2002::2011

封装的目标 IPv6 地址:2402:4e00:1200:2001::2020

Step4:根据目标 IPv6 地址和本地网段前缀做对比,发现目标地址不属于本地网段 2402:4e00:1200:2002::/64。只能查路由表进行跨网段路由,查找路由表发现没有匹配的明细路由,最终只能选择默认路由 ::/0 进行转发。

img

Step5:通过默认路由找到可以通过网卡 eth0 进行转发,但是需要数据链路层封装成功后才能从网卡转发出去。数据链路层封装的源 MAC 就是出接口 eth0 的 MAC 地址,目标 MAC 地址要从 ip -6 neigh 表(类似 IPv4 的 ARP 表)中查询到。

img

这里并没有学习到目标 IPv6 地址 2402:4e00:1200:2001::2020 对应的 MAC 地址,导致无法进行数据链路层封装。

Step6:为了学习到目标地址 2402:4e00:1200:2001::2020 对应的 MAC 地址,首先发送 NS 报文:Type 字段值为 135,Code 字段值为 0,在地址解析中的作用类似于 IPv4 中的 ARP 请求报文。

img

这里面存在着两个问题,下面我们也会给出相应的解释:

(1)被请求节点组播 IPv6 地址 FF02::1:FF00:2020 如何生成?

IPv6 中没有广播地址,也不使用 ARP。但是仍然需要从 IP 地址解析到 MAC 地址的功能。

在 IPv6 中,这个功能通过邻居请求 NS(Neighbor Solicitation)报文完成。当一个节点需要解析某个 IPv6 地址对应的 MAC 地址时,会发送 NS 报文,该报文的目的 IP 就是需要解析的 IPv6 地址对应的被请求节点组播地址,只有具有该组播地址的节点会检查处理。

被请求节点组播地址由前缀 FF02::1:FF00:0/104 和目标单播地址的最后 24 位组成。由于目标单播地址是 2402:4e00:1200:2001::2020, 所以生成的被请求节点组播地址是:FF02::1:FF00:2020

(2)被请求节点组播 MAC 地址 33:33:ff:00:20:20 如何生成?

组播 MAC 地址 48bit 的前 24bit 默认固定是 33:33:ff,后半部分是被请求节点组播地址的后 24bit,所以生成的组播 MAC 地址是 33:33:ff:00:20:20

Step7:CVM1 发送的 NS 请求报文给到虚拟网关路由器,虚拟网关路由器收到 NS 报文后查看路由表匹配到路由 2402:4e00:1200:2001::/64,代理目标地址回复一个 NA 报文:Type 字段值为 136,Code 字段值为 0,在地址解析中的作用类似于 IPv4 中的 ARP 应答报文。

img

IPv6 地址解析示意图:

img

学习到目标地址 2402:4e00:1200:2001::2020 对应的 MAC 地址是 fe:ee:1e:1b:cb:e0。学习到的 MAC 存入到 IPv6 邻居表中:

img

Step8:回到 Step5 有了目标 IPv6 地址 2402:4e00:1200:2001::2020 对应的 MAC 地址可以进行数据链路层封装,然后从网卡 eth0 发出第一个 ICMPv6 的回应请求报文:

img

从第一个 NS 到第一个 ICMPv6 回应请求的发出顺序如下:(CVM1 的网卡抓包)

img

Step9:该回应请求报文到达虚拟网关路由器 A 后查路由表找到对应的 overlay 网络隧道(这里的虚拟网关和 overlay 网络暂不用展开)转发到目标虚拟网关路由器 B,然后由虚拟网关路由器 B 转发给 CVM2 的 eth0 网卡。

img

Step10:CVM2 的网卡 eth0 收到回应请求报文后通过二层帧头的 type 字段,确认递交给 IPv6 协议处理。

img

Step11:IPv6 协议处理头部,检查目标 IP 正确,检查下一个协议头部类型是 ICMPv6。

img

img

Step12:当收到一个回应请求报文时,ICMPv6 会用回应应答报文响应。回应应答报文的 Type 字段的值为 129,Code 字段的值为 0。

CVM2 按同样的方式去查路由表封装网络层报文,按 Step5 到 Step7 解析到 MAC 后,查 ipv6 邻居表封装数据链路层的目的 MAC。

具体 CVM2 从收到第一个回应请求报文到发出第一个回应应答报文顺序如下:

img

NS 报文:

img

NA 报文:

img

学习到 MAC 后发送回应应答报文:

img

Step13:该回应应答报文到达虚拟网关路由器 B 后查路由表找到对应的 overlay 网络隧道转发到目标虚拟网关路由器 A,然后由虚拟网关路由器 A 转发给 CVM1 的 eth0 网卡。

Step14:CVM1 和 CVM2 以及虚拟路由器 A 和 B 都已经缓存了对应 IPv6 地址的 MAC,后续封装无效再发送 NS 与 NA,直接数据链路层封装后路由转发即可。

CVM1 完整的 10 个 ping6 报文截图如下:

img

CVM2 完整的 10 个 ping6 报文截图如下:

img

CVM1 的 ping6 成功的截图如下:

img

到此一次完整的 ping6 的过程就结束了,同样的道理,其他协议报文也是有这样的一个封装和解封装过程,希望本文能够让对大家有所帮助。


彻底解决 Linux 系统有 IPv6 地址但不能用的问题

一花 e 世界于 2019-02-01 21:12:04 发布

问题背景

最近在做的项目需要使用 Google 仓库里的镜像,所以需要用到 IPv6 来拉取镜像。

我使用的是 VMware 虚拟机上的 Ubuntu 16.04 Linux 系统,在用桥接模式连上校园网之后,可以看到虚拟机被分配了 IPv6 地址,但是用 ping6 ipv6.google.com 来测试始终都 ping 不通,在我花了两天尝试了网上说的几乎所有的方法都没有成功之后,我决定彻底了解一下 Linux 的网络配置,再来解决问题。

Linux 网络配置详解

关于这一点,我参考了这篇文章:

当然在实际做的过程中发现了和文章的一些出入,以下我简短的总结一下几个需要用到的文件:

  • /etc/hosts
  • /etc/host.conf
  • /etc/network/interfaces
  • /etc/resolv.conf

1. /etc/hosts

该文件默认内容如下:

127.0.0.1    localhost
127.0.1.1    ubuntu
# The following lines are desirable for IPv6 capable hosts
::1   ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

这个文件主要功能是域名解析时使用的。如果对域名解析不熟悉,可以这样理解:

你在浏览器里输入网址的时候输入的是类似于 www.baidu.com 之类的域名,但是实际上寻址是靠 IP 地址寻址,所以就需要一个解析器,将 www.baidu.com 与该网站服务器的 IP 对应起来,这就叫域名解析。

Linux 下域名解析有两种途径,一种叫本地解析,就是利用这个文件里的内容解析,另一种叫 DNS 解析,是在 DNS 服务器中查询 IP。

该文件会将右边的域名,对应到左边的 IP 地址上去。可以看到默认情况下,localhost 对应的域名为 127.0.0.1ubuntu(该域名为主机名,可以在 /etc/hostname 中更改)对应的域名为 127.0.1.1,而下面几行对应的是 IPv6 的域名解析。

注意:网上很多教程提到用改 hosts 文件的方式来获取 IP,我个人是不太建议这种方式的,因为很多情况下你以为 IPv6 一切正常,但其实根本没有连接到 DNS 服务器上,只是 hosts 文件列的比较全而已。

2. /etc/host.conf

该文件用来指定域名的解析顺序。上文提到域名解析有两种方式,该文件默认规定域名解析时先从 hosts 文件找,找不到再从 DNS 服务器上找。一般不建议修改该文件。

3. /etc/network/interfaces

这是最重要的文件,大部分的修改都是在这里进行。

该文件是确定每个网络的 IP 类型,IP 地址,子网掩码,网关 IP,广播地址,MAC 物理地址等信息,具体的设置方式网上有很多讲解,就不在此展开。

我个人一般是用 DHCP 方式(动态获取)获取所有的信息。我的 interfaces 文件如下:

auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
iface ens33 inet6 dhcp

auto 关键字指明接下来配置的网卡,一般前两行都是本地网络循环,不用修改。下面的 ens33 是我的以太网网络接口(可以用 ifconfig 指令查到),iface 关键字后指明网卡名称,然后就可以对该网络进行配置,无论是 IPv4 还是 IPv6 我都设置成了 DHCP(动态获取 IP)方式。

4. /etc/resolv.conf

该文件也是经常容易出问题的文件,如果你一开始配置的好好的,重启网卡,或者重启计算机后网络就出问题了,很有可能就和这个文件有关。

该文件是用来配置 DNS 服务器 IP 地址信息的文件。需要注意的是该文件不建议手动修改,因为该文件会根据所在的网络环境,自动更新,覆盖你的手动配置。所以说如果需要手动配置 DNS 服务器,在配置 /etc/network/interfaces 时就可以配置好。

有了上述相关知识,再解决问题就会容易很多。

查找问题

首先我的虚拟机是存在 IPv6 的地址的,而且我用主机 ping 是能够成功 ping 通 IPv6 的服务器的,我怀疑是虚拟机的 DNS 服务器没有配置好的问题,我尝试找到了 ipv6.google.com 的 IPv6 地址:

2404:6800:4008:800::200e

用虚拟机直接 ping 这个 IP 是能够成功的,这样就锁定了是 DNS 域名解析的问题。
但是在修改 /etc/network/interfaces 来手动设置 DNS 服务器的过程中发现不管怎么改,网络状态都没变,后来我甚至将 IPv6 从 DHCP 方式改成手动配置方式来配置,同样没有用,经过查询才知道 Linux 系统的两种网络配置方式。

Linux 系统的两种网络配置方式

  1. 系统文件配置
  2. 利用 Network Manager 等第三方可视化应用配置

系统文件配置已经介绍的足够多了,除了手动配置之外,Linux 系统的网络配置还可以靠可视化的第三方软件来配置。

根据网上的说法,系统默认会使用 Network Manager 等应用的配置,但是一旦 /etc/network/interfaces 等文件遭到修改就会根据系统文件配置来配置网络,但是从我目前的状况来看,很显然系统的网络配置不是从我修改的文件来配置的,所以我先关闭了 Network Manager。

/etc/init.d/network-manager stop

网上说此时查看其配置文件 /etc/NetworkManager/NetworkManager.conf,可以看到 managed=false,但显然我的 NM 的配置文件并没有受刚才的指令影响,于是我手动修改了该配置文件。
同时将 /etc/network/interfaces 里的配置都改回 DHCP 方式,重启虚拟机运行。

问题完美解决。


【故障解决】Linux 机器经常会出现 IPv6 无法访问自己网关,要重启机器才可以修复问题

一念一生~one 于 2020-11-20 12:43:31 发布

1. 故障现象

有几台业务虚机,经常会出现 IPv6 无法访问自己网关,要重启机器才可以修复。

2. 解决过程

虚拟化层排查下来,虚拟化平台、宿主机、网络负载,没看出什么问题。

但查看故障机器系统日志 /var/log/messages 里的信息,发现一直报

“Nov 18 15:32:35 hostname kernel: Route cache is full: consider increasing sysctl net.ipv [416].route.max_size.”log。

报错 log

我个人判断可能是:

  1. 是否修改过内核参数(关于网络层面的)
  2. 机器 IPv6 配置是否存在问题

经询问其他同事,给出参考解决方法如下:

sysctl -a | grep route.max_size

业务侧反馈信息如下:

net.ipv6.route.max_size 值为 4096

在这里插入图片描述

最后修改配置如下:

vim /etc/sysctl.conf

net.ipv6.route.max_size = 40960 参数值修扩大 10 倍;

然后执行

sysctl -p

可能需要重启下网络

个人认为,此故障可能很大,就是因为该因素导致的,待后续进一步观察。

3. 总结

  1. 通过本次故障,要查找发生故障是否存在共性,以排除干扰因素。
  2. 要善于对系统日志进行分析。
  3. 对于如何配置机器 IPv6 要进行总结。

via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值