要在系统中添加路由,你可以使用
ip route
或route
命令。以下是如何用这两种方法添加路由的示例:使用
ip route
命令sudo ip route add <网络>/<前缀长度> via <网关> dev <接口>
<网络>/<前缀长度>
:目标网络及子网掩码。<网关>
:到达目标网络的网关。<接口>
:用于路由的网络接口。示例:
sudo ip route add 192.168.1.0/24 via 192.168.0.1 dev eth0
使用
route
命令bashCopy Code
sudo route add -net <网络> netmask <子网掩码> gw <网关> dev <接口>
<网络>
:目标网络地址。<子网掩码>
:子网掩码。<网关>
:到达目标网络的网关。<接口>
:用于路由的网络接口。示例:
sudo route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
验证路由
你可以使用以下命令验证路由是否成功添加:
ip route show
或者
route -n
根据你的需求选择适合的命令。
在 Ubuntu 上添加路由可以通过以下几种方法进行:
1. 使用
ip route
命令这是推荐的方式,因为
ip
命令是net-tools
包中的传统route
命令的现代替代品。添加静态路由
sudo ip route add <网络>/<前缀长度> via <网关> dev <接口>
<网络>/<前缀长度>
:目标网络及其子网掩码。例如192.168.1.0/24
。<网关>
:用于到达目标网络的网关。例如192.168.0.1
。<接口>
:用于路由的网络接口。例如eth0
。示例:
sudo ip route add 192.168.1.0/24 via 192.168.0.1 dev eth0删除静态路由
sudo ip route del <网络>/<前缀长度> via <网关> dev <接口>sudo ip route del 192.168.1.0/24 via 192.168.0.1 dev eth0
2. 使用
route
命令
route
命令是net-tools
套件的一部分,虽然现在不如ip
命令常用,但也仍然有效。添加静态路由
sudo route add -net <网络> netmask <子网掩码> gw <网关> dev <接口>
<网络>
:目标网络地址。例如192.168.1.0
。<子网掩码>
:子网掩码。例如255.255.255.0
。<网关>
:用于到达目标网络的网关。例如192.168.0.1
。<接口>
:用于路由的网络接口。例如eth0
。示例:
sudo route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
删除静态路由
sudo route del -net <网络> netmask <子网掩码> gw <网关> dev <接口>
示例:
sudo route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0
3. 使路由永久生效
临时添加的路由在系统重启后会丢失。如果你希望路由在重启后仍然存在,需要将路由信息添加到网络配置文件中。
Ubuntu 20.04 及更高版本
在
/etc/netplan/
目录下的配置文件中添加静态路由。通常是.yaml
文件,例如/etc/netplan/01-netcfg.yaml
。在文件中添加routes
部分。
在Linux系统中,通过ip route add
命令添加的路由规则通常不会永久保存,它们只会在当前会话中生效。当系统重新启动后,这些临时添加的路由规则会丢失。
要求在开关机之后仍然保留这条路由,需要将路由规则永久保存。在大多数Linux发行版中,可以使用以下方法之一来实现:
方法一:使用ip
命令结合sysconfig
配置文件
-
编辑配置文件:打开
/etc/sysconfig/network-scripts/route-ens3
(具体文件名可能会因网络接口名称不同而有所变化)。 -
添加路由规则:在文件中添加以下内容(假设你要添加的路由是
10.10.0.0/24 via 10.10.66.254 dev ens3
):10.10.0.0/24 via 10.10.66.254 dev ens3
-
保存文件:保存配置文件并关闭编辑器。
-
重启网络服务:执行以下命令重启网络服务,以应用更改:
sudo systemctl restart network.service
-
cd /etc/systemd/system/
[root@MiWiFi-RD04-srv system]# cat ens3-restart.service
[Unit]
Description=Restart network interface
After=network.target[Service]
Type=oneshot
ExecStart=/sbin/ifup ens3
ExecStop=/sbin/ifdown ens3
RemainAfterExit=true[Install]
WantedBy=multi-user.target
systemctl enable ens3-restart.service
systemctl start ens3-restart.service
这个文件是一个 systemd 服务单元文件,用于在系统启动时重启网络接口 ens3。让我们逐行解释它的含义: Unit 部分: [Unit] Description=Restart network interface After=network.target Description=Restart network interface:描述了这个服务单元的作用,即重新启动网络接口。 After=network.target:指定了该服务应该在 network.target 启动后才开始执行。这确保了在网络服务启动完成之后再进行接口的重启操作,避免可能的依赖问题。 Service 部分: [Service] Type=oneshot ExecStart=/sbin/ifdown ens3 && /sbin/ifup ens3 RemainAfterExit=true Type=oneshot:指定了这是一个一次性任务,即执行 ExecStart 中定义的命令后,服务即认为执行完毕。 ExecStart=/sbin/ifdown ens3 && /sbin/ifup ens3:定义了服务启动时要执行的命令。首先执行 /sbin/ifdown ens3,意味着将 ens3 网络接口停止;接着执行 /sbin/ifup ens3,表示重新启动 ens3 网络接口。 RemainAfterExit=true:指定了即使服务主进程退出后,仍将服务标记为活动状态。这是因为网络接口启动后不会保持运行一个持久的进程,所以需要手动设置为 true,以便 systemd 正确理解服务的运行状态。 Install 部分: [Install] WantedBy=multi-user.target WantedBy=multi-user.target:指定了在哪个系统目标 (multi-user.target,通常是默认的多用户环境) 下会启用这个服务。这意味着当系统进入多用户模式时,这个服务将会被启动。 总结:这个 systemd 服务单元文件的作用是定义了一个服务,用于在系统启动时自动重启 ens3 网络接口。它会在网络服务启动完成后执行,确保网络接口配置的正确性。
方法二:使用nmcli
命令(对于使用NetworkManager的系统)
-
使用
nmcli
添加路由:执行以下命令添加路由:sudo nmcli con mod ens3 +ipv4.routes "10.10.0.0/24 10.10.66.254"
这条命令会将路由添加到
ens3
网卡的配置中。 -
保存更改:执行以下命令以使更改生效:
sudo nmcli con up ens3
方法三:使用route
命令结合启动脚本
-
创建启动脚本:创建一个启动脚本,例如
/etc/network/if-up.d/add-route
:sudo nano /etc/network/if-up.d/add-route
-
添加路由:在脚本中添加以下内容:
#!/bin/sh /sbin/ip route add 10.10.0.0/24 via 10.10.66.254 dev ens3
-
sudo chmod +x /etc/network/if-up.d/add-route
这些方法中,每一种都可以确保在系统启动后,指定的路由规则会被加载并保留。选择其中一种适合你的操作系统和网络配置的方法即可。
- Afrikaans
- Albanian - shqipe
- Arabic - العربية
- Armenian - Հայերէն
- Azerbaijani - azərbaycanca
- Basque - euskara
- Belarusian - беларуская
- Bengali - বাংলা
- Bulgarian - български
- Catalan - català
- Chinese - 中文(简体中文)
- Chinese - 中文 (繁體中文)
- Croatian - hrvatski
- Czech - čeština
- Danish - dansk
- Dutch - Nederlands
- English
- Esperanto - esperanto
- Estonian - eesti
- Filipino
- Finnish - suomi
- French - français
- Galician - galego
- Georgian - ქართული
- German - Deutsch
- Greek - Ελληνικά
- Gujarati - ગુજરાતી
- Haitian Creole - kreyòl ayisyen
- Hebrew - עברית
- Hindi - हिन्दी
- Hungarian - magyar
- Icelandic - íslenska
- Indonesian - Bahasa Indonesia
- Irish - Gaeilge
- Italian - italiano
- Japanese - 日本語
- Kannada - ಕನ್ನಡ
- Korean - 한국어
- Latin - Lingua Latina
- Latvian - latviešu
- Lithuanian - lietuvių
- Macedonian - македонски
- Malay - Bahasa Melayu
- Maltese - Malti
- Norwegian - norsk
- Persian - فارسی
- Polish - polski
- Portuguese - português
- Romanian - română
- Russian - русский
- Serbian - Српски
- Slovak - slovenčina
- Slovenian - slovenščina
- Spanish - español
- Swahili - Kiswahili
- Swedish - svenska
- Tamil - தமிழ்
- Telugu - తెలుగు
- Thai - ไทย
- Turkish - Türkçe
- Ukrainian - українська
- Urdu - اردو
- Vietnamese - Tiếng Việt
- Welsh - Cymraeg
- Yiddish - יידיש