debian系统下 如如何配置IPv6隧道地址
- 网络技术
- 2026-10-05
- 41 阅读
- 0 点赞
Debian 系统配置 IPv6 6in4 隧道:从临时配置到永久生效
有些 VPS 服务商只提供 IPv4,却没有原生 IPv6。遇到这种情况,如果希望服务器能够访问 IPv6 网络,一个比较经典的解决方案就是使用 IPv6 Tunnel(IPv6 隧道)。
其中比较常见的是 6in4,也就是 SIT 隧道。
它的基本原理是:
IPv6 数据包
↓
封装
↓
IPv4 网络
↓
IPv6 Tunnel Server
↓
解封装
↓
IPv6 Internet
对于 Debian VPS 来说,配置 6in4 隧道并不复杂。本文以 Debian 为例,从临时配置开始,一直到开机自动生效,并介绍常见的排错方法。
一、什么是 6in4 / SIT 隧道
6in4 的核心思想,是把 IPv6 数据包封装在 IPv4 数据包里面传输。
假设你的 VPS 只有一个公网 IPv4:
本地 VPS IPv4:
1.2.3.4
而隧道服务商提供了一台 IPv4 地址为:
5.6.7.8
的 Tunnel Server。
同时分配给你一个 IPv6 网段:
2001:db8:1234:5678::/64
那么可以建立:
VPS
IPv4: 1.2.3.4
IPv6: 2001:db8:1234:5678::2
│
│ 6in4 / SIT
↓
Tunnel Server
IPv4: 5.6.7.8
IPv6: 2001:db8:1234:5678::1
│
↓
IPv6 Internet
Linux 内核本身就支持这种隧道,因此 Debian 不需要额外安装复杂的软件。
二、开始配置之前需要哪些参数
假设隧道服务商提供了以下信息:
本地 IPv4:
1.2.3.4
Tunnel Server IPv4:
5.6.7.8
本地 IPv6:
2001:db8:1234:5678::2/64
对端 IPv6:
2001:db8:1234:5678::1/64
其中:
- 1.2.3.4 是你的 VPS 公网 IPv4
- 5.6.7.8 是 IPv6 Tunnel Server 的 IPv4
- 2001:db8:1234:5678::2 是 VPS 的 IPv6
- 2001:db8:1234:5678::1 是隧道对端地址
实际使用时,需要替换成服务商提供的真实参数。
三、确认 Debian 是否支持 SIT
首先检查 SIT 模块:
lsmod | grep sit
如果没有输出,可以手动加载:
modprobe sit
再次检查:
lsmod | grep sit
正常情况下应该可以看到类似:
sit 36864 0
如果 modprobe sit 没有报错,通常就说明内核支持 SIT。
四、创建 IPv6 隧道
首先创建一个名为 sit1 的隧道:
ip tunnel add sit1 mode sit \
local 1.2.3.4 \
remote 5.6.7.8 \
ttl 255
这里几个参数非常重要:
mode sit
表示使用 SIT,也就是 6in4。
local 1.2.3.4
表示本机 IPv4 地址。
remote 5.6.7.8
表示 Tunnel Server 的 IPv4 地址。
ttl 255
表示 IPv4 封装包的 TTL。
创建完成以后:
ip tunnel show
应该可以看到类似:
sit0: ipv6/ip remote any local any ttl 64
sit1: ipv6/ip remote 5.6.7.8 local 1.2.3.4 ttl 255
五、启用隧道接口
执行:
ip link set sit1 up
然后检查:
ip link show sit1
如果看到:
state UNKNOWN
不一定是错误。
对于隧道接口来说,这种状态比较常见,真正重要的是接口是否已经启用以及后面的 IPv6 路由是否正常。
六、配置 IPv6 地址
接下来给 sit1 添加 IPv6 地址:
ip -6 addr add 2001:db8:1234:5678::2/64 dev sit1
检查:
ip -6 addr show dev sit1
应该看到:
inet6 2001:db8:1234:5678::2/64
至此,本机的 IPv6 地址已经配置到隧道接口上。
七、配置 IPv6 默认路由
接下来最关键的一步,是配置 IPv6 默认路由。
执行:
ip -6 route add default \
via 2001:db8:1234:5678::1 \
dev sit1
然后查看路由:
ip -6 route
正常情况下应该可以看到:
default via 2001:db8:1234:5678::1 dev sit1
2001:db8:1234:5678::/64 dev sit1 proto kernel
这里的:
default via 2001:db8:1234:5678::1
非常关键。
它告诉 Linux:
所有没有匹配到其他路由的 IPv6 流量,都通过这个 IPv6 Tunnel Server 发送。
八、测试 IPv6 是否正常
首先测试隧道对端:
ping -6 2001:db8:1234:5678::1
如果能够正常返回:
64 bytes from ...
说明本机和 Tunnel Server 之间的 IPv6 通信已经建立。
接下来测试公网 IPv6。
例如:
ping -6 2001:4860:4860::8888
这是 Google 的 IPv6 DNS 地址。
如果可以正常通信,再测试:
curl -6 https://ifconfig.co
或者:
curl -6 https://api64.ipify.org
如果返回你的 IPv6 地址,例如:
2001:db8:1234:5678::2
基本可以确认 IPv6 出口已经正常。
九、如果 ping 不通,先不要急着重装系统
IPv6 隧道出现问题时,最常见的原因并不是 Debian 配置错误,而是 IPv4 网络没有允许隧道流量通过。
6in4 使用的是:
IPv4 Protocol 41
注意这里不是 TCP 41,也不是 UDP 41。
而是:
IP Protocol 41
因此 VPS 服务商、安全组以及服务器防火墙都必须允许 Protocol 41。
例如使用 iptables 时,需要注意:
iptables -A INPUT -p 41 -j ACCEPT
iptables -A OUTPUT -p 41 -j ACCEPT
如果 VPS 服务商有独立的安全组,还需要在服务商控制面板中允许 IPv4 Protocol 41。
这是 6in4 配置中非常容易踩坑的地方。
十、检查 IPv4 到 Tunnel Server 是否正常
首先不要直接测试 IPv6。
先测试 Tunnel Server 的 IPv4:
ping 5.6.7.8
如果 IPv4 本身都无法访问,那么 IPv6 隧道当然无法正常工作。
接下来检查路由:
ip route get 5.6.7.8
确认访问 Tunnel Server 的 IPv4 流量确实通过正确的公网网卡出去。
还可以使用:
tcpdump -ni any proto 41
观察是否有 Protocol 41 流量。
如果执行后完全没有数据包,很可能是:
- VPS 防火墙拦截
- 云厂商安全组拦截
- Tunnel Server 配置错误
- 本地 IPv4 地址填写错误
十一、临时配置的缺点
前面的命令直接使用:
ip tunnel add
ip link set
ip -6 addr add
ip -6 route add
配置虽然简单,但存在一个问题:
重启服务器之后,这些配置可能全部消失。
因此正式使用时,最好把配置写入 Debian 的网络配置中。
十二、使用 /etc/network/interfaces 永久配置
如果系统使用 ifupdown,可以编辑:
nano /etc/network/interfaces
加入:
auto sit1
iface sit1 inet6 v4tunnel
address 2001:db8:1234:5678::2
netmask 64
endpoint 5.6.7.8
local 1.2.3.4
ttl 255
gateway 2001:db8:1234:5678::1
保存以后重新加载网络:
systemctl restart networking
然后检查:
ip -6 addr
以及:
ip -6 route
最后重新测试:
ping -6 2001:4860:4860::8888
十三、不要忽略 Debian 的网络管理方式
这里需要特别提醒一点:
不同 Debian VPS 的网络管理方式可能完全不同。
常见的有:
ifupdown
systemd-networkd
NetworkManager
ifupdown2
所以不要看到网上的教程就直接把配置全部写进:
/etc/network/interfaces
如果你的服务器使用的是 systemd-networkd,应该按照 systemd-networkd 的方式配置。
可以先检查:
systemctl is-active systemd-networkd
以及:
systemctl is-active NetworkManager
再判断应该使用哪一种配置方式。
十四、检查 IPv6 是否被系统禁用
如果隧道配置看起来都正确,但是 IPv6 依然无法工作,可以检查:
sysctl net.ipv6.conf.all.disable_ipv6
正常应该返回:
net.ipv6.conf.all.disable_ipv6 = 0
如果返回:
= 1
说明 IPv6 被禁用了。
可以临时启用:
sysctl -w net.ipv6.conf.all.disable_ipv6=0
同时检查:
sysctl net.ipv6.conf.default.disable_ipv6
如果也为 1,可以:
sysctl -w net.ipv6.conf.default.disable_ipv6=0
如果需要永久保存,可以编辑:
nano /etc/sysctl.conf
加入:
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
然后:
sysctl -p
十五、IPv6 能通,但是网站访问不了
如果:
ping -6 2001:4860:4860::8888
可以成功,但是:
curl -6 https://example.com
失败,那么问题可能不是隧道本身。
需要进一步检查 DNS。
例如:
resolvectl status
如果系统使用 systemd-resolved,也可以测试:
resolvectl query google.com
另外还可以直接使用 IPv6 地址测试:
curl -6 https://[IPv6地址]/
这样可以把 DNS 问题和 IPv6 网络问题区分开。
十六、如果是为了 Docker,需要进一步配置
很多人给 VPS 配 IPv6,并不是单纯为了让 VPS 自己访问 IPv6 网站,而是希望:
VPS
↓
Docker
↓
容器
↓
IPv6 Internet
这种情况下,仅仅配置 SIT 隧道还不够。
还需要考虑:
- IPv6 转发
- Docker IPv6 网络
- IPv6 子网
- 路由
- 防火墙
- Neighbor Discovery
- 是否需要 NAT66
例如开启 IPv6 转发:
sysctl -w net.ipv6.conf.all.forwarding=1
永久配置:
net.ipv6.conf.all.forwarding=1
不过这里有一个非常重要的问题:
最好不要简单地把 IPv6 当成 IPv4 来做 NAT。
如果 Tunnel 服务商给了你一个完整的 IPv6 子网,例如:
2001:db8:1234:1000::/64
更合理的方案通常是进行路由,让 Docker/其他设备直接使用全球 IPv6 地址,而不是优先考虑 NAT66。
十七、如果服务商给的是 /48 或 /56
如果你的 Tunnel 服务商给的不是一个简单的 /64,而是:
2001:db8:1234::/48
那么情况就完全不一样了。
你实际上拥有:
2001:db8:1234:0001::/64
2001:db8:1234:0002::/64
2001:db8:1234:0003::/64
...
大量 IPv6 子网。
这种情况下,可以规划成:
VPS
│
├── Tunnel
│
├── 主机网络
│ └── 2001:db8:1234:0001::/64
│
├── Docker
│ └── 2001:db8:1234:0002::/64
│
├── KVM
│ └── 2001:db8:1234:0003::/64
│
└── 其他服务器
└── 2001:db8:1234:0004::/64
这才是 IPv6 最舒服的使用方式。
IPv6 最大的优势之一,本来就是拥有足够大的地址空间,让不同设备拥有独立的全球可路由地址。
十八、常用排查命令
配置 IPv6 隧道时,下面这些命令非常有用。
查看隧道:
ip tunnel show
查看网卡:
ip link show
查看 IPv6 地址:
ip -6 addr
查看 IPv6 路由:
ip -6 route
查看 IPv6 邻居:
ip -6 neigh
查看 IPv4 路由:
ip route
测试 IPv6:
ping -6 2001:4860:4860::8888
查看公网 IPv6:
curl -6 https://ifconfig.co
抓取 Protocol 41:
tcpdump -ni any proto 41
查看 IPv6 相关内核参数:
sysctl -a | grep ipv6
十九、一套最小化配置总结
如果只是想快速把 Debian 的 IPv4 VPS 通过 6in4 变成可以访问 IPv6 的服务器,核心步骤其实只有这些:
modprobe sit
创建隧道:
ip tunnel add sit1 mode sit \
local 1.2.3.4 \
remote 5.6.7.8 \
ttl 255
启动:
ip link set sit1 up
添加 IPv6:
ip -6 addr add \
2001:db8:1234:5678::2/64 \
dev sit1
添加默认路由:
ip -6 route add default \
via 2001:db8:1234:5678::1 \
dev sit1
测试:
ping -6 2001:4860:4860::8888
查看公网 IPv6:
curl -6 https://ifconfig.co
如果这些全部正常,说明最基本的 IPv6 6in4 隧道已经建立成功。
二十、最后总结
Debian 配置 IPv6 6in4 隧道,真正需要理解的其实只有三个东西:
第一,SIT 隧道。
IPv4
↓
SIT / 6in4
↓
IPv6
第二,IPv6 地址。
例如:
2001:db8:1234:5678::2/64
第三,IPv6 默认路由。
default via 2001:db8:1234:5678::1
如果三者都正确,IPv6 基本就能正常工作。
但实际部署中,最容易出问题的地方反而是 Protocol 41、防火墙、安全组以及 VPS 服务商网络限制。
因此排查时建议按照这个顺序:
① Tunnel Server IPv4 是否能访问
↓
② Protocol 41 是否被允许
↓
③ SIT 隧道是否建立
↓
④ IPv6 地址是否配置
↓
⑤ IPv6 默认路由是否存在
↓
⑥ IPv6 对端是否能 ping
↓
⑦ IPv6 公网是否能访问
↓
⑧ DNS 是否正常
按照这个顺序排查,通常比反复修改 IPv6 地址和路由有效得多。
另外,如果你的目标不仅仅是让 Debian 自己拥有 IPv6,而是希望进一步实现 Docker IPv6、IPv6 代理、给局域网设备分配 IPv6、或者把一个 /64、/48 IPv6 网段完整路由到 VPS,那么配置方法会进一步变化。此时最关键的是先搞清楚 Tunnel 服务商到底给了你 单个 IPv6、/64、/56 还是 /48,因为这直接决定后面的网络架构。
上一篇 rsync备份到异地
下一篇 没有了