我正在用 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