本文通过系统内置服务 NetworkManager 快速实现 PPPOE 拨号获取 IPv6 公网地址,适用于 CentOS 8 系列衍生版系统环境,如 Anolis OS 8.9,Rocky Linux 8.9,AlmaLinux OS 8.9 等,具体操作流程如下:
环境介绍
1》Rocky Linux release 8.9 (kernel 4.18.0)
2》NetworkManager-1.40.16
3》NetworkManager-ppp-1.40.16
部署 NetworkManager-ppp
安装 NetworkManager 服务的 ppp 插件
# PPP plugin for NetworkManager
sudo dnf install NetworkManager-ppp -y
NetworkManager 是一项系统服务,用于管理网络接口和基于用户或自动配置的连接。它支持:Ethernet、Bridge、Bond、VLAN、Team、InfiniBand、Wi-Fi、PPPoE 等设备,并支持多种不同的 VPN 服务
创建 pppoe 连接
1、使用以下命令创建 pppoe 拨号连接
# sudo nmcli con add type pppoe ifname <接口名称> con-name "MyDSL" username <你的用户名> password <你的密码>
sudo nmcli con add type pppoe ifname ens9 con-name "myDSL" username CDADSL26515071 password 26515071
#> Connection 'myDSL' (989a1bab-f00c-4098-87b6-51b3774c3c71) successfully added.
命令 nmcli 由 NetworkManager 提供
2、查看 pppoe 连接的配置信息
# cat /etc/NetworkManager/system-connections/myDSL.nmconnection
[connection]
id=myDSL
uuid=989a1bab-f00c-4098-87b6-51b3774c3c71
type=pppoe
interface-name=ens9
[ethernet]
[pppoe]
password=26515071
username=CDADSL26515071
[ipv4]
method=auto
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
开始 pppoe 拨号
1、启用 pppoe 连接 myDSL,开始拨号
sudo nmcli con up myDSL
#> Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
# 关闭连接,断开 pppoe 拨号
sudo nmcli con down myDSL
# 查看网络连接日志(用于故障排除)
journalctl -xe NM_CONNECTION=989a1bab-f00c-4098-87b6-51b3774c3c71 + NM_DEVICE=ens9
2、查看网络接口
nmcli connection show
#> NAME UUID TYPE DEVICE
#> ens3 a902b830-9c3f-4eff-b101-c1c686c0b422 ethernet ens3
#> myDSL 989a1bab-f00c-4098-87b6-51b3774c3c71 pppoe ens9
# 查看 myDSL 接口详情
nmcli connection show myDSL
3、查看 pppoe 拨号接口 ppp0 配置信息
# ifconfig ppp0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1492
inet 100.78.211.81 netmask 255.255.255.255 destination 100.78.128.1
inet6 240e:168:be02:1bd3:3f5d:15e7:9738:3c90 prefixlen 64 scopeid 0x0<global>
inet6 fe80::6106:d949:a5a1:d2a8 prefixlen 64 scopeid 0x20<link>
inet6 fe80::c536:e38e:f739:f073 prefixlen 64 scopeid 0x20<link>
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 9 bytes 412 (412.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 284 (284.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看 ipv6 默认路由
查看 ipv4 及 ipv6 默认路由
ip route show | grep default
#> default via 100.78.128.1 dev ppp0 proto static metric 102
ip -6 route show | grep default
#> default via fe80::7057:bf30:d800:0 dev ppp0 proto static metric 102 pref medium
# 查看获取的 ipv6 网络前缀
ip -6 route show | grep 240e
#> 240e:168:be02:1bd3::/64 dev ppp0 proto ra metric 102 pref medium
根据路由表可以看出,IPv6 默认路由下一跳为 fe80::7057:bf30:d800:0,该地址是 ISP 端的 IPv6 链路本地地址。获取的 ipv6 网络前缀为 240e:168:be02:1bd3::/64 (每次拨号时字符串 1bd4 部分是动态变化的)
为什么自动获取的 IPv6 地址中,默认网关指向 ISP 端链路本地地址是由协议规定
和 IPv6 特性
所致,具体如下:
协议规定:终端自动学习的 IPv6 默认网关是链路本地地址(对端或 ISP 端)。这是因为全球单播地址可能有多个(设备多个 IP 地址),且可能发生变更(网络管理),而链路本地地址通常不变。因此,使用网关的链路本地地址作为终端的默认网关,即使全球单播地址发生变更,客户端也不需要刷新路由。
IPv6 特性:IPv6 地址由网络前缀和接口 ID 组成,而接口 ID 通常是自动生成的。最终生成的地址存在不确定性,不便于手工指定。因此,IPv6 直接通过链路本地地址作为默认网关进行通信,体现了 IPv6 即插即用的特性。
知识补充:IPv6 链路本地地址特性如下
本地链路通信
:仅在同一链路上有效,不会被路由器转发到其他网络,主要用于同一本地链路上的设备之间进行通信邻居发现和自动配置
:链路本地地址在邻居发现协议和无状态自动配置过程中起着关键作用,使得同一链路上的节点能够相互通信- 两种配置方法:手工指定 和 自动配置
IPv6 连接性测试
1、从本机到公网 ipv6 地址
ping6 -I ppp0 2400:3200::1
#> PING 2400:3200::1(2400:3200::1) from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7 ppp0: 56 data bytes
#> 64 bytes from 2400:3200::1: icmp_seq=1 ttl=120 time=34.7 ms
#> 64 bytes from 2400:3200::1: icmp_seq=2 ttl=120 time=34.8 ms
#> 64 bytes from 2400:3200::1: icmp_seq=3 ttl=120 time=34.9 ms
#> 64 bytes from 2400:3200::1: icmp_seq=4 ttl=120 time=34.8 ms
#> 64 bytes from 2400:3200::1: icmp_seq=5 ttl=120 time=34.6 ms
#> ...
2、从公网 ipv6 地址到本机
ping6 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7
#> PING 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7(240e:168:be02:1bd3:be8b:30bb:aceb:4bc7) 56 data bytes
#> 64 bytes from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7: icmp_seq=1 ttl=56 time=41.8 ms
#> 64 bytes from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7: icmp_seq=2 ttl=56 time=41.6 ms
#> 64 bytes from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7: icmp_seq=3 ttl=56 time=41.5 ms
#> 64 bytes from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7: icmp_seq=4 ttl=56 time=41.6 ms
#> 64 bytes from 240e:168:be02:1bd3:be8b:30bb:aceb:4bc7: icmp_seq=5 ttl=56 time=41.7 ms
#> ...