我有一台 Ubiquiti 路由器,其上的 ipv6 似乎运行良好。 的输出radvdump
以及其他各种相关数据如下。我的问题在于路由器后面的 ubuntu 16.04 机器上的 ipv6。
在 WAN 端将路由器设置为 DHCP 客户端,在 LAN 端将前缀委派/{无状态,有状态} DHCP 服务器设置为客户端上仅有的链路本地地址。在 WAN 端将路由器设置为 {DHCP 客户端,SLAAC},在 LAN 端设置静态地址,在客户端设置 {无状态,有状态} DHCP 服务器,这样可以为我在客户端提供 ipv6 地址,但没有连接。
我理解我可能需要编辑网络管理器配置 /etc/dhclient.conf,尽管 sysctl 中的键也相关,但它们可能与网络管理器配合不佳。我很感激任何关于如何开始的建议。
另外,我犹豫是否要在 Ubuntu 客户端上安装 radvd。我担心它可能与客户端上的 DHCP 或 SLAAC 功能冲突。这是个问题吗?
--------------------------------------------------------------------------------
# radvdump[运行路由器]
interface ath0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag on;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 64;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
RDNSS 2607:X:X:X::53
{
AdvRDNSSPreference 0;
AdvRDNSSOpen off;
AdvRDNSSLifetime 1800;
}; # End of RDNSS definition
prefix 2607:X:Y:Y::/64
{
AdvValidLifetime 2592000;
AdvPreferredLifetime 604800;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
}; # End of interface definition
#
# radvd configuration generated by radvdump 1.2
# based on Router Advertisement from fe80::Z:Z:Z:Z
# received by interface ath0
ip -6 地址[在路由器]
inet6 2607:X:X:X:Y:yff:fey:Y/64 scope global dynamic
plus a link-local address
$ip -6 地址[在客户. 第一个地址仅在使用状态服务器时存在]
inet6 2607:X:X:X::x/128 scope global dynamic
inet6 2607:X:X:X:Y':Y':Y':Y'/64 scope global temporary dynamic
inet6 2607:X:X:X:Z:Z:Z:Z/64 scope global mngtmpaddr noprefixroute dynamic
$ip -6 路由[在客户. 第一个路由仅在使用状态服务器时存在,并且 fe80::Y:yff:fey:Y 是路由器 LAN 接口的链路本地 ip]
2607:X:X:X::x dev enp0s25 proto kernel metric 256 expires 86292sec pref medium
2607:X:X:X::/64 via fe80::Y:yff:fey:Y dev enp0s25 proto ra metric 100 pref medium
2607:X:X:X::/64 dev enp0s25 proto kernel metric 256 expires 7090sec pref medium
fe80::/64 dev enp0s25 proto kernel metric 256 pref medium
default via fe80::Y:yff:fey:Y dev enp0s25 proto static metric 100 pref medium
plus a link-local address
$猫/等/网络/接口[与 ubuntu 安装相同]
auto lo
iface lo inet loopback
$sudo sysctl -a | grep accept_ra
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.accept_ra_from_local = 0
net.ipv6.conf.all.accept_ra_min_hop_limit = 1
net.ipv6.conf.all.accept_ra_mtu = 1
net.ipv6.conf.all.accept_ra_pinfo = 1
net.ipv6.conf.all.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.all.accept_ra_rtr_pref = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.default.accept_ra_defrtr = 1
net.ipv6.conf.default.accept_ra_from_local = 0
net.ipv6.conf.default.accept_ra_min_hop_limit = 1
net.ipv6.conf.default.accept_ra_mtu = 1
net.ipv6.conf.default.accept_ra_pinfo = 1
net.ipv6.conf.default.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 1
net.ipv6.conf.enp0s25.accept_ra = 1
net.ipv6.conf.enp0s25.accept_ra_defrtr = 0
net.ipv6.conf.enp0s25.accept_ra_from_local = 0
net.ipv6.conf.enp0s25.accept_ra_min_hop_limit = 1
net.ipv6.conf.enp0s25.accept_ra_mtu = 1
net.ipv6.conf.enp0s25.accept_ra_pinfo = 0
net.ipv6.conf.enp0s25.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.enp0s25.accept_ra_rtr_pref = 0
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.lo.accept_ra_defrtr = 1
net.ipv6.conf.lo.accept_ra_from_local = 0
net.ipv6.conf.lo.accept_ra_min_hop_limit = 1
net.ipv6.conf.lo.accept_ra_mtu = 1
net.ipv6.conf.lo.accept_ra_pinfo = 1
net.ipv6.conf.lo.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.lo.accept_ra_rtr_pref = 1
net.ipv6.conf.virbr0.accept_ra = 0
net.ipv6.conf.virbr0.accept_ra_defrtr = 1
net.ipv6.conf.virbr0.accept_ra_from_local = 0
net.ipv6.conf.virbr0.accept_ra_min_hop_limit = 1
net.ipv6.conf.virbr0.accept_ra_mtu = 1
net.ipv6.conf.virbr0.accept_ra_pinfo = 1
net.ipv6.conf.virbr0.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.virbr0.accept_ra_rtr_pref = 1
net.ipv6.conf.virbr0-nic.accept_ra = 1
net.ipv6.conf.virbr0-nic.accept_ra_defrtr = 1
net.ipv6.conf.virbr0-nic.accept_ra_from_local = 0
net.ipv6.conf.virbr0-nic.accept_ra_min_hop_limit = 1
net.ipv6.conf.virbr0-nic.accept_ra_mtu = 1
net.ipv6.conf.virbr0-nic.accept_ra_pinfo = 1
net.ipv6.conf.virbr0-nic.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.virbr0-nic.accept_ra_rtr_pref = 1
net.ipv6.conf.wlp3s0.accept_ra = 0
net.ipv6.conf.wlp3s0.accept_ra_defrtr = 0
net.ipv6.conf.wlp3s0.accept_ra_from_local = 0
net.ipv6.conf.wlp3s0.accept_ra_min_hop_limit = 1
net.ipv6.conf.wlp3s0.accept_ra_mtu = 1
net.ipv6.conf.wlp3s0.accept_ra_pinfo = 0
net.ipv6.conf.wlp3s0.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.wlp3s0.accept_ra_rtr_pref = 0
答案1
在 WAN 端将路由器设置为 DHCP 客户端,在 LAN 端将前缀委派/{无状态,有状态} DHCP 服务器设置为客户端上仅有的链路本地地址。在 WAN 端将路由器设置为 {DHCP 客户端,SLAAC},在 LAN 端设置静态地址,在客户端设置 {无状态,有状态} DHCP 服务器,这样可以为我在客户端提供 ipv6 地址,但没有连接。
根据这一点以及您的评论,您似乎正在将 SLAAC 公布的 WAN 前缀直接复制到 LAN 接口的配置中。这行不通(原因与 IPv4 上的 WAN DHCP 行不通的原因相同)。
在 IPv6 SLAAC 中,就像在 IPv4 DHCP 中一样,通告的前缀仅指示该子网WAN 接口路由器会从该子网中选择自己的 WAN 地址。但是,这与 LAN 端无关 - 您的路由器是路由器,而不是网桥,因此 LAN 是其自己的网络,需要自己的前缀。
要获取 LAN 接口的前缀,路由器通常必须发送前缀委托通过使用请求DHCPv6 协议在 WAN 端。(通常会有一些集成自动开始将委托前缀通告给 LAN。)
您可以请求多大的前缀取决于 ISP(有些提供最多 /60,有些提供最多 /56 等) - 但各个 LAN 接口仍必须使用 /64。
(话虽如此,并非所有 ISP 都提供 DHCPv6-PD;有时您必须自己申请 IPv6 前缀并进行配置那手动。还有一个选项是继续使用 IPv4 实践,即为 LAN 使用私有地址范围,并在路由器上进行 1:多 NAT(伪装)。不过,除非万不得已,否则我不会推荐 1:多 NAT;它在 IPv4 上已经够糟糕了。)
另外,我正在犹豫是否在 Ubuntu 客户端上安装 radvd。
不,完全不需要。这就像尝试在客户端上安装 DHCP 服务器一样。