通过启动脚本添加特定路由

通过启动脚本添加特定路由

我需要为我的其中一台计算机设置路由。我希望永久保留该路由,这样我就不需要每次重启时都自己输入命令。

但是我使用的路由命令不是普通的命令,因为我在同一个物理接口上(eth0eth0:B以太网卡上)使用了 2 个接口。

route add -net 10.1.0.0/16 dev eth0:B 192.168.1.1

所以我认为我不能使用谷歌以正常方式告诉我

我的问题是:如果我编写脚本并将其添加到$HOME/.kde4/Autostart而不是修改/etc/sysconfig/network/routes,会有什么副作用吗?有没有更好的方法来做到这一点?

答案1

上个学期我在学校实验室做过类似的事情。我使用脚本确定哪个接口具有要创建别名所需的 IP,然后使用该接口创建别名。然后设置路由。

就像是:


#! /bin/bash

# First get all the NIC device names on the system
dev_names=$(/sbin/ifconfig | grep HWaddr| awk '{print $1}')

# Set a loop to loop through each device name
#
my_dev=
TARGET_IP=192.168.1

for d_name in ${dev_names}
do

echo "Checking device name $d_name ..."

status=$(/sbin/ifconfig $d_name|grep ${TARGET_IP})

if [ ! -z "$status" ]
then
        echo "$d_name contains the target IP $TARGET_IP"
        my_dev=$d_name
fi
done
echo "The target NIC device name should be $my_dev"

# Now set the alias
/sbin/ifconfig $my_dev:B {IP_ADDRESS}

# Now add the route
route add -net 10.1.0.0/16 dev eth0:B 192.168.1.1

使用 crontab 或其他方法让脚本在启动时运行。

注意:如果接口是无线连接,则此方法不起作用。

答案2

如果您没有使用 systemd 发行版 (=Arch Linux、OpenSUSE、Fedora),您可以在 /etc/network/interfaces 文件中执行此操作,我推测您正在其中设置 vifs。

只需在接口 eth0:B 的节中添加以下两行:

 post-up route add -net route add -net 10.1.0.0/16 gw 192.168.1.1 dev eth0:B 
 pre-down route delete -net route add -net 10.1.0.0/16 gw 192.168.1.1 dev eth0:B 

每次您启动网络时(在启动时或手动完成),这将自动为您执行此操作,并且如果您关闭 eth0:B,它还会拆除路由。

编辑:

应@Tiana987642 的要求,我将展示如何在 systemd 发行版中执行此操作。由于我希望它在启动时运行,我不妨遵循维基百科并定义要运行的服务systemd我会尽可能少地修改 Wiki:

/etc/conf.d/network@eth0

  address1=192.168.0.15
  netmask1=24
  broadcast1=192.168.0.255
  gateway1=192.168.0.1
  address2=10.0.0.17
  netmask2=24
  broadcast2=10.0.0.255
  gateway2=10.0.0.1

这两个接口的配置纯属推测,您应该替换自己的配置。现在 /etc/systemd/system/[电子邮件保护]

  [Unit]
  Description=Network connectivity (%i)
  Wants=network.target
  Before=network.target
  BindsTo=sys-subsystem-net-devices-%i.device
  After=sys-subsystem-net-devices-%i.device

  [Service]
  Type=oneshot
  RemainAfterExit=yes
  EnvironmentFile=/etc/conf.d/network@%i

  ExecStart=/usr/bin/ip link set dev %i up
  ExecStart=/usr/bin/ip addr add ${address1}/${netmask1} broadcast ${broadcast1} dev %i
  ExecStart=/usr/bin/ip route add default via ${gateway1}

  ExecStart=/usr/bin/ip link add link $i name $i:B type vlan id 10

  ExecStart=/usr/bin/ip link set dev %i:B up
  ExecStart=/usr/bin/ip addr add ${address2}/${netmask2} broadcast ${broadcast2} dev %i:B
  ExecStart=/usr/bin/ip route add default via ${gateway2}

  ExecStop=/usr/bin/ip addr flush dev %i
  ExecStop=/usr/bin/ip link set dev %i down
  ExecStop=/usr/bin/ip addr flush dev %i:B
  ExecStop=/usr/bin/ip link set dev %i:B down

  [Install]
  WantedBy=multi-user.target

然后像平常一样启用并启动该服务,

  systemctl enable [email protected]
  systemctl start [email protected]

相关内容