前置知识: Networking

IPv6 网络命令

2 min入门

IPv6 实操:地址与邻居发现命令、SLAAC 配置检查、双栈环境排障常用命令。

IPv6 地址配置

基本写法:查看 IPv6 地址 ip -6 addr show

# 查看所有接口的 IPv6 地址
ip -6 addr show
# 查看指定接口
ip -6 addr show dev eth0

基本写法:添加 IPv6 地址 ip -6 addr add <IPv6/前缀> dev <接口>

# 为 eth0 添加 IPv6 地址
ip -6 addr add 2001:db8::1/64 dev eth0

基本写法:删除 IPv6 地址 ip -6 addr del <IPv6/前缀> dev <接口>

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

基本写法:启用 IPv6 sysctl -w net.ipv6.conf.all.disable_ipv6=0

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

基本写法:禁用 IPv6 sysctl -w net.ipv6.conf.all.disable_ipv6=1

# 临时禁用 IPv6
sysctl -w net.ipv6.conf.all.disable_ipv6=1

IPv6 路由配置

基本写法:查看 IPv6 路由表 ip -6 route show

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

基本写法:添加默认路由 ip -6 route add default via <网关> dev <接口>

# 添加 IPv6 默认路由
ip -6 route add default via 2001:db8::1 dev eth0

基本写法:添加静态路由 ip -6 route add <网段> via <网关>

# 添加到指定网段的 IPv6 路由
ip -6 route add 2001:db8:1::/64 via 2001:db8::1

基本写法:删除路由 ip -6 route del <网段> via <网关>

# 删除指定 IPv6 路由
ip -6 route del 2001:db8:1::/64 via 2001:db8::1

基本写法:查看路由缓存 ip -6 route get <目标>

# 查看到目标的实际路由
ip -6 route get 2001:db8::100

IPv6 邻居发现

基本写法:查看邻居表 ip -6 neigh show

# 查看 IPv6 邻居发现缓存(类似 ARP)
ip -6 neigh show

基本写法:添加静态邻居 ip -6 neigh add <IPv6> lladdr <MAC> dev <接口>

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

基本写法:删除邻居条目 ip -6 neigh del <IPv6> dev <接口>

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

基本写法:刷新邻居缓存 ip -6 neigh flush dev <接口>

# 刷新指定接口的邻居缓存
ip -6 neigh flush dev eth0

基本写法:查看邻居代理 ip -6 neigh show proxy

# 查看 IPv6 邻居代理
ip -6 neigh show proxy

IPv6 ping 与探测

基本写法:基本 ping6 测试 ping6 <目标>

# 测试 IPv6 连通性
ping6 2001:db8::1
ping6 -c 4 2001:db8::1

基本写法:指定接口 ping ping6 -I <接口> <目标>

# 通过指定接口 ping
ping6 -I eth0 fe80::1

基本写法:链路本地地址 ping ping6 -I <接口> fe80::<地址>

# ping 链路本地地址必须指定接口
ping6 -I eth0 fe80::1

基本写法:大包 ping 测试 ping6 -s <字节> <目标>

# 发送大包测试
ping6 -s 1400 -c 4 2001:db8::1

基本写法:持续 ping ping6 <目标>

# 持续 ping 直到手动停止
ping6 2001:db8::1

IPv6 路由跟踪

基本写法:traceroute6 跟踪 traceroute6 <目标>

# IPv6 路由跟踪
traceroute6 2001:db8::1

基本写法:指定跳数 traceroute6 -m <跳数> <目标>

# 最多 15 跳
traceroute6 -m 15 2001:db8::1

基本写法:指定探测次数 traceroute6 -q <次数> <目标>

# 每跳探测 3 次
traceroute6 -q 3 2001:db8::1

基本写法:tracepath6 跟踪 tracepath6 <目标>

# 显示路径并探测 MTU
tracepath6 2001:db8::1

基本写法:mtr6 跟踪 mtr -6 <目标>

# 使用 mtr 的 IPv6 模式
mtr -6 2001:db8::1

IPv6 网络服务

基本写法:telnet IPv6 服务 telnet -6 <地址> <端口>

# 测试 IPv6 端口连通性
telnet -6 2001:db8::1 80

基本写法:curl IPv6 curl -6 http://[<IPv6>]:<端口>/

# 通过 IPv6 访问 HTTP 服务
curl -6 -v http://[2001:db8::1]:8080/

基本写法:ssh 通过 IPv6 ssh -6 <用户>@<IPv6>

# SSH 连接到 IPv6 主机
ssh -6 user@2001:db8::1

基本写法:netcat IPv6 测试 nc -6 <地址> <端口>

# 使用 nc 测试 IPv6 端口
nc -6 -zv 2001:db8::1 80

基本写法:wget 通过 IPv6 wget -6 http://[<IPv6>]/

# 使用 wget 强制 IPv6 下载
wget -6 http://[2001:db8::1]/index.html

IPv6 DNS 解析

基本写法:AAAA 记录查询 dig AAAA <域名>

# 查询域名 IPv6 地址
dig AAAA example.com
dig AAAA example.com +short

基本写法:nslookup 查询 IPv6 nslookup -type=AAAA <域名>

# 使用 nslookup 查询 IPv6
nslookup -type=AAAA example.com

基本写法:host 查询 IPv6 host -t AAAA <域名>

# 使用 host 命令查询
host -t AAAA example.com

基本写法:反向 DNS 解析 dig -x <IPv6>

# IPv6 反向解析
dig -x 2001:db8::1

基本写法:指定 DNS 服务器查询 dig @<DNS服务器> AAAA <域名>

# 通过指定 DNS 服务器查询 IPv6
dig @8.8.8.8 AAAA example.com

IPv6 隧道配置

基本写法:6to4 隧道 ip tunnel add <隧道> mode sit remote <IPv4> local <IPv4>

# 创建 6to4 隧道
ip tunnel add tun6to4 mode sit remote any local 203.0.113.1
ip link set tun6to4 up
ip -6 addr add 2002:cb00:7101::1/16 dev tun6to4
ip -6 route add 2002::/16 dev tun6to4

基本写法:GRE IPv6 隧道 ip tunnel add <名称> mode ip6gre remote <IPv6> local <IPv6>

# 创建 IPv6 GRE 隧道
ip tunnel add gre6 mode ip6gre remote 2001:db8::2 local 2001:db8::1
ip link set gre6 up

基本写法:删除隧道 ip tunnel del <隧道名>

# 删除隧道接口
ip tunnel del tun6to4

基本写法:查看隧道 ip tunnel show

# 查看所有隧道
ip tunnel show

基本写法:6in4 隧道配置

# Hurricane Electric 隧道 broker 配置示例
ip tunnel add he-ipv6 mode sit remote 216.66.84.42 local 203.0.113.1
ip link set he-ipv6 up
ip addr add 2001:470:xxxx::2/64 dev he-ipv6
ip -6 route add default dev he-ipv6

IPv6 多播与组管理

基本写法:查看多播组 ip -6 maddr show

# 查看 IPv6 多播组
ip -6 maddr show

基本写法:查看接口多播 ip -6 maddr show dev <接口>

# 查看指定接口多播组
ip -6 maddr show dev eth0

基本写法:加入多播组 ip -6 maddr add <多播地址> dev <接口>

# 加入指定多播组
ip -6 maddr add ff02::1 dev eth0

基本写法:查看 MLD netstat -g -6

# 查看 MLD(组播侦听者发现)
netstat -gn

基本写法:多播路由 ip -6 mroute show

# 查看 IPv6 多播路由
ip -6 mroute show

IPv6 防火墙

基本写法:ip6tables 基本规则 ip6tables -A INPUT -p tcp --dport <端口> -j ACCEPT

# 允许 IPv6 SSH
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 ICMPv6(必需)
ip6tables -A INPUT -p icmpv6 -j ACCEPT

基本写法:允许 ICMPv6 ip6tables -A INPUT -p icmpv6 -j ACCEPT

# ICMPv6 对 IPv6 必需(邻居发现等)
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT

基本写法:设置默认策略 ip6tables -P INPUT DROP

# 设置默认策略
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT

基本写法:查看规则 ip6tables -L -n -v

# 查看 IPv6 防火墙规则
ip6tables -L -n -v
ip6tables -L -n --line-numbers

基本写法:保存规则 ip6tables-save > /etc/iptables/rules.v6

# 保存 IPv6 防火墙规则
ip6tables-save > /etc/iptables/rules.v6
ip6tables-restore < /etc/iptables/rules.v6

IPv6 故障排查

基本写法:验证 IPv6 启用 cat /proc/sys/net/ipv6/conf/all/disable_ipv6

# 检查 IPv6 是否启用
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
# 0 表示启用,1 表示禁用

基本写法:测试 IPv6 连通性 ping6 -c 3 2001:4860:4860::8888

# 测试到 Google IPv6 DNS 的连通性
ping6 -c 3 2001:4860:4860::8888

基本写法:查看 IPv6 监听端口 ss -6 -tlnp

# 查看服务是否监听 IPv6
ss -6 -tlnp
netstat -6 -tlnp

基本写法:抓包分析 IPv6 tcpdump -i <接口> ip6 -n

# 抓取 IPv6 数据包
tcpdump -i eth0 ip6 -n
tcpdump -i eth0 icmp6 -n

基本写法:检查 IPv6 路由 ip -6 route show

# 检查 IPv6 路由配置是否正确
ip -6 route show
ip -6 rule show