【NetworkManager】NM服务监听全网IPV6地址

当系统启用IPv6时,NetworkManager服务会监听全0地址的58号协议(ICMPv6),用于DAD检测。这可能导致不必要的资源占用。关闭IPv6或使用防火墙规则可以解决此问题。关闭方法包括修改网卡配置或使用sysctl命令禁用IPv6,或通过firewalld添加规则限制访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题现象

当系统启用IPV6时,NetworkManager服务默认会存在全0地址监听,此处58不是端口,是协议号,表示icmpv6,现象如下:

# netstat -anp | grep Network
raw6 0 0 :::58 :::* 7 2581242/NetworkMana

2 原因分析

2.1 raw6是什么?

raw6是IPV6的原始套接字(RAW SOCKET),
可以通过查看/proc/net/sockstat6文件进行确认:

[root@localhost:~ ]#  cat /proc/net/sockstat6
TCP6: inuse 1
UDP6: inuse 0
UDPLITE6: inuse 0
RAW6: inuse 1
FRAG6: inuse 0 memory 0
[root@localhost:~ ]# 
2.2 :::地址是什么?

在ipv6中,::: 表示0地址,在这里表示所有ip的意思
https://qastack.cn/superuser/661188/what-is-in-the-local-address-of-netstat-output

2.3 58是什么服务的端口?

58不是端口,是协议号,对应的是icmp6协议,即IPV6上的ICMP协议,可以使用以下命令查询端口对应协议类型:

[root@localhost:~ ]# ss -l -6 -p -e -n
Netid      State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      Process                                                                        
icmp6      UNCONN       0            0                              *:58                          *:*          users:(("NetworkManager",pid=229210,fd=21)) ino:685747 sk:1 v6only:0 <->      
tcp        LISTEN       0            128                         [::]:22                       [::]:*          users:(("sshd",pid=2780,fd=4)) ino:45366 sk:2 v6only:1 <->  

NetworkManager服务在启动时调用libndp进行设置,默认监听全0网段,且无法通过命令行参数指定或者通过配置文件进行修改。

2.4 监听所有地址的58号协议目的是什么?

用于DAD检测
在IPv6环境下,当一个主机企图配置一个IPv6地址时,会先进行地址重复性检测,以确认在链路上该地址的唯一性。这一过程称为DAD(Duplicate Address Detection)。
比如在启动一个开启了IPv6的网卡时,网卡上会先自动配置一个link-local地址——以fe80开头的地址,在这个地址生效前会进行DAD检测。
DAD检测的关键就是NS报文,注意到该报文的源地址为全0,目的地址为一个多播地址,Target指向自己欲配置的IPv6地址。一段时间内,若链路上没有谁回复NA,或者在链路上收到同样结构的NS报文,则认为该地址在链路上具有唯一性,配置生效
整个过程中用到的NS 与 NA 报文都是icmpv6 协议的

3 解决方法

在不使用IPV6的场景下,可以通过禁用IPV6来关闭此全零监听,否则产品应根据实际业务组网情况和使用场景,决定使用防火墙等手段进行网络隔离。

方法一:关闭网卡的ipv6功能

在不使用IPV6的场景下,可以通过禁用IPV6来关闭此全零监听,否则应根据实际业务组网情况和使用场景,决定使用防火墙等手段进行网络隔离。
关闭ipv6功能既可以通过网卡配置文件实现,也可以通过sysctl实现

1 修改网卡配置关闭ipv6功能

/etc/sysconfig/network-scripts/ifcfg-ethX 配置IPV6_AUTOCONF=“yes” 会开启此端口监听,配置为IPV6_AUTOCONF="no"会关闭58 端口监听

修改配置文件并重启网卡生效:

root localhost:~ $ cat  /etc/sysconfig/network-scripts/ifcfg-eth6 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPADDR=10.137.55.254
IPV6INIT="yes"
IPV6_AUTOCONF="no"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth6"
DEVICE="eth6"
ONBOOT="yes"
root localhost:~ $ ifdown eth6 && ifup eth6</span>
2 通过sysctl借用ipv6

永久禁用所有接口的IPv6方法:
通过 /etc/sysctl.conf 文件对 /proc 进行永久修改,
复制代码代码如下:

# 禁用整个系统所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1

让配置文件立即生效

sysctl -p

禁用某一个指定接口的IPv6(例如:eth0, lo)

net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

最终效果:
请添加图片描述

方法二:防火墙

NetworkManager.service有使用场景时,添加firewalld规则,限制对具体网络的访问。例如,使用如下配置,将删掉端口为58的地址请求(涉及ipv6):

firewall-cmd --permanent --add-rich-rule="rule family=ipv6  port protocol=tcp port=58 drop"

方法三:关闭NetworkManager服务

关闭服务:

systemctl  stop NetworkManager

禁止开机启动:

systemctl  disable NetworkManager
### 如何通过服务器Ping一个IPv6地址Linux环境下,可以通过`ping6`命令来测试与目标IPv6地址之间的连通性。以下是关于如何使用该命令的具体说明: #### 使用 `ping6` 命令 在Linux系统中,`ping6` 是专门用于测试IPv6网络连通性的工具。其基本语法如下: ```bash ping6 [选项] 目标IPv6地址 ``` 例如,如果要Ping一个特定的IPv6地址(如 `fddb:fe2a:ab1e::c0a8:2/64`),可以执行以下命令: ```bash ping6 fddb:fe2a:ab1e::c0a8:2 ``` 此操作会向指定的目标发送ICMPv6回显请求并等待响应[^1]。 #### 配置本地接口支持IPv6 为了能够成功Ping到远程IPv6地址,首先需要确认本机已正确配置了IPv6地址。如果没有预先设置好IPv6地址,则可能无法正常通信。可以通过以下方式临时分配一个IPv6地址给网卡eth0: ```bash ifconfig eth0 add fab4::2b3b:da11:b6c7:7a91/64 ``` 或者更推荐的方式是利用NetworkManager管理器实现持久化更改: ```bash nmcli connection modify eth0 ipv6.addresses fddb:fe2a:ab1e::c0a8:2/64 ipv6.method manual nmcli connection up eth0 ``` 以上步骤确保了本地设备具备有效的IPv6地址以便参与后续的操作[^2]。 #### 注意事项 当尝试从一台运行着Linux系统的服务器去访问另一台同样启用了IPv6协议栈的工作站时,可能会遇到防火墙阻止的情况。此时应当核查两端机器上的iptables规则或者其他安全策略是否允许ICMPv6类型的流量通过[^3]。 另外值得注意的是,在实际环境中还可能存在路由器或其他中间节点对于某些特殊范围内的IPv6地址实施过滤的现象,这也会影响最终的结果准确性。 ```bash # 示例代码展示完整的流程 sudo ifconfig eth0 add fe80::abcd:def1:ghij/64 # 添加本地IPV6地址 sudo ping6 ff02::1 # 测试链路本地组播名解析功能 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值