Linux服务器支持IPv6访问,核心就三步:确认内核没关掉IPv6、给网卡配上IPv6地址、把防火墙和安全组的IPv6流量放行。这三步做完,你的服务器就能通过IPv6地址被访问了,下面从检查、配置、验证三个层面逐一拆解,每个步骤都给出可直接复制的命令。
Linux服务器怎么开启IPv6:先确认内核状态
多数Linux发行版默认开启IPv6支持,但不少云主机镜像或精简安装版本会把它关掉,动手配置前,先花一分钟检查内核和当前网络状态。
检查内核IPv6模块是否可用
执行以下命令,看返回结果:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
返回0代表IPv6未被禁用,1代表被手动关闭,再看网卡上的IPv6地址:
ip -6 addr show
如果这条命令没有任何输出,说明系统当前没有可用的IPv6地址,这时候需要检查启动参数里有没有ipv6.disable=1,有的话要去掉并重启。
修改sysctl配置永久开启
确认内核支持后,编辑/etc/sysctl.conf文件:
vi /etc/sysctl.conf
加入以下几行:
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
保存后执行sysctl -p让配置立即生效,这一步做完,内核对IPv6已经放行,接下来就是给网卡配地址。
CentOS配置IPv6地址步骤:从网卡到路由
配置方式和系统版本强相关,这里分CentOS/RHEL系和Ubuntu/Debian系两种情况说明。
编辑网卡配置文件(CentOS/RHEL 7/8/9)
找到服务器的主网卡配置文件,通常位于/etc/sysconfig/network-scripts/ifcfg-eth0(eth0按实际网卡名调整),在文件末尾追加:
IPV6INIT=yes
IPV6ADDR=240e:xxxx:xxxx:xxxx::2/64
IPV6_DEFAULTGW=240e:xxxx:xxxx:xxxx::1
IPV6INIT=yes是让网卡启用IPv6的总开关,IPV6ADDR填你的静态IPv6地址,IPV6_DEFAULTGW是网关地址,向云厂商或网络管理员获取,保存后重启网络服务:
systemctl restart network
或者干脆重启网络管理器:
systemctl restart NetworkManager
Ubuntu系统用Netplan配置
Ubuntu 18.04以上的版本集中在/etc/netplan/目录下的YAML文件里配置,编辑对应文件,在网卡段落下追加:
dhcp6: false
addresses:
- "240e:xxxx:xxxx:xxxx::2/64"
routes:
- to: default
via: "240e:xxxx:xxxx:xxxx::1"
保存后执行:
netplan apply
动态获取:DHCPv6方式
如果网络环境支持无状态或DHCPv6自动分配,CentOS系在网卡配置文件里加一行DHCPV6C=yes,Ubuntu系把dhcp6改成true,然后重启网络即可,动态方式适合拨号或临时测试场景,生产环境建议用静态地址,不然换了地址后DNS解析要跟着改。
验证配置是否生效
ip -6 addr show
ip -6 route show
前者能看到网卡上已绑定的IPv6地址,后者能看到默认路由,两条命令都有输出,说明本机配置层面已经通了,再用网关地址ping一下:
ping6 -I eth0 240e:xxxx:xxxx:xxxx::1
有回包说明局域网链路正常,接下来处理外部访问的问题。
IPv6和IPv4双栈配置的区别在哪
服务器要同时跑IPv4和IPv6业务,配置思路差不多,但细节上有几个关键差异,没分清容易踩坑,下表做了个直观对比:
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 地址格式 | 32位数字点分十进制 | 128位十六进制冒号分隔 |
| 子网前缀 | 常用/24或/16 | 标准/64 |
| 私网地址 | 0.0.0/8等保留段 | fc00::/7 |
| 网关配置 | IPIPV4_DEFAULTGW | IPV6_DEFAULTGW |
| DNS记录 | A记录 | AAAA记录 |
| 防火墙工具 | iptables | ip6tables |
配置层面,IPv6强调每个接口一个/64前缀,网关配置方式一致但字段名不同,服务监听上,Nginx和Apache这类软件默认只监听IPv4端口,要额外指定IPv6监听,比如Nginx想同时接受两种协议访问,配置要写成:
listen [::]:80;
这行会同时监听IPv4和IPv6的80端口,只写listen 80;的话,IPv6用户是连不进来的。
防火墙和安全组放行IPv6流量
很多用户配置完网卡发现外部还是访问不通,问题不在服务器本身,而是防火墙策略只放行了IPv4。
firewalld放行IPv6端口
CentOS系默认用firewalld,它有个特点:同一条规则会同时应用到IPv4和IPv6,执行下面的命令把HTTP和HTTPS放行:
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
确认IPv6侧是否生效:
firewall-cmd --list-all
输出里能看到ports和services条目同时包含IPv4和IPv6规则,说明放行已经双向生效。
用ip6tables手动管理
如果你的环境还在用iptables系列,IPv6流量由ip6tables单独管理,规则写法跟iptables几乎一样,放行22端口示例:
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
要注意的是,IPv6的INPUT策略默认是ACCEPT还是DROP,要看你的ip6tables规则集,建议先执行ip6tables -L -n查看当前默认策略,再决定加哪些放行规则。
云服务器安全组单独放行IPv6
云服务器有个容易遗漏的环节:安全组,简米云、酷番云的控制台里,安全组规则通常允许单独添加IPv6条目,常见误区是用户只配了IPv4的入方向“允许80端口”,IPv6流量依然被拦在外面,而且控制台不报任何提示。
操作路径是:云服务器控制台 → 安全组 → 入方向规则 → 添加规则,协议选TCP,端口填80/443,来源写:/0(代表所有IPv6地址),策略选允许。
疑难排查:IPv6地址配好了还是ping不通
配置做完不等于能访问,实际部署中经常遇到前半段正常、后半段失联的情况,下面几个检查点按优先级排列,可以快速定位问题。
先测本机再测外网
curl -6 -I https://你的IPv6地址
如果本机能通,说明网卡和服务配置正常,问题出在外部路径,再检查云服务器的安全组和ICP备案(境内服务器用IPv6访问也需要备案,这个容易被忽略)。
检查网络前缀是否真实可用
云厂商分给你的IPv6地址,不是随便填的,很多用户把地址填错一个段,ping网关能通,但出公网就被丢弃,用下面的命令查一下路由:
ip -6 route show | grep default
默认路由必须指向云厂商提供的网关地址,如果拿到的是fe80::开头的本地链路地址,需要确认是不是用错了网关。
检查服务监听状态
ss -tlnp | grep 80
输出里有[::]:80字样,才是IPv6监听正常,如果只看到0.0.0:80,说明服务只监听IPv4,去改对应服务配置并重启。
上游网络是否广播了IPv6路由
用外部工具测试之前,先确认域名解析里有AAAA记录,没有这条记录,域名是解析不到IPv6地址的,用户可以访问IPv4但不代表做了双栈,在DNS管理后台加一条AAAA记录指向服务器的IPv6地址即可。
域名解析和监听配置双保险
网站服务上线前,最后检查这两项。
域名加AAAA记录
登录DNS服务商控制台,给域名添加类型为AAAA、值为服务器IPv6地址的解析记录,国内云厂商的DNS控制台基本都支持,不额外收费,配置完成后用dig验证:
dig AAAA example.com
TTL生效后能看到对应的IPv6记录。
强制测试整体链路
找一个IPv6可达的本地环境,直接用浏览器访问http://[IPv6地址]/测试,注意IPv6的URL要用方括号括起来,返回正常的话,整个链路就通了。
服务器IPv6访问常见问题解答
云服务器IPv6连不上是什么原因?
按下面几个点排查:安全组入方向规则有没有放行IPv6流量,网卡配置文件里的地址和网关是否匹配,服务是否监听在[::]上,多数连不上的情况出在安全组漏配,排查顺序先看云厂商控制台,再看服务器内部配置,公网访问不通时,境内服务器还要检查备案状态,没备案的域名即使解析了IPv6,也会被当地运营商拦截。
Linux禁用IPv6命令是什么?
禁用IPv6要慎用,尤其是双栈环境下,如果确实要禁用,修改/etc/default/grub,在GRUB_CMDLINE_LINUX参数里加ipv6.disable=1,然后执行grub2-mkconfig -o /boot/grub2/grub.cfg并重启,临时禁用可以用sysctl -w net.ipv6.conf.all.disable_ipv6=1,重启后失效,禁用后,依赖IPv6的程序(如部分Kubernetes组件、邮件服务器)会报错,生产环境通常不用这个方案,改为保持双栈或只停止对外宣告IPv6路由。
静态配置和自动获取的IPv6有什么区别?
静态地址稳定可控,适合部署域名绑定和需要固定出口IP的场景,缺点是IP变化后要手动改配置,自动获取的地址有有效期,超时后会更换,适合拨号或不强调固定地址的场景,生产服务器推荐静态地址,同时保留DHCPv6作为备用,因为Nginx等服务的listen [::]:80和ACL规则都依赖具体地址值,频繁变动的IPv6地址会让维护成本翻倍。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774495.html


