如何通过 PPPoE 解决 IPv6 问题

如何通过 PPPoE 解决 IPv6 问题

我面临着与 IPv6 和 PPPoE 连接相关的无法理解的问题。

我有一台连接到 Netgear 路由器的服务器,WAN 连接到 ISP,服务器连接到 LAN 端口。我擅长 IPv4 前端和 NAT 为我的服务器工作。

问题从这里开始...我的 ISP 通过 PPPoE 提供全局 IPv6 /64 地址,我想通过 IPv6 托管一些服务。

场景 1: 我通过 PPPoE 在路由器上启用了 IPv6,路由器获取了 2XXX:YYYY:ZZZZ::1/64 范围内的 IPv6 地址。我猜这叫做前缀委托 IPv6 地址(我猜)。当我尝试从其他 ISP 提供的网络 ping 该地址时,该地址在全球范围内均可访问。此外,我的服务器获取了 2XXX:YYYY:ABCD:EFGH:JKLM/64 地址。我可以从我的服务器 ping google IPv6 DNS 2001:4860:4860::8888。但是,无法从我的其他 ISP 网络访问该服务器。这是为什么?

我还尝试在路由器上启用外部和内部端口之间的端口转发,希望进入路由器 IPv6 地址端口的请求能够映射到我的服务器。但似乎我的 Netgear 路由器上只有 IPv4 端口被转发,IPv6 端口上没有被转发。

场景 2: 我将路由器设置更改为 IPv6pass-through而不是 PPPoE,假设我将从我的服务器直接通过 PPPoE 连接到我的 ISP,并在我的服务器上获取全局 IPv6 2XXX:YYYY:ZZZZ::1/64 地址,以使其可在全球范围内访问。

为此,我通过 Wifi 和电缆将服务器连接到路由器,并通过 Ubuntu 22.04 上的网络管理器在 Wifi 上禁用 IPv6,在以太网接口上禁用 IPv4。

pv6.method=dhcp现在,当我通过设置 i和仅在以太网上启用 IPv6 时ipv6.addr-gen-mode=stable-privacy,我确实获得了 2XXX:YYYY:ZZZZ::1/64 地址。但这没用,因为我既不能 ping google ipv6 dns,也不能从其他网络 ping 我的服务器。可能是因为我没有进行 PPPoE 身份验证(对吗?)。

为了解决上述问题,我安装了 radvd 和 wide-dhcp6-client,并通过以下命令在网络管理器中创建了 PPPoE 连接:

nmcli connection add type pppoe ifname eth0 username <isp-user-id> password <isp-password> ipv4.method disabled ipv6.method auto autoconnect yes

我已在 /etc/ppp/options 中启用了 ipv6,如下所示:

+ipv6 ipv6cp-use-ipaddr
accept-remote
# MTU size not set, left default

系统配置信息:

  net.ipv6.conf.all.forwarding=1 

radvd.conf:

interface eth0
{
    AdvSendAdvert on;
    prefix ::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
};

/etc/wide-dhcpv6/dhcp6c.conf:

# Default dhpc6c configuration: it assumes the address is autoconfigured using
# router advertisements.

profile default
{
#  information-only;

  enable;
  pd;
  request domain-name-servers;
#  request domain-name;

  script "/etc/wide-dhcpv6/dhcp6c-script";
};

我已经启用并启动了 radvd 服务,还加载了 sysctl 配置。我不确定 wide-dhcp-client 是如何触发的,我不知道如何让网络管理器使用 wide-dhcp6-client 获取 ip 地址。

完成所有这些后,我启动了新的连接,并且它成功启动了,但是在 ip a 或 ifconfig -a 输出中我没有看到 ppp0 接口。

我确实看到 /dev/ppp 设备存在,并且在开始连接之前手动加载了 pppoe 内核模块。

我开始连接如下:

nmcli connection up ppoe-eth0

我收到消息:ppoe-eth0 连接已成功启动。dbus....

我还看到 ps -Aef 输出中正在运行 ppppd,其中包含一系列选项,包括我的 isp-user-id 和 isp-passwd。而且我只在我的 eth0 接口 fe80:abcd:efgh:xyz 上看到一个链路本地 ip 地址。

有人可以指出这里缺少什么并给出一些解释吗?

答案1

一般而言:您至少有两个 IPv6 网络。一个是 WAN 网络 (/64),您的路由器在该网络上有一个地址,另一个是 LAN 网络 (/64)。您的计算机在该网络上有一个地址。目前是这样吗?

没有 NAT,因此不需要端口转发。不过,大多数路由器都启用了防火墙。

对于情况 1:如果您可以使用 IPv6 ping Google 并得到答复,则表示您的连接正常。

编辑:如果您仍然对情况 2 感兴趣,您必须了解 IPv6CP(仅协商 64 位接口标识符)。这将用于链路本地地址。然后可以从您的 ISP 发送路由器通告,然后可以使用 SLAAC 或 DHCPv6。如果已完成,则配置 WAN 接口。然后需要配置 LAN 接口。这是使用 DHCP-PD 的地方。

相关内容