在CentOS 9 Stream上配置IPv6子网NDP代理完整指南

背景和问题

在IPv6环境中,服务提供商通常会分配一个/64的子网,但默认情况下只有一个地址可用。要使整个子网内的任意IPv6地址都能被路由到您的服务器,需要配置NDP(邻居发现协议)代理。本文介绍如何在CentOS 9 Stream上实现此功能。

什么是NDP代理?

IPv6使用邻居发现协议(NDP)来替代IPv4中的ARP协议。当路由器接收到发往特定IPv6地址的数据包时,它会发送邻居请求来确定哪台设备拥有该地址。NDP代理允许您的服务器响应发往整个子网的请求,即使这些地址尚未配置在服务器上。

配置步骤

1. 启用IPv6转发

首先,需要启用IPv6转发和NDP代理功能:

# 配置IPv6转发
echo "net.ipv6.conf.all.forwarding=1" > /etc/sysctl.d/99-ipv6-proxy.conf
echo "net.ipv6.conf.default.forwarding=1" >> /etc/sysctl.d/99-ipv6-proxy.conf
echo "net.ipv6.conf.all.proxy_ndp=1" >> /etc/sysctl.d/99-ipv6-proxy.conf
echo "net.ipv6.conf.default.proxy_ndp=1" >> /etc/sysctl.d/99-ipv6-proxy.conf

# 为特定接口启用转发和代理
echo "net.ipv6.conf.enp1s0.forwarding=1" >> /etc/sysctl.d/99-ipv6-proxy.conf
echo "net.ipv6.conf.enp1s0.proxy_ndp=1" >> /etc/sysctl.d/99-ipv6-proxy.conf

# 应用配置
sysctl -p /etc/sysctl.d/99-ipv6-proxy.conf

2. 安装NDP代理守护程序(ndppd)

# 启用EPEL源
dnf install -y epel-release

# 安装ndppd
dnf install -y ndppd

3. 配置ndppd !重要!

# 创建配置文件,替换enp1s0为您的实际网络接口名称  可以ifconfig看
cat > /etc/ndppd.conf << EOF
proxy enp1s0 {
    router no
    rule 2001:19f0:xxxx:xxxx::/64 {
        static
    }
}
EOF

4. 创建PID文件目录

# 创建PID文件目录
mkdir -p /var/run/ndppd
chmod 755 /var/run/ndppd

5. 启动ndppd服务

# 启用ndppd服务开机自启
systemctl enable ndppd

# 启动ndppd服务
systemctl start ndppd

6. 添加本地路由

这是关键步骤,确保系统能处理发往子网内任意地址的流量:

# 添加本地路由 !!非常重要!!
ip -6 route add local 2001:19f0:xxxx:xxxx::/64 dev lo

7. 配置防火墙

# 允许IPv6相关流量
firewall-cmd --permanent --zone=public --add-protocol=ipv6-icmp
firewall-cmd --permanent --zone=public --add-service=dhcpv6-client
firewall-cmd --reload

验证配置

使用tcpdump监控NDP请求和响应:

# 监控NDP请求和响应 验证服务商是否支持NDP已知vultr支持
tcpdump -i enp1s0 icmp6 and '(ip6[40] = 135 or ip6[40] = 136)'

正常情况下,当有外部设备尝试访问子网内的任意地址时,您应该能看到:

  1. 外部设备发送邻居请求(Neighbor Solicitation)
  2. 您的服务器回应邻居公告(Neighbor Advertisement)

排障要点

  1. 确保使用正确的网络接口名称:使用ip -6 addr show命令检查实际的接口名称
  2. 检查ndppd服务状态:使用systemctl status ndppd确认服务正在运行
  3. PID文件权限问题:这通常不影响功能,只要服务显示为"active (running)"
  4. 务必添加本地路由:如果NDP代理工作但仍无法ping通,很可能是缺少本地路由
  5. 检查防火墙规则:确保允许ICMPv6流量

完整的解决方案

通过配置NDP代理和本地路由,您的CentOS 9 Stream服务器现在可以响应整个IPv6子网的请求,使子网内的任意地址都能被路由到服务器。这对于需要使用多个IPv6地址的场景(如网站托管、VPN服务等)非常有用。

这种方法比手动为每个IPv6地址配置NDP代理更加高效,能够处理整个/64子网(包含约18.4×10^18个地址)。

最后修改:2025 年 04 月 24 日
如果觉得我的文章对你有用,请随意赞赏