Linux上 IPV6 地址,路由添加等操作

IPv6网络段与IP段解释

IPv6地址结构

地址表示

  • 8组4位十六进制数,用冒号分隔,如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 可以简化:省略前导零,连续零组用::表示(只能使用一次)

网络前缀

  • 格式:IPv6地址/前缀长度
  • 示例:2001:db8::/32表示前32位是网络地址
  • 常用前缀长度:
    • /64:标准子网前缀
    • /48:通常分配给站点
    • /32:分配给ISP

特殊地址

  • ::1:本地回环(相当于IPv4的127.0.0.1)
  • fe80::/10:链路本地地址
  • fc00::/7:唯一本地地址(类似IPv4私有地址)
  • ff00::/8:多播地址

IPv6基本操作

1. 查看IPv6配置

 
# 查看所有接口的IPv6地址
ip -6 addr show
# 或
ifconfig -a

# 查看特定接口
ip -6 addr show eth0

# 查看IPv6路由表
ip -6 route show
# 或
route -A inet6
 
 

2. 临时添加IPv6地址

 
# 添加全局单播地址
sudo ip -6 addr add 2001:db8::1/64 dev eth0

# 添加链路本地地址(自动生成)
sudo ip -6 addr add fe80::1/64 dev eth0

# 添加多个地址
sudo ip -6 addr add 2001:db8::100/64 dev eth0
 
 

3. 永久配置IPv6地址

Ubuntu/Debian (netplan)

 
# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - "2001:db8::1/64"
        - "2001:db8::100/64"
      gateway6: "2001:db8::ff"
      nameservers:
        addresses: ["2001:4860:4860::8888", "2001:4860:4860::8844"]
 
 

CentOS/RHEL/Fedora

 
# /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=yes
IPV6ADDR=2001:db8::1/64
IPV6ADDR_SECONDARIES="2001:db8::100/64"
IPV6_DEFAULTGW=2001:db8::ff
 
 

4. 删除IPv6地址

 
# 删除特定IPv6地址
sudo ip -6 addr del 2001:db8::1/64 dev eth0

# 删除所有IPv6地址
sudo ip -6 addr flush dev eth0
 
 

5. IPv6路由管理

 
# 查看路由
ip -6 route show
ip -6 route list table main

# 添加默认网关
sudo ip -6 route add default via 2001:db8::ff dev eth0

# 添加静态路由
sudo ip -6 route add 2001:db8:1::/64 via 2001:db8::1 dev eth0
sudo ip -6 route add 2001:db8:2::/64 via 2001:db8::2 metric 100

# 删除路由
sudo ip -6 route del default via 2001:db8::ff
sudo ip -6 route del 2001:db8:1::/64
 
 

6. 启用/禁用IPv6

 
# 临时禁用IPv6(重启后恢复)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

# 临时启用IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0

# 永久配置
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
 
 

7. 邻居发现和邻居表

 
# 查看IPv6邻居表(类似IPv4的ARP表)
ip -6 neigh show
ip -6 neighbor show

# 添加静态邻居条目
sudo ip -6 neigh add 2001:db8::2 lladdr 00:11:22:33:44:55 dev eth0 nud permanent

# 删除邻居条目
sudo ip -6 neigh del 2001:db8::2 dev eth0
 
 

8. 网络连通性测试

 
# ping测试
ping6 2001:db8::1
ping6 -I eth0 2001:4860:4860::8888

# 路由追踪
traceroute6 example.com
tracepath6 2001:db8::1

# DNS解析
dig AAAA example.com
host -t AAAA example.com
 
 

9. 防火墙配置示例

 
# 使用ip6tables
# 允许入站SSH
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许ICMPv6(IPv6必需)
sudo ip6tables -A INPUT -p icmpv6 -j ACCEPT

# 查看规则
sudo ip6tables -L -n -v

# 保存规则(取决于发行版)
sudo ip6tables-save > /etc/iptables/rules.v6
 
 

实用脚本示例

批量添加IPv6地址

 
#!/bin/bash
# 为接口添加多个IPv6地址
INTERFACE="eth0"
PREFIX="2001:db8::"
NETWORK="/64"

for i in {1..10}; do
    sudo ip -6 addr add ${PREFIX}${i}${NETWORK} dev ${INTERFACE}
done
 
 

监控IPv6流量

 
# 查看实时IPv6流量
sudo ip -6 -s link show eth0

# 使用tcpdump捕获IPv6流量
sudo tcpdump -i eth0 ip6
sudo tcpdump -i eth0 ip6 host 2001:db8::1
 
 

故障排查

 
# 检查IPv6是否启用
cat /proc/sys/net/ipv6/conf/all/disable_ipv6

# 查看IPv6监听端口
ss -ltpn6
netstat -tlnp6

# 查看详细的接口信息
ip -6 -d addr show eth0

# 检查路由表
ip -6 route get 2001:4860:4860::8888
 
 

注意事项

  1. 隐私扩展:现代Linux默认启用临时地址,可增加隐私保护
  2. 重复地址检测:IPv6会自动进行DAD检查地址冲突
  3. 自动配置:无状态地址自动配置(SLAAC)允许设备自行配置地址
  4. MTU问题:IPv6要求最小MTU为1280字节
  5. ICMPv6重要性:IPv6依赖ICMPv6运行,不要完全屏蔽
这些命令涵盖了IPv6在Linux中的基本操作,实际使用时需要根据网络环境和需求进行调整。
posted @ 2026-02-04 10:53  你说夕阳很美  阅读(125)  评论(0)    收藏  举报