服务器IPv6配置完整指南:开启双栈网络、Nginx监听与Cloudflare IPv6加速
IPv4地址已严重枯竭,IPv6是互联网的未来。支持IPv6双栈的服务器可以同时服务IPv4和IPv6用户,提升访问覆盖率,并在Google等搜索引擎对支持IPv6的站点有微弱加分。本文给出香港VPS开启IPv6的完整方案。
一、确认服务器是否支持IPv6
# 检查是否已分配IPv6地址
ip -6 addr show
# 若显示类似以下输出,则已有IPv6:
# inet6 2400:8900::f03c:91ff:fe24:xxxx/64 scope global dynamic
# inet6 fe80::f03c:91ff:fe24:xxxx/64 scope link
# 测试IPv6连通性
ping6 ipv6.google.com
# 若未分配IPv6,联系IDC.Net开启IPv6支持(通常在控制台可自助开启)二、配置IPv6静态地址(Ubuntu 22.04)
# 查看网卡名称
ip link show
# 通常为 eth0 或 ens3
# 编辑Netplan配置
nano /etc/netplan/50-cloud-init.yaml<code"># 在现有IPv4配置基础上添加IPv6
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.10/24 # 现有IPv4地址
- 2400:8900::1234/64 # 新增IPv6地址(向服务商获取)
gateway4: 192.168.1.1
gateway6: 2400:8900::1 # IPv6网关(向服务商获取)
nameservers:
addresses:
- 8.8.8.8
- 2001:4860:4860::8888 # Google IPv6 DNS<code"># 应用配置 netplan apply # 验证 ip -6 addr show eth0 ip -6 route show
三、Nginx同时监听IPv4和IPv6
<code">server {
# IPv4监听
listen 80;
listen 443 ssl http2;
# IPv6监听(添加这两行)
listen [::]:80;
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 记录访问者的真实IPv6地址
set_real_ip_from ::/0;
real_ip_header X-Forwarded-For;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
}<code"># 验证Nginx同时监听IPv4和IPv6
ss -tlnp | grep nginx
# 应显示:
# LISTEN 0 511 0.0.0.0:443 *:* users:(("nginx",...))
# LISTEN 0 511 [::]:443 *:* users:(("nginx",...))
# 测试IPv6访问
curl -6 https://yourdomain.com四、DNS配置AAAA记录
<code"># 在DNS管理后台添加AAAA记录(IPv6版A记录) # Cloudflare Dashboard → DNS → Add record # 类型:AAAA # 名称:@(代表根域名) # IPv6地址:你的服务器IPv6地址(如 2400:8900::1234) # 代理状态:已代理(开启Cloudflare IPv6加速) # 同样为www子域名添加AAAA记录 # 类型:AAAA # 名称:www # IPv6地址:同上 # 验证AAAA记录是否生效 dig AAAA yourdomain.com # 输出应包含:yourdomain.com. 300 IN AAAA 2400:8900::1234
五、Let's Encrypt支持IPv6申请证书
<code"># Certbot通过HTTP验证时,同时支持IPv4和IPv6 # 若服务器只有IPv6(无IPv4),使用以下方式: # 方式1:DNS验证(不依赖HTTP,推荐) certbot certonly --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \ -d yourdomain.com \ -d www.yourdomain.com # 方式2:指定使用IPv6进行HTTP验证 certbot certonly --nginx \ -d yourdomain.com \ --preferred-challenges http
六、UFW防火墙IPv6规则
<code"># 确认UFW已开启IPv6支持 grep "IPV6=yes" /etc/default/ufw # 若未开启,编辑配置文件 sed -i 's/IPV6=no/IPV6=yes/' /etc/default/ufw # 重载防火墙规则 ufw reload # 为IPv6添加与IPv4相同的规则(UFW通常自动处理,但验证一下) ufw allow 80/tcp ufw allow 443/tcp ufw allow 443/udp # HTTP/3 QUIC # 查看包含IPv6的规则状态 ufw status verbose | grep -A2 "v6"
七、PHP获取真实IPv6客户端地址
<code"><?php
// 获取访问者真实IP(兼容IPv4和IPv6)
function get_client_ip() {
// Cloudflare代理场景
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
return $_SERVER['HTTP_CF_CONNECTING_IP'];
}
// 普通代理场景
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim($ips[0]);
}
return $_SERVER['REMOTE_ADDR'];
}
$client_ip = get_client_ip();
$is_ipv6 = filter_var($client_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
echo "客户端IP:" . $client_ip . "\n";
echo "是否IPv6:" . ($is_ipv6 ? "是" : "否") . "\n";八、IPv6访问测试工具
<code"># 在线测试工具: # https://ipv6-test.com — 测试你的服务器是否支持IPv6 # https://test-ipv6.com — 测试客户端IPv6连通性 # 命令行测试: # 测试IPv6 DNS解析 dig AAAA yourdomain.com @2001:4860:4860::8888 # 测试IPv6 HTTP访问 curl -6 -v https://yourdomain.com # 测试IPv6 ping ping6 yourdomain.com
九、总结
开启IPv6双栈是未来趋势,配置成本低,收益是覆盖更多用户并提升搜索引擎评分。整个配置过程约30分钟,不影响现有IPv4服务。IDC.Net的香港VPS全系支持IPv6地址分配,在控制台即可一键开启,无需额外费用。
版权声明:
作者:后浪云
链接:https://idc.net/help/442792/
文章版权归作者所有,未经允许请勿转载。
THE END
