我面临着与 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 的地方。