跳至主要內容

IPv6基础及应用

花落南国北亭凉原创...运维服务器linux服务器运维docker

摘要

IPv6基础及应用

一、什么是IPv6

IPv6(Internet Protocol Version 6)作为下一代互联网协议,旨在解决IPv4地址耗尽的问题。随着互联网设备的爆炸性增长,IPv6逐渐成为一种必然的选择。IPv6

是一种为了解决IPv4地址open in new window不足问题而设计的协议。它使用128位地址空间,可以提供约3.4×10^38个独特的IP地址,极大地扩展了可用的互联网地址池。IPv6还引

入了简化的报头、更好的安全性和内置的支持多播和任播。ipv6相比ipv4数量更多、速度更快。

二、IPv6地址概述

2.1 IPv6类型

IPv6地址主要分为以下几种类型:

  • 全局单播地址(Global Unicast Address)(重点:ipv6公网地址)

  • 唯一本地地址(Unique Local Address,ULA)(重点:ipv6私网地址)

  • 链路本地地址(Link-Local Address)

  • 多播地址(Multicast Address)

  • 任播地址(Anycast Address)

全局单播地址(Global Unicast Address)

全局单播地址相当于IPv4的公网地址,用于在全球范围内唯一标识一个网络接口。其前缀通常是2000::/3,即所有以2000至3FFF开头的IPv6地址都属于全局单播地址。

唯一本地地址(Unique Local Address,ULA)

唯一本地地址相当于IPv4的私网地址,用于在本地网络中唯一标识一个网络接口。其前缀通常是fd00::/8。

2.2 IPv6网段表示方法

(1)IPv6网段的表示方法主要有以下三种

  1. ‌**‌冒分十六进制表示法open in new window**‌:IPv6地址由8个16位的十六进制数组成,每两个十六进制数之间用冒号(:)隔开。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。‌

  2. 0位压缩表示法‌:当IPv6地址中存在连续的0时,可以用双冒号(::)来表示。但一个IPv6地址中只能出现一次::。例如:2001:db8:0:1::45ff/64

  3. ‌**‌内嵌IPv4地址表示法open in new window**‌:为了实现IPv4-IPv6互通,IPv4地址可以嵌入IPv6地址中。前96位采用冒分十六进制表示,后32位采用点分十进制表示。例

    如:::192.168.0.1::FFFF:192.168.0.1

(2)具体应用场景和示例

  1. 冒分十六进制表示法‌:适用于完整的IPv6地址表示,每段用冒号隔开。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 0位压缩表示法‌:适用于存在连续0的IPv6地址。例如:2001:db8:0:1::45ff/64
  3. 内嵌IPv4地址表示法‌:适用于IPv4-IPv6互通的场景。例如:::192.168.0.1::FFFF:192.168.0.1

(3)如何验证IPv6地址

# 脚本
# cat > IPv6.sh<<"EOF" 
#!/bin/bash
if [[ $1 =~ ^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$ ]]
then
	echo "[$1] is a valid IPv6 address."
else
     echo "[$1] is not a valid IPv6 address."
fi
EOF

# bash IPv6.sh fd15:4ba5:5a2b:1008:20c:29ff:fea2:24cb
[fd15:4ba5:5a2b:1008:20c:29ff:fea2:24cb] is a valid IPv6 address.
# bash IPv6.sh 1::3:
[1::3:] is not a valid IPv6 address.

三、配置IPv6地址

注意:如果不是虚拟机,可以跳到第(1)步设置IPv6

(0)vmware开启ipv6

打开vmware点击编辑,打开虚拟网络编辑器,点击更改设置,如下图标注顺序选择 VMnet8 NAT设置 开启IPv6

image-20240909055118026
image-20240909055118026
image-20240909055239459
image-20240909055239459

打开windows,控制面板 > 网络和 Internet > 网络连接,查看IPv6地址和IPv6网关

image-20240909055625524
image-20240909055625524

(1)检查IPv6支持

首先,确认系统是否支持IPv6。使用以下命令检查:

cat /proc/net/if_inet6
# 如果输出了信息,说明系统支持IPv6。如果没有输出,请确认内核模块是否加载:
lsmod | grep ipv6

(2)启用IPv6

如果IPv6没有启用,可以通过以下步骤启用它。

cat >> /etc/sysctl.conf <<EOF
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
EOF

sysctl -p

(3)配置网络接口

Debian/Ubuntu系统

# vi /etc/network/interfaces
auto ens32
# ipv4
iface ens32 inet static
address 192.168.8.101
netmask 255.255.255.0
gateway 192.168.8.2
# ipv6
iface ens32 inet6 static
address fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0
netmask 64 
gateway fe80::250:56ff:fec0:2222

### 重启服务器
reboot

CentOS/RHEL系统

# vi /etc/sysconfig/network-scripts/ifcfg-ens32
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_FAILURE_FATAL=no
IPV6ADDR=fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0/64
IPV6_DEFAULTGW=fe80::250:56ff:fec0:2222

### 重启服务器
reboot

(4)验证IPv6配置

# 在linux服务器上操作
ip a show ens32
ip -6 route show default
ip  route show default

# 在windows上操作
ping fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0

四、常用服务配置IPv6

nginx

nginx同时启用IPv4和IPv6

# nginx同时启动IPv4和IPv6
cat nginx.conf
server {
	listen 80;
	listen [::]:80;
	...
}

# ss -anultp|grep nginx
tcp   LISTEN 0      511          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=708,fd=5),("nginx",pid=707,fd=5),("nginx",pid=705,fd=5))
tcp   LISTEN 0      511             [::]:80           [::]:*    users:(("nginx",pid=708,fd=6),("nginx",pid=707,fd=6),("nginx",pid=705,fd=6))

# 访问
http://192.168.8.101:80
http://[fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0]:80

haproxy

haproxy同时启用IPv4和IPv6

# cat /etc/haproxy/haproxy.cfg
global
    maxconn 2000
    ulimit-n 16384
    log 127.0.0.1 local0 err
    stats timeout 30s
defaults
    log global
    mode http
    option httplog
    timeout connect 5000
    timeout client 50000
    timeout server 50000
    timeout http-request 15s
    timeout http-keep-alive 15s
listen stats
    bind 0.0.0.0:12345
    bind [::]:12345
    log global
    mode http
    maxconn 10
    stats enable
    stats refresh 30s
    stats show-node
    stats auth admin:123456
    stats uri /stats
frontend monitor-in
    bind 0.0.0.0:33305
    bind [::]:33305
    mode http
    option httplog
    monitor-uri /monitor
frontend k8s-master
    bind 0.0.0.0:16443
    bind [::]:16443
    mode tcp
    option tcplog
    tcp-request inspect-delay 5s
    default_backend k8s-master
backend k8s-master
    mode tcp
    option tcp-check
    balance roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    server  k8s-master-01  192.168.8.101:6443 check
    server  k8s-master-02  192.168.8.102:6443 check
    
# 访问
http://192.168.8.101:33305/monitor
http://[fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0]:33305/monitor

http://192.168.8.101:12345/stats
http://[fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0]:12345/stats
# 用户名/密码:admin/123456

keepalived

keepalived同时启用IPv4和IPv6虚拟IP

# cat /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { 
    ...
    # IPv4
    virtual_ipaddress {
    	192.168.8.100/24
    }
    # IPv6
    virtual_ipaddress_excluded {
        fd15:4ba5:5a2b:1008:d506:a337:89e3:57a0/64
    }
	...
}
上次编辑于: