在 GCE 中,DHCP 服务器返回带有 32 位掩码的 IP 地址。使该实例成为其子网中唯一的实例。它还返回几个需要配置的静态路由 (RFC3442)。响应示例如下
udhcpc: interface=eth0
udhcpc: ip=10.240.0.2
udhcpc: siaddr=10.240.0.1
udhcpc: subnet=255.255.255.255
udhcpc: mask=32
udhcpc: router=10.240.0.1
udhcpc: staticroutes=10.240.0.1/32 0.0.0.0 0.0.0.0/0 10.240.0.1
udhcpc: opt53=05
使用DHCP服务器,这很完美,客户端获取路由并将其推送到路由表。但是,在这里我使用动态主机配置协议我需要自己添加它们。我尝试使用命令添加它们ip
,但似乎不起作用。
ip addr add 10.240.0.2/32 dev eth0
ip route add 10.240.0.1 dev eth0 proto kernel scope link
ip route add 0.0.0.0/0 via 10.240.0.1
但这似乎不起作用。
/ # ping 8.8.8.8 -c 10
PING 8.8.8.8 (8.8.8.8): 56 data bytes
--- 8.8.8.8 ping statistics ---
10 packets transmitted, 0 packets received, 100% packet loss
添加这些路线时我是否遗漏了什么?
答案1
-O 121
udhcpc 默认不请求无类静态路由,您需要通过在命令行中添加或来指示它这样做-O staticroutes
。或者,可以配置 DHCP 服务器以强制发送选项。
然后应该通过 udhcpc 钩子脚本配置路由。您可以查看 Gentoo 的 netifrcudhcpc-hook.sh对于执行此操作的实现。
答案2
我看到这个帖子是两年半前创建的,您能否澄清一下您是否还存在这个问题?
同时,我们需要牢记的第一个概念是 GCP 上的 DHCP 无法修改。此外,修改实例内的 NIC 设置可能会导致类似的中断。
对于该特定问题,我建议您检查 GCP 上的路由部分。通常,您有一个默认 Internet 网关和一个到 Internet 的默认路由,它可能会与新的 IP 子网和配置混淆或出错。