不幸的是,我的托管服务提供商要求使用静态路由进行网络配置(网关与主机 IP 位于不同的子网)。为此,我在网络配置文件 (/etc/network/interfaces) 中添加了以下几行:
post-up route add -host 172.31.1.1 dev ens3 && route add default gw 172.31.1.1
为了使用 cryptsetup 解锁加密的根驱动器,我安装了 dropbear,这样我就可以通过 SSH 进入 busybox 来提供加密密码。但是,我还没有找到在 initramfs 配置文件中添加静态路由的方法。有人知道如何做到这一点吗?有问题的服务器运行的是 Ubuntu 16.04。
答案1
创建一个小型辅助脚本来配置静态路由。根据initramfs-tools 手册 /etc/initramfs-tools/scripts/nfs-premount 中的脚本在网络接口启用后执行,但您可能需要将脚本放在另一个子目录中。
您需要使用ip route
语法,因为据我所知旧route
命令将不可用:
#!/bin/sh
# /etc/initramfs-tools/scripts/nfs-premount/static-routes
ip route add default via 172.31.1.1 dev ens3
exit 0
并确保脚本chmod 755 /etc/initramfs-tools/scripts/nfs-premount/static-routes
在运行之前是可执行的()update-initramfs
。
答案2
通过 initramfs 脚本添加路由不起作用。不知道为什么。
另一个帖子中的答案有效:Hetzner Cloud 上的 Ubuntu 全盘加密在 initramfs 中添加静态路由
打开文件/usr/share/initramfs-tools/scripts/functions
,搜索configure_networking()
(Ubuntu 18.04 上第 412 行左右)函数并在结束之前直接添加以下内容}
:
ip route add ${IPV4GATEWAY}/${IPV4NETMASK} dev ${DEVICE}
ip route add default via ${IPV4GATEWAY} dev ${DEVICE}
diff -p /usr/share/initramfs-tools/scripts/functions{.orig,}
*** ./functions.orig 2019-03-27 14:00:57.685412556 +0000
--- ./functions 2019-03-27 13:59:09.758130638 +0000
*************** configure_networking()
*** 410,415 ****
--- 410,418 ----
/run/net-${DEVICE}.conf /run/net-*.conf /run/net6-*.conf
netinfo_to_netplan /run/netplan \
/run/net-${DEVICE}.conf /run/net-*.conf /run/net6-*.conf
+
+ ip route add ${IPV4GATEWAY}/${IPV4NETMASK} dev ${DEVICE}
+ ip route add default via ${IPV4GATEWAY} dev ${DEVICE}
}
netinfo_to_resolv_conf() {