使用 NetworkManager 快速实现 PPPOE 获取公网 IPv6 地址

本文通过系统内置服务 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 提供,宽带账号 CDADSL26515071 密码 26515071

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
        # 如下为公网 IPv6 全球单播地址,可全网访问
        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:3f5d:15e7:9738:3c90 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:3f5d:15e7:9738:3c90
#> PING 240e:168:be02:1bd3:3f5d:15e7:9738:3c90(240e:168:be02:1bd3:3f5d:15e7:9738:3c90) 56 data bytes
#> 64 bytes from 240e:168:be02:1bd3:3f5d:15e7:9738:3c90: icmp_seq=1 ttl=56 time=41.8 ms
#> 64 bytes from 240e:168:be02:1bd3:3f5d:15e7:9738:3c90: icmp_seq=2 ttl=56 time=41.6 ms
#> 64 bytes from 240e:168:be02:1bd3:3f5d:15e7:9738:3c90: icmp_seq=3 ttl=56 time=41.5 ms
#> 64 bytes from 240e:168:be02:1bd3:3f5d:15e7:9738:3c90: icmp_seq=4 ttl=56 time=41.6 ms
#> 64 bytes from 240e:168:be02:1bd3:3f5d:15e7:9738:3c90: icmp_seq=5 ttl=56 time=41.7 ms
#> ...

如果想使用该动态公网 IPv6 对外提供服务,可参考文章:简单易用、支持主流域名服务商的 DDNS 方案

码字不易,若觉得本文对你有用,欢迎点赞 👍、分享 🚀 ,相关技术热点时时看🔥🔥🔥​​​…

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 10:32:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 10:32:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 10:32:02       58 阅读
  4. Python语言-面向对象

    2024-07-14 10:32:02       69 阅读

热门阅读

  1. c++课后作业

    2024-07-14 10:32:02       24 阅读
  2. k8s开启deopos功能报错总结

    2024-07-14 10:32:02       25 阅读
  3. 【机器学习】ChatGLM2-6B 分词器 Tokenizer 的使用

    2024-07-14 10:32:02       35 阅读
  4. PHP文字ocr识别接口示例、人工智能的发展

    2024-07-14 10:32:02       22 阅读
  5. 等保测评是做什么的

    2024-07-14 10:32:02       20 阅读
  6. Ubuntu 22.04.4 LTS (linux) 使用shc 加密 shell script

    2024-07-14 10:32:02       22 阅读
  7. 流程循环控制语句

    2024-07-14 10:32:02       24 阅读
  8. Perl 语言开发(十五):调试和测试

    2024-07-14 10:32:02       19 阅读
  9. 平衡三进制分布式计算

    2024-07-14 10:32:02       25 阅读
  10. RESTful API的设计与实现

    2024-07-14 10:32:02       24 阅读
  11. 39.全连接层问题

    2024-07-14 10:32:02       21 阅读