将路由配置复制到不同主机的首选方法?

将路由配置复制到不同主机的首选方法?

我正在用 Ubuntu 20 服务器替换 CentOS 服务器。我需要复制旧服务器的路由配置。ip route show和的输出route不能直接用作输入。

我有点不愿意手动将输出翻译成路线命令,因为总是会出现错误。有没有更好的方法?

答案1

我将尝试使用 powershell 脚本。 route将当前路由表显示为包含以下列的表:目标、网关、Genmask、标志、度量、Ref、使用、Iface

所以我将该输出保存到一个文件中,并将其复制到新主机。我通过删除第一行并将空格替换为逗号,将原始输出转换为 csv 文件。我还将设备名称替换为与新系统匹配的名称。所以我的测试路由表可能如下所示:

Destination,Gateway,Genmask,Flags,Metric,Ref,Use,Iface
default,gateway,0.0.0.0,UG,0,0,0,enp5s0
default,toblerone.mydomain.org,0.0.0.0,UG,100,0,0,eno1
192.168.0.0,0.0.0.0,255.255.255.0,U,100,0,0,eno1
192.168.1.0,0.0.0.0,255.255.255.0,U,0,0,0,enp5s0
192.168.1.0,gateway,255.255.255.0,UG,0,0,0,enp5s0

当路由已存在时,该route命令可能会产生意外错误。我也不希望生成的命令直接运行。所以我的 PowerShell 脚本如下所示:

#!/usr/bin/env pwsh

Set-StrictMode -Version Latest

$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['Set-*:ErrorAction'] = "Stop"

$routeDataCSV = Import-CSV "./route_data.csv"
# A route should only be deleted once per run.
$routeDeleted = @{}

foreach ($routeIn in $routeDataCSV) {
    if (!$routeDeleted[$routeIn.Destination] -or (!($routeDeleted[$routeIn.Destination] -like "true"))) {
        Write-Output "route del -net $($routeIn.Destination)"
        $routeDeleted[$routeIn.Destination] = "true"
    }
    Write-Output "route add -net $($routeIn.Destination) gw $($routeIn.Gateway) netmask $($routeIn.Genmask) metric $($routeIn.Metric) dev $($routeIn.Iface)"
}

生成的命令如下:

route del -net default
route add -net default gw gateway netmask 0.0.0.0 metric 0 dev enp5s0
route add -net default gw toblerone.mydomain.org netmask 0.0.0.0 metric 100 dev eno1
route del -net 192.168.0.0
route add -net 192.168.0.0 gw 0.0.0.0 netmask 255.255.255.0 metric 100 dev eno1
route del -net 192.168.1.0
route add -net 192.168.1.0 gw 0.0.0.0 netmask 255.255.255.0 metric 0 dev enp5s0
route add -net 192.168.1.0 gw gateway netmask 255.255.255.0 metric 0 dev enp5s0

相关内容