我将使用 .ipv6 设置静态 IPv6 地址和相应的 IPv6 默认路由dhcpcd
。我查过man dhcpcd.conf
,但没有发现任何地方提到如何设置 IPv6 默认路由。
我目前的dhcpcd.conf
:
hostname
duid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option interface_mtu
require dhcp_server_identifier
interface eth0
noipv6rs
static ip6_address=2001:xxx::xxx/128
我想做dhcpcd
的是:
ip addr add 2001:xxx::xxx/112 dev eth0
ip -6 route add 2001:xxx::xxxx dev eth0
ip -6 route add default via 2001:xxx::xxxx
但是,根据我当前的配置,dhcpcd
仅执行前两行,而不执行第三行。
man dhcpcd.conf
仅告诉您可以通过类似 的方式设置 IPv4 默认路由器static routers=192.168.0.1
。
我知道这可以通过手动完成ip -6 route add
,使用 的 hooks dhcpcd
,或者干脆放在一边dhcpcd
。但我依靠dhcpcd
DHCPv4 来处理。我认为如果 dhcpcd 可以同时处理 IPv4 和 IPv6 配置,那就不会那么混乱了。
我的问题:
是否有更直接的方法dhcpcd
通过在 中指定一些选项/命令来自动设置 IPv6 默认路由dhcpcd.conf
?
答案1
您无法使用 DHCPv4 发出默认 IPv6 路由。你甚至不能使用DHCPv6给出默认的 IPv6 路由。
原因是 IPv6 在很多方面与 IPv4 不同,其中之一是路由器的行为方式:每个 IPv6 路由器都将自己声明为可以将其用作网关的网段的网关。并且您可以拥有多个路由器进行分段,它不限于 IPv4 中的单个网关。
因此,这不是通过交换 DHCP 广播和回复来发生的,而是通过交换路由器请求(RS)和路由器广告主机和路由器之间的 (RA) 消息,如 IPv6 中定义邻居发现协议。
因此,让 IPv6 主机使用正确的路由配置自身的唯一方法是除了在路由器/网关上运行radvp
(正确配置)之外。dhcpd
当你这样做时,你可以再次启用RS消息(删除noipv6rs
),因为如果Linux认为自己是一个路由器(启用转发),它就不会(或至少不应该)发送RS消息。
并使用radvp
是实际上是“不太混乱”的方式 - 它允许您在网段中添加路由器或从网段中删除路由器,而无需更新中央配置文件。
此外,无状态自动配置 (SLAAC) 将允许您的主机从可路由前缀本身生成 IPv6 地址。
答案2
谷歌搜索“dhcp ipv6 defaultroute”让我找到了这个标题为:的 AU 问答:如何在 dhcpd6.conf 中设置默认网关。根据此问答 IPv6:
DHCPv6 不支持设置路由器/网关的选项。
答案3
我想回答我自己的问题:
答案由德克特是这个问题的直接答案。答案由可持续发展管理给出了一些有用的解决方案和进一步的建议。
但是,他们都没有解决我遇到的问题。
我遇到的情况是网络环境完全不受我的控制。事实上,我从 VPS 提供商处购买了 VPS。他们提供的是预配置的网络。我只是想重新安装 VPS 并将操作系统从 Debian 更改为另一个发行版,除了在安装后复制完全相同的网络配置之外,我别无选择更改任何网络环境。
在互联网上搜索并询问其他人后,我发现配置静态 IPv6 路由器和地址的最佳解决方法是使用网络控制。网络控制可以使用DHCPCD作为协商 DHCPv4 的后端,同时还提供静态配置 IPv6 的简单方法。这是我到目前为止的配置:
Description='A basic dhcp ethernet connection'
Interface=eth0
Connection=ethernet
IP=dhcp
#DHCPClient=dhcpcd
#DHCPReleaseOnStop=no
IP6=static
Address6=('2001:****:****::****/***')
Routes6=('2001:****:****::****')
Gateway6='2001:****:****::****'