我经常构建 centos7 服务器,并且有一些特殊的网络要求。例如,我可能想要使用无法通过我的常规子网或默认网关访问的私有范围内的名称服务器或存储库。
想象一下以下这样的启动:
network --device eth0 --bootproto static --ip 192.168.0.100 --netmask 255.255.0.0 --gateway 192.168.0.1 --nameserver 10.0.0.100
repo --name="private" --baseurl=http://172.16.0.100/private/7/x86_64
这纯粹是理论上的设置。理论上的盒子有一个 192.168 范围内的 IP 地址,有一个可以到达更广阔世界的默认网关,但希望到达 10/8 网络和 172.16/12
另外,假设默认网关无法到达这些其他子网。
在实时 centos 环境中我可以执行以下操作
ip route add 10.0.0.0/8 via 192.168.0.2
ip route add 172.16.0.0/12 via 192.168.0.3
为了持久化,可以将其添加到 /etc/sysconfig/network-scripts/route-eth0
我如何让所有这些在 anaconda 中发挥作用?从历史上看,这可能在 %pre 中起作用,但如果我在 anaconda 运行时通过 ssh 进入,我可以看到这些路由不存在。
答案1
为什么不直接设置静态路由%post
?
%post
cat > /etc/sysconfig/network-scripts/route-eth0 <<EOF
10.0.0.0/8 via 192.168.0.2
172.16.0.0/12 via 192.168.0.3
EOF
如果您在安装时需要静态路由,当然也可以添加适当的ip route
命令。%pre
答案2
我最终找到了解决方案
%pre
nmcli connection modify "System eth0" +ipv4.routes "10.0.0.0/8 192.168.0.2"
%end
这不仅对构建有用,而且在构建之后也会保持不变