我需要为我的其中一台计算机设置路由。我希望永久保留该路由,这样我就不需要每次重启时都自己输入命令。
但是我使用的路由命令不是普通的命令,因为我在同一个物理接口上(eth0
和eth0: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]